Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243277
  • 博文数量: 59
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 900
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-30 20:21
文章分类

全部博文(59)

文章存档

2011年(1)

2009年(58)

我的朋友

分类: 系统运维

2009-04-02 14:49:12

    我们都知道,TCP连接终止需要四次握手,这因为TCP连接是全双工的,因此,每个方向必须单独地进行关闭。这个原则就是当一方完成它的数据发送任务后,就可能用一个FIN来终止这个方向的连接,一般是用shutdown函数,收到一个FIN意味着这个方向没有数据流。每个方向均有一个FIN与一个ACK,共四次握手。
    在这一过程中,客户的状态每别为FIN_WAIT_1,FIN_WAIT_2,TIME_WAIT,服务器的状态分别为,CLOSE_WAIT,LAST_ACK,CLOSED。值得注意的是TIME_WAIT状态,停留在这种状态的持续时间是最长生命期(maximum segment lifetime,简称MSL)的两信。
   
    存在TIME_WAIT状态的理由有两个:
(1) 可靠地实现TCP全双工连接的终止
(2) 允许老的重复分节在网络中消失。
    第一个理由的解释是,假设最终的ACK丢失,服务器将重发最终的FIN,因此客户必须维护状态信息以允许它重发最终的ACK。
   第二个理由是假设同一IP同一端口有一个TCP连接,我们关闭这个连接后,又重新打开打,如果不维持这一状态,那么可能最终的ACK“迷途”,它最终到达了新建立的连接,而如果TIME_WAIT持续时间是2MSL,这就足够允许某个方向上的分组存活MSL秒即被丢弃,另一个方向上的应答最多存活MSL秒也被丢弃,即允许老的重复分组在网络中消失。
阅读(764) | 评论(0) | 转发(0) |
0

上一篇:file命令

下一篇:套接口地址

给主人留下些什么吧!~~