Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98366
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-17 11:22
文章分类

全部博文(22)

文章存档

2015年(6)

2014年(16)

我的朋友

分类: LINUX

2014-09-30 15:32:32

TCP握手/挥手的过程分析

TCP连接建立

TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

服务器必须准备好接受外来的连接。这通过调用socket、 bindlisten函数来完成。

客户端的初始序列号为J,而服务器的初始序列号为K

第一次握手:客户通过调用connect进行主动连接。这引起客户TCP发送一个SYN(表示同步)SYN = 1 和一个J客户端初始序列号 。并进入SYN_SEND状态,等待服务器的确认。

第二次握手:服务器必须确认客户的SYN ,服务器以单个字节向客户发送SYN和对客户SYNACK(表示确认),此时服务器进入SYN_RECV状态 。 

第三次握手:客户收到服务器的SYN+ACK。向服务器发送确认分节,客户端和服务器端都进入ESTABLISHED(成功连接)状态,完成三次握手。

    


                                  1TCP握手建立连接


完成三次握手,客户端与服务器开始传送数据,在上述过程中还有一些重要概念。

关于JK的关系 :

J是客户端的初始序列,客户端下一次接收数据包时的确认序列号是 J +1

K是服务器的初始序列,服务器下一次接收数据包时的确认序列号是K+1

 


TCP连接终止

TCP连接终止需四个分节。


                               2TCP挥手关闭连接

第一次握手:某个应用进程首先调用close,我们称这一端执行主动关闭。这一端的TCP于是发送一个FIN分节,表示数据发送完毕。

第二次握手:接收到FIN的另一端执行被动关闭(passive close)。这个FINTCP确认。它的接收也作为文件结束符传递给接收端应用进程(放在已排队等候应用进程接收到任何其他数据之后)

第三次握手:一段时间后,接收到文件结束符的应用进程将调用close关闭它的套接口。这导致它的TCP也发送一个FIN

第四次握手:接收到这个FIN的原发送端TCP对它进行确认。

面向字节的数据传送流(如TCP字节流、Unix管道等)也使用EOF表示在某个方向上不再有数据待传送。在TCP字节流中,EOF的读或写通过收发一个特殊的FIN分节来实现。


阅读(1145) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~