快速业务通道

TCP握手/挥手的过程分析

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-08

作者:冯利美,华清远见嵌入式学院讲师.

TCP连接建立

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

服务器准备好接受外来的连接.这通过调用socket、 bind和listen函数来完成,称为被动打开(passive open).

第一次握手:客户通过调用connect进行主动打开(active open).这引起客户TCP发送一个SYN(表示同步)分节(SYN=J),它告诉服务器客户将在连接中发送到数据的初始序列号.并进入SYN_SEND状态,等待服务器的确认.

第二次握手:服务器确认客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号.服务器以单个字节向客户发送SYN和对客户SYN的ACK(表示确认),此时服务器进入SYN_RECV状态.

第三次握手:客户收到服务器的SYN ACK.向服务器发送确认分节,此分节发送完毕,客户服务器进入ESTABLISHED状态,完成三次握手.


图1:TCP握手建立连接

客户端的初始序列号为J,而服务器的初始序列号为K.在ACK里的确认号为发送这个ACK的一端所期待的下一个序列号.SYN只占一个字节的序列号空间,每一个SYN的ACK中的确认号都是相应的初始序列号加1,类似地,每一个FIN(表示结束)的ACK中的确认号为FIN的序列号加1.

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

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户端确认包.这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户端确认包时,删除该条目,服务器进入ESTABLISHED状态.

Empire CMS,phome.net

TCP连接终止

TCP连接终止需四个分节.


图2:TCP挥手关闭连接

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

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

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

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

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

Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号