首先,对于TCP通信来说,每个TCP Socket的内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式及TCP的滑动窗口就是依赖于这两个独立的Buffer和该Buffer的填充状态。
接收缓冲区把数据缓存到内核,若应用进程一直没有调用Socket的read方法进行读取,那么该数据会一直被缓存在接收缓冲区内。不管进程是否读取Socket,对端发来的数据都会经过内核接收并缓存到Socket的内核接收缓冲区。
read索要做的工作,就是把内核接收缓冲区中的数据复制到应用层用户的Buffer里。
进程调用Socket的send发送数据的时候,一般情况下是讲数据从应用层用户的Buffer里复制到Socket的内核发送缓冲区,然后send就会在上层返回。换句话说,send返回时,数据不一定会被发送到对端。


TCP通信中,每个Socket包含独立的发送和接收缓冲区,实现全双工模式。滑动窗口协议控制发送速度,防止接收方缓存溢出。当数据发送后未收到ACK,窗口会收缩等待,收到ACK则滑动窗口前移。Socket的阻塞模式可能导致线程在等待I/O时被阻塞,但在少量连接情况下效率较高。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



