Linux网络 - Tcp连接机制

Linux网络 - tcp三次握手-四次挥手

###

一、术语解释

ACK: 一种传输类的确认控制字符。接收方成功地接收到数据,那么会回复对方一个ACK数据,TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

SYN:  在连接建立时用来同步序号。当SYN=1ACK=0时,表明这是一个连接请求报文,对*同意建立连接,则应在响应报文中使SYN=1ACK=1,因此,  SYN1就表示这是一个连接请求或连接接受报文。

FIN: 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

seq: TCP连接是面向字节流的,seq标识某一方发送数据的字节序号(mod 2^32),整个连接中,字节流的起始序号在建立连接时设置,一个报文段的数据包一般会包含多个字节的数据,以数据包第一个字节的序号标识报文段序号。

ack: 下一个期望接收的数据包的序号。


二、建立连接 - 三次握手

2.1. 示意图

Linux网络 - Tcp连接机制

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. 需要第三次握手的目的

Linux网络 - Tcp连接机制

三、释放连接 - 四次挥手

3.1. 示意图

Linux网络 - Tcp连接机制

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.****.net/oney139/article/details/8103223

https://www.cnblogs.com/xiaoming0601/p/6001021.html

https://blog.****.net/jewes/article/details/52654997