Loading

4-传输层 tcp四次挥手

tcp四次挥手

连接的释放,数据传输完毕后,发送特殊报文FIN=1表示释放连接请求,同时同步序列号,第一次挥手,进入第一次等待状态

接收方收到后,会发送报文进行确认ACK=1,seq=v,ack=u+1,表示你发送的请求已收到,同时序列号我已经收到,第二次挥手,发送方进入第二次等待状态,接受方进入关闭等待状态,此时接收方还可以进行数据发送,发送方主动提出释放连接请求,表示发送方数据已经完成,而接收方的数据可能还没有发送完成

当发送方数据发送完成后,发送报文FIN=1 ACK=1 seq=w ack=w+1,同时携带了ack=w+1重复对第一个报文进行确认,第三次挥手

发送方收到后再次发送报文,ACK=1 seq=u+1 ack=w+1,表示我已经收到你的信息,我们都把连接释放掉吧,这期间接收方处于最后确认状态。而此时发送方进入一个特殊状态时间等待状态,用到了等待计时器,此期间没有出现任何问题则进入关闭状态

 

 

 等待计时器

等待计时器会等待2倍的MSL时间

MSL:max segment lifeti最长报文寿命,一般设置为2分钟

因为每一个tcp连接都会占用一个端口,是占用着资源的,在连接的状态,想启另外一个进程复用端口是不可以的,因为已被专用,等待状态不会释放端口。

所以释放连接后,无法立刻复用端口,只有在计时器结束后才会释放端口,只能等待2被MSL才能复用端口

为什么需要等待2MSL

发送方第四次挥手进入等待状态,第四次报文是没有确认的

等待计时器主要是为了确保发送方的ACK可以到达接收方,2MSL也是报文在网络中存活的最长时间

2MSL时间里,如果第四个报文没有被接收方接收到的话,接收方会认为我发出的第三次挥手报文没有到达对方

此时就会重新把第三次挥手报文重发,此时接收方就知道我发的第四次挥手动作接收方不知道,就会重发第四次挥手

等待计时器还能确保当前连接的所有报文都已经过期,因为最后一次的挥手报文都等待了2MSL,其他报文的时间肯定大于此时间

socket编程

 使用端口那口来标记不同的网络进程,ip+port组合用socket套接字来表示

套接字只是ip+port组合的新名字,表示tcp的一端

一个ip可以有多个socket,因为端口可以不同。

ip与port任何一个改变就组成一个新的socket

 

posted @ 2021-08-10 15:57  浅忆尘  阅读(70)  评论(0)    收藏  举报