
network
文章平均质量分 82
binary~
所有的努力最终都会绕个大圈回报给你。
展开
-
手写RPC框架(一)服务端与消息编码
消息的decode和encode的方式有很多,例如json,xml,protobuf 包括go特有的gob,所要实现的框架需要可以做到让用户自主选择编码方式。为了实现不同的Codec实例,先对消息体编解码的接口进行抽象,抽象出Codec原创 2022-12-25 21:41:02 · 1182 阅读 · 0 评论 -
TCP详解
如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。........................原创 2022-07-28 14:06:24 · 3316 阅读 · 3 评论 -
OSI参考模型
OSI参考模型,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层原创 2022-07-12 02:12:23 · 653 阅读 · 0 评论 -
TCP 数据粘包问题的处理
TCP是传输层的协议,它是一个面向连接,安全的,流传输协议。因为数据传输基于流的所以发送端和接收端每次处理的数量,处理数据的频率是不对等的,传递的数据是没有消息边界的。根据上面的描述,我们可能遇到如下情况1.一次接收到客户端发送过来的一个完整的数据包2.一次接收到客户端发送的N个数据包,因为每个包长度不定,无法将每个数据包拆开3.一次接受到一个或者多个数据包+下一个数据包的一部分,无法将数据包拆开4.一次收到半个数据包,下一次接收数据的时候收到剩下的一部分+下一个数据包的一部分,当然这种情况更难拆包原创 2022-06-15 14:53:48 · 991 阅读 · 5 评论 -
描述符就绪条件
可读性和可写性对于普通文件这样的描述符显而易见,但我们需要对select返回套接字“就绪”的条件需要明确讨论以下四点满足一点即可一.“监听socket”:该套接字是一个监听套接字且已完成的连接数不为0。而这样的套接字处于可读状态,是因为套接字收到了对方的connect请求,执行了三次握手的第一步:对方发送SYN请求过来,使该方监听套接字处于可读状态;通常情况下,对这样的套接字执行accept操作不会阻塞;二.“已连接socket”:该套接字的接收缓冲区中的数据字节大于等于该套接字的接收缓冲区低水位标记的当前原创 2022-06-08 18:35:45 · 220 阅读 · 0 评论 -
epoll的两种模式和epoll反应堆
边缘触发只有数据到来才触发,不管缓存区中是否还有数据。当被监控的文件描述符上有可读写事件发生时,epoll_wait() 会通知处理程序去读写。如果这次没有把数据全部读写完(如读写缓冲区太大),那么下次调用 epoll_wait() 时,它不会通知你,也就是它只会通知你一次,直到该文件描述符上出现第二次可读写事件才会通知你!这种模式比水平触发效率高,系统不会充斥大量你不关心的就绪文件描述符!Level Triggered (LT)水平触发只要有数据都会触发(默认就是水平触发)。当被监控的文件描述符上有可原创 2022-06-08 11:38:11 · 397 阅读 · 9 评论