声明:本系列文章参考书:《TCPIP网络编程 》[韩] 尹圣雨
本人仅作笔记使用
目录
之前说到TCP套接字的收发是无边界的,也就是说服务端如果调用1次write 40bytes的数据,客户端也有可能通过4次read来每次读取10字节。
那么客户端在第一次读取10字节后,剩下的30字节在哪里等候?
在I/O缓冲中,具体的,输入缓冲中。
write函数后并非立即传输数据;
read函数调用后也并非立即接收数据。
更准确的说,write调用瞬间,数据将移动至输出缓冲;read函数调用瞬间,从输入缓冲读取数据。
总结如下:
那如果客户端输入缓冲为50字节,服务端传输了100字节?
这个问题由TCP中的滑动窗口协议来解决,其大小由接收端来确定。
- 接收端:最多可以向我传输50字节
- 发送端:OK
- 接收端:我腾出了20字节空间,最多可以接受70字节
- 发送端:OK
分为三步:
直白理解,引用原文:
- 【Shake 1】Socket A:你好,B,我要给你传送数据,建立连接吧
- 【Shake 2】Socket B:好的,我这边已就绪
- 【Shake 3】Socket A:OK,感谢受理我的请求
以上为三次握手的对话过程。图如下
从图中可以获得信息:套接字以全双工方式工作,双向传递数
直白理解,引用原文:
- Socket A:你好,B,我要断开连接
- Socket B:哦,好的,请稍后
- Socket B:我这边也准备就绪了,可以断开
- Socket A:OK,谢谢合作。
双方各发送一次FIN消息后断开连接。