unix网络基础-TCP连接的建立和终止(记录)2

来源:互联网 发布:php system 返回值 编辑:程序博客网 时间:2024/05/16 06:25

TCP连接的建立和终止(记录)2

tcp涉及连接建立和连接终止的操作可以用状态转换图来表示。

TCP为一个连接定义了11种状态,并且规则规定如何基于当前状态及在该状态下所接收的分节从一个状态转换为另一个状态。例如:某一进程在CLOSE状态下执行主动打开时,TCP将发送一个SYN,且新的状态是SYN_SENT。如果这个TCP接着接收到一个带ACK的SYN,它将发送一个ACK,且新的状态是ESTABLISHED。此状态是绝大多数数据发送发生的状态。
自ESTABLISHED状态引出的两个箭头处理连接的终止。如果某个应用进程在接收到一个FIN之前调用close(主动关闭),那就转换到FIN_WAIT_1状态。但如果某个应用进程在ESTABLISHED状态期间接收到一个FIN(被动关闭),那就转换到CLOSE_WAIT状态。
我们用粗线表示通常的客户端状态转换,用粗虚线表示通常的服务器的状态转换。
同时打开,发生在两端几乎同时发送SYN并且这两个SYN在网络中交错的情况。
同时关闭,发生在两端几乎同时发送FIN的情况下。

TCP分组情况

使用下图展示一个完整的TCP连接所发生的实际分组交换情况,包括建立连接、传送数据和终止连接3个阶段。

图中可看到传说中的捎带操作,服务器对客户请求的确认是伴随其应答发送的,图中的read返回。
注意,执行主动关闭的那一端(本例子是客户端,事实上服务器也行的),进入我们TIME_WAIT状态。
主动关闭的一端在接收到FIN分节后,进入持续时间最长为最长分节生命期两倍的TIME_WAIT状态也称为2MSL。RFC建议MSL是2分钟,而来自Berkeley实现传统上用30秒。所以一般此状态持续1分钟到4分钟。
路由“迷途”,某个路由器坏了或两个路由器之间的链路断开时,路由协议花不定长的时间找到另一条路。
路由循环,路由器A把分组发给路由器B,而B找到的路就是重新发送给A。
迷途的重复分组或漫游的重复分组,已知的TCP的发送端有超时重传的机制,这种的情况是,一个分组已经迷途,发送端等了一会儿,重发了分组,而迷途的分组经过路由循环恢复,也将分组发送到目的地,TCP必须处理重复的发组。
TIME_WAIT状态存在的理由:可靠地实现TCP全双工连接的终止;允许老的重复分节在网络中消逝。
TCP不给处于TIME_WAIT状态的端发起新的化身连接。而且TIME_WAIT时间是MSL的2倍,这就足以让某个方向上的分组最多存活MSL秒即被丢弃,另一方向上的应答最多存活MSL也被丢弃。这一就实现了老的重复分组在网路中的消逝。






0 0
原创粉丝点击