FIN-WAIT-2状态时
除了对于ESTABLISHED状态的处理外,假如重新发送队列为空,确认用户的CLOSE,但不删除TCB 。
CLOSE-WAIT状态时
同ESTABLISHED状态的处理 。
CLOSING状态时
除了对于ESTABLISHED状态的处理外,假如确定了FIN,则进入TIME-WAIT状态,假如未确认,则忽略这个段 。
LAST-ACK状态时
在此状态下唯一可能发生的就是重要发送远程FIN 。假如确认了FIN,则删除TCB,进入CLOSED状态并返回 。
TIME-WAIT状态时
在此状态下唯一可能发生的就是重要发送远程FIN 。确认它,并重新开始2 MSL超时 。
第六步检查URG位,假如连接处于ESTABLISHED状态,FIN-WAIT-1状态或FIN-WAIT-2 状态,而且URG位被设置,那么RCV.UP <- max(RCV.UP,SEG.UP),通知用户远方有紧急数据,假如用户已经处于紧急状态,不用再多嘴了 。连接在此时不会处于CLOSE-WAIT状态,CLOSING状态,LAST-ACK状态或TIME-WAIT状态,因为还没有从远方获得FIN 。
第七步处理段数据
处于ESTABLISHED状态,FIN-WAIT-1 状态或FIN-WAIT-2 状态时,在进入ESTABLISHED状态后才可能向用户接收缓冲区传送数据 。段中的数据可以移向缓冲区,直到缓冲区满或段为空为止 。假如段为空并带有标记PUSH,在返回缓冲区数据后要通知用户接收到PUSH 。TCP传送数据时必须对接收到的数据也发给确认 。前面已经说过对RCV.NXT和RCV.WND的处理,这里不再多说了 。发送的确认有如下格式: 。
而CLOSE-WAIT状态,CLOSING状态,LAST-ACK状态或TIME-WAIT 状态根本不会发生,因为还未从远程TCP接收到FIN 。
第八步检查FIN位 。假如状态是CLOSED,LISTEN或SYN-SENT,不要处理FIN,因为此时的SEG.SEQ不会的意义,应该直接抛弃数据段返回 。假如设置了FIN位,通知用户"connection closing"中止所有正在进行的RECEIVE,增加RCV.NXT超过FIN,对FIN发送确认 。
假如此时处于:SYN-RECEIVED状态或ESTABLISHED状态进入CLOSE-WAIT状态 。
假如此时处于FIN-WAIT-1 状态
假如确定了FIN段,那么进入TIME-WAIT状态,打开time-wait计数器,关闭其它计数器,假如没有确认,进入CLOSING状态 。
假如此时处于FIN-WAIT-2状态
进入TIME-WAIT状态,关闭其它计数器,打开time-wait计数器 。
假如此时处于CLOSE-WAIT状态或CLOSING状态或LAST-ACK状态,保留各自原来的状态 。
假如此时处于TIME-WAIT状态,保持在TIME-WAIT状态 。重新开始2 MSL time-wait超时 。
用户超时
对于任何一种状态,用户超时的情况下,发送队列中的数据,返回"error: connection aborted due to user timeout",删除TCB,进行CLOSED状态并返回 。
重发超时
在任何状态下,假如重发队列中的数据段发送超时,将它再次放到队列首部重新发送 。
TIME-WAIT超时
【Transmission Control Protocol, TCP 传输控制协议】假如time-wait超时,删除TCB,进行CLOSE状态并返回 。
- Wireless Application Protocol WAP-无线应用协议
- Internet Protocol Internet协议
- BOOTP:Bootstrap Protocol 应用层BOOTP:引导协议
- IP的概念及实质
- Session Initial Protocol SIP介绍
- NetControl 局域网连通状态动态监控
- Ubuntu安装Transmission
- Total Control怎么连接手机
- 控制Control免费怎么领 控制Control免费领取方法一览
- 控制游戏免费领取方法介绍 control免费送
