1. 名称解释
可以用WireShark通过分析Tcp报来得知,工具显示得很清楚。
1.1 10个控制标志位 Flag
下面的含义只针对其标志位为1的情况,比如SYN=1才代表握手阶段。FIN=1代表挥手阶段。
SYN 表示新建连接
ACK 表示响应
如果发送数据为空的话,可以发送同一个Seq的多个ACK,这个可以用来保活和窗口协商。这个单个ACK只能TCP协议实现发送,应用层只能发[ACK+PSH]FIN (Finish)表示关闭连接
PSH (Push)表示传输数据
RST (Reset)表示连接重置
这个RST的原因是因为close连接时,本地接受缓冲区还有数据。避免RST的方法就是调用close的之前,调用shutdown。netty称之为优雅关闭。Nonce
CWR
ECN-Echo
Urgent
Flags 一共16位,目前只用到9位,剩下的7位是保留位。
1.2 Tcp传输数据中的字段
Seq(Sequence number): 本次发送得顺序号
Ack(Acknowledgment number): 确认号,其值 = 对方的seq
+ 对方的Tcp Segement size
, 其含义代表我收到你seq号的数据了,长度是多少。
Next sequence number: 这个是期待对方返回的Ack值,这个不是在TCP协议内。
注意ACK是标志位, Ack是确认号。大小写不一样,含义也不同。
TODO: TCP Server在等待关闭确认时,如果又接到握手信息,那么就会取消关闭,复用当前链接。