TCP协议定时器+URG,PSH的区别+TCP连接释放

【URG和PSH的区别】:
URG:只有当URG标志置为1的时候紧急指针才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
PSH:标志位为“1”,表示接收方应该尽快将这个报文段交给应用层。
区别:
URG:使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据流中了。
PSH:告诉接收方应该尽快将这个报文段交给应用层,这个报文段数据可以是任何TCP数据。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

【TCP协议定时器】
TCP使用四种定时器(Timer,也称为“计时器”):
重传计时器:Retransmission Timer
坚持计时器:Persistent Timer
保活计时器:Keeplive Timer
时间等待计时器:Time_Wait Timer。

重传定时器:适用于当希望收到另一端的确认。
为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生两种情况:若在计时器超时之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位;

坚持定时器:使窗口大小信息保持不断流动
【原因】:
TCP是通过让接收方指明自己最大所能接受的数据字节数【窗口大小】来进行流量控制。但是当窗口大小为0的时候,此时将阻止发送方传送数据,直到窗口变为非0为止。如下图,当报文段9丢失了之后,则双方就有可能因为等待双方而是连接终止:此时接收方等待接收数据(接收方向发送方发送了报文段9),而发送方在等待允许它继续发送数据的窗口更新,从而出现了死锁。TCP协议只确认那些包含有数据的ACK报文段,不对ACK报文段进行确认。所以为了解决出现报文9丢失的这种情况,发送方使用了一个坚持定时器来周期性地向接收方查询,以便发现窗口是否已经增大。【窗口探查】
TCP协议定时器+URG,PSH的区别+TCP连接释放
【功能】:
当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端TCP就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。探测报文段有序号,但序号永远不需要确认,甚至在计算对其他部分数据的确认时这个序号也被忽略。探测报文段提醒接收端TCP,确认已丢失,必须重传。
坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止(通常为60秒)。之后,发送端每隔60s就发送一个报文段,直到窗口重新打开为止;

保活定时器:
【作用】
1,检测一个空闲连接的另一端合适崩溃或重启
2,在连接两个端系统的网络出现临时故障的时候,保活选项会引起实际上很好的连接终止。
【功能】
一个给定的连接在两个小时之内没有任何动作,则服务器就向客户端发送一个探查报文段。客户主机必须处在以下4个状态之一。
1)客户主机依然正常运行,并从服务器可达。客户的TCP响应正常。而服务器也知道对方是正常工作的。服务器在两个小时以后将保活定时器复位。如果在两个小时定时器到时间之前有应用程序的通信量通过此连接,则定时器在交换数据后的未来2小时再复位。
2)客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务器将不能收到对探查的响应,并在75秒后超时。服务器总共发送了10个这样的探查,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
3)客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。
4)客户主机正常运行,但是从服务器不可达,这与2)相同,因为TCP不能够区分状态4)和2)之间的区别,他所能发现的就是没有收到探查的响应。

在第一种情况下,服务器的应用程序没有感觉到保活探查的发生。TCP层负责一些一切。这个过程对应用程序都是透明的,直达2,3,4,情况的发生,在这三种情况下,服务器应用程序将收到来自它的TCP的差错报告(通常服务器已经向网络发出了读操作请求,然后等待来自客户的数据。如果保活功能返回一个差错,则将该差错作为读操作的返回自返回给服务器)。

2MSL定时器:测量一个连接处于TIME_WAIT状态的时间。
在连接终止期使用,当TCP关闭连接时,并不认为这个连接就真正关闭了,在时间等待期间,连接还处于一种中间过度状态。这样就可以时重复的fin报文段在到达终点后被丢弃,这个计时器的值通常设置为一格报文段寿命期望值的两倍。

【TCP连接释放】
TCP协议定时器+URG,PSH的区别+TCP连接释放
TCP连接状态转化图
TCP连接与释放基于状态机模式的。画TCP状态图。主动断开连接的一方会处于TIME_WAIT状态。为什么有TIME_WAIT时间?
TCP协议定时器+URG,PSH的区别+TCP连接释放
TCP四次挥手示意图
TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL。它是任何报文段被丢弃前在网络内的最长时间。
1,为什么主动断开连接的一方会有TIME_WAIT状态?
第一点:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防止这个ACK丢失(另一端超时并重发最后的FIN)。
如图,为了保证A发送的最后一个ACK报文能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常的步骤进入CLOSED状态。
第二点:为了使主动断开连接的一方所有报文在网络中消失。