Linux网络 - tcp三次握手-四次挥手
###
一、术语解释
ACK: 一种传输类的确认控制字符。接收方成功地接收到数据,那么会回复对方一个ACK数据,TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。
SYN: 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1,因此, SYN置1就表示这是一个连接请求或连接接受报文。
FIN: 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
seq: TCP连接是面向字节流的,seq标识某一方发送数据的字节序号(mod 2^32),整个连接中,字节流的起始序号在建立连接时设置,一个报文段的数据包一般会包含多个字节的数据,以数据包第一个字节的序号标识报文段序号。
ack: 下一个期望接收的数据包的序号。
二、建立连接 - 三次握手
2.1. 示意图
1: SYN=1, seq=x,ACK=0
2: SYN=1, ACK=1,seq=y, ack=x+1
3: ACK=1,seq=x+1, ack=y+1
2.2. 需要第三次握手的目的
三、释放连接 - 四次挥手
3.1. 示意图
1: FIN=1, seq=u
2: ACK=1, seq=v, ack=u+1
3: FIN=1, ACK=1, seq=w, ack=u+1
4: ACK=1, seq=u+1, ack=w+1
3.2. TIME_WAIT的作用
TIME_WAIT作用: 2ms,假如ActiveCloser发送的确认释放连接信息PassiveCloser没有收到,这时候P会再次发送一个FIN=1的释放连接报文,而这个时候A还处于TIME-WAIT,所以可以再次发送确认信息。
【参考链接】
https://blog.csdn.net/oney139/article/details/8103223
https://www.cnblogs.com/xiaoming0601/p/6001021.html
https://blog.csdn.net/jewes/article/details/52654997