1. TCP套接字中的IO缓冲
IO缓冲在每个TCP套接字中单独存在;
IO缓冲在创建套接字时自动生成;
即使关闭套接字也会继续传递输出缓冲中的遗留数据;
关闭套机子将丢失输入缓冲中的数据。
假如客户端输入缓冲只有50字节,而服务器端传输了100字节,会有这问题吗?
不会,TCP套接字的数据收发是没有边界的,不会发送类似问题。TCP有滑动窗口协议,数据收发时不会因为缓冲溢出而丢失数据。
2.套接字连接
三次握手:Three-way handshaking
a.主机A --> 主机B:SYN:SEQ:1000,ACK:-
SYN(Synchronization),传递的数据包序号为1000,ACK为空。如果对方接收无误,ACK要+1.
b.主机B --> 主机A:SYN+ACK:SEQ:2000,ACK:1001
SEQ:主机B的序列号,ACK1001表示接收无误,请求传递SEQ1001数据包。
c.主机A --> 主机B:ACK:SEQ1001,ACK2001.
3. 交换数据
主机A分两次向主机B发送200字节数据。 主机A第一个数据包序列号1200,主机B收到后,返回的ACK=SEQ号+传递的字节数+1
假如传输过程中发生丢包,TCP会启动重传。
3.断开套接字
四次握手:Four-way handshaking
a.FIN:SEQ5000,ACK-
b.ACK:SEQ7500,ACK5001,FIN的ACK指令
c.FIN:SEQ7501,ACK5001;ACK5001是因为接收ACK消息后未接收数据而重传的。
d.ACK:SEQ5001,ACK7502