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

浙公网安备 33010602011771号