TCP连接的建立:

【计算机网络】TCP连接建立和释放_网络

 (1)B的TCP服务器进程首先创建传输控制块TCB,准备接受客户进程的连接请求。

然后服务器进程处于LISTEN状态,等待客户的连接请求。

(2)A的TCP进程首先创建传输控制块TCB,然后在打算建立TCP连接时,向B发出连接请求报文段,首部的同步位SYN=1。首部的同步位SYN=1,同时选择一个初始序号seq=x。

TCP规定,SYN报文段不能携带数据,但是要消耗掉一个序号。

客户端进入SYN-SENT状态

(3)客户端收到B的确认后,还要向B给出确认。

确认报文段ACK=1,确认号ack=x+1

同时发送SYN=1,seq=y

TCP服务器进入SYN-RCVD状态。

(4)TCP客户进程收到B的确认后,还要向B给出确认。

确认报文段ACK=1,ack=y+1

seq=x+1。如果不携带数据则不消耗序号。

A进入ESTABLISHED状态

(5)B收到A的确认后进入ESTABLISHED状态

TCP连接的释放:

【计算机网络】TCP连接建立和释放_tcp/ip_02

(1)A应用进程向TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接。

A把连接释放报文段首部的终止控制位FIN置1,序号seq=u,等于前面已传送过的数据的最后一个字节的序号加1。

A进入FIN-WAIT-1状态,等待B确认。

FIN报文段即使不携带数据,也消耗掉一个序号。

(2)B收到连接释放报文段后发出确认

ACK=1,ack=u+1,seq=v

TCP服务器处于半关闭状态。从B到A方向的连接并未关闭。

(3)A收到来自B的确认后进入FIN-WAIT-2状态,等待B发出的连接释放报文

(4)如果B已经没有要向A发送的数据,B发出连接释放报文。

FIN=1,B必须重复上次已发送过的确认号ack=u+1,seq=w(在半关闭状态B又可能发送了一些数据)

B进入LAST-ACK状态,等待A的确认

(5)A收到B的连接释放报文后发送确认

ACK=1,ack=w+1,seq=u+1

TCP连接没有立即释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入到CLOSED状态。MSL叫最长报文段寿命。

(1)为了保证A发送的最后一个ACK报文段能够到达B

(2)A发送完最后一个ACK报文段后,再经过2MSL,就可以是本连接持续的时间内所产生的所有报文段都从网络上消失

【计算机网络】TCP连接建立和释放_tcp/ip_03

 

【计算机网络】TCP连接建立和释放_tcp/ip_04

wireshark三次握手实验:

三次握手:

【计算机网络】TCP连接建立和释放_连接释放_05

【计算机网络】TCP连接建立和释放_TCP_06

SYN标志位为0x002,Sequence号为558864304,ack=0

【计算机网络】TCP连接建立和释放_TCP_07

SYN=1,ACK=1,ack=558864305,为上一个报文的seq+1。

【计算机网络】TCP连接建立和释放_计算机网络_08

ack=2249409165为上一个报文的seq+1,ACK=1。连接建立。