返回"state = FIN-WAIT-1"和TCB指针 。
FIN-WAIT-2状态
返回"state = FIN-WAIT-2"和TCB指针 。
CLOSE-WAIT状态
返回"state = CLOSE-WAIT"和TCB指针 。
CLOSING状态
返回"state = CLOSING"和TCB指针 。
LAST-ACK状态
返回"state = LAST-ACK"和TCB指针 。
TIME-WAIT状态
返回"state = TIME-WAIT"和TCB指针 。
接收到数据段
假如处于CLOSED状态,所有到达的数据都被抛弃 。包括RST的也不例外 。假如接收到的数据段不包括RST,则返回一个RST 。对于发送TCP要选择它可以认知的确认和序列号 。假如关闭ACK位,则序列号为0,格式如下:
假如处于LISTEN状态,首先检查RST,接收到的RST应该被忽略 。下来应该检查ACK,假如连接处于LISTEN状态下,任何ACK都是错误的,应该返回RST段,它的格式如下:
第三步应该检查SYN,假如SYN位设置了,检查安全性,假如接收数据段中的security/compartment与TCB中的不能匹配,返回RST段,格式如下:
第四步是处理其它数据和控制信息 。其它的数据段(不包括SYN)应该有ACK,因此不要对它进行ACK处理 。假如接收到RST段,则它是非法的 。假如确实接收到了,抛弃它,直接返回 。
假如处于SYN-SENT状态 。首先检查ACK位,假如设置了ACK位,而且SEG.ACK =< ISS或SEG.ACK > SND.NXT,发送RST 。(除非设置了RST位,假如这样,抛弃这个数据段直接返回) 。RST段的格式如下:
假如SND.UNA =< SEG.ACK =< SND.NXT,那么ACK是可以接受的 。
下一步检查RST位 。在设置了RST的情况下,假如ACK是可以接受的,通知用户"error: connection reset",抛弃接收到的数据段并进入CLOSED状态,删除TCB并返回 。假如ACK不能接受,抛弃数据段返回 。
第三步检查安全性和优先级 。假如security/compartment和TCB中的security/compartment不匹配,发送RST段 。在发送RST段的时候,假如已经有ACK了,格式为:
在没有发现不匹配的时候,假如有ACK,段中的优先级必须和TCB中的匹配,假如不匹配,发送RST,其格式为:
第四步检查SYN位 。只有在ACK位是合法或没有ACK而且数据段中不包括RST的情况下才能进行这一步 。假如设置了SYN位,而且security/compartment和优先级合法,那么RCV.NXT设为SEG.SEQ 1,IRS设为SEG.SEQ 。SND.UNA应该增加和SEG.ACK相等,在重新发送队列中原来等待确认而现在已经被确认的数据段也被清除 。假如SND.UNA > ISS,改变连接状态为ESTABLISHED,形成下面格式的ACK段并发送:
推荐阅读
- 高压锅压绿豆汤需要多少时间
- 高温消毒多长时间最佳
- 宿迁有高铁吗 宿迁有没有高铁
- 如何提高鸡种蛋受精率
- 年龄大的人还会出现心梗吗,人到一定年龄,心脏也渐渐显老态,高血压,冠心病,糖尿病,心经梗塞纷纷找上门来,如何预防这类病症的
- 螃蟹能带上高铁吗 可以带螃蟹上高铁吗
- k火车时速一般多少
- 稻城亚丁有高原反应吗
- 什么是高热量食物有哪些 高热量食物有哪些
- 高利贷需要偿还吗
