Chinaunix首页 | 论坛 | 博客
  • 博客访问: 493570
  • 博文数量: 72
  • 博客积分: 1851
  • 博客等级: 上尉
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-16 17:50
文章分类

全部博文(72)

文章存档

2013年(1)

2012年(17)

2011年(51)

2010年(3)

分类: LINUX

2011-06-06 19:05:17

TCP中,所涉及的状态转换如下:

最上面的CLOSED为起始状态点,其中的虚线部分为服务器,而实线部分为客户端。

在一开始服务器处于LISTEN状态,当客户端主动连接服务器时,客户端向服务器发生SYN请求,服务器接受到SYN请求,发送ACK,此时服务器处于 SYN_RCVD,而客户端处于状态SYN_SENT状态。

当客户端发送ACK请求后,服务器与客户端之间就处于连接建立状态,ESTABLISHED状态,双方开始进行通信。

通信完成后,一方开始发送FIN请求(由于TCP为全双工通信,则任何一方都可以发送终止数据流向的FIN请求),先发的一方称为active ,另一方则称为passive ,active发送完FIN请求后,则处于FIN_WAIT_1等待对方的确认,而passive 接受到FIN请求后,发送ACK确认之后就处于CLOSE_WAIT状态,active 接受到ACK之后,就处于FIN_WAIT_2状态,如果先接受到FIN,则发送ACK,处于状态CLOSING,如果同时接受FIN,ACK则处于TIME_WAIT状态。

passive 发送完数据后,也发送 FIN请求,这样它最后只需要接受一个ACK确认,这样它就处于状态LAST_ACK,而当active发送ack之后,就处于状态TIME_WAIT,到了2MSL时间后,端口自动重用。

阅读(1640) | 评论(0) | 转发(0) |
0

上一篇:C++虚函数(二)

下一篇:fuse多线程(一)

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