TCP握手/挥手的过程分析
作者:冯利美,华清远见嵌入式学院讲师. 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状态,完成三次握手.
客户端的初始序列号为J,而服务器的初始序列号为K.在ACK里的确认号为发送这个ACK的一端所期待的下一个序列号.SYN只占一个字节的序列号空间,每一个SYN的ACK中的确认号都是相应的初始序列号加1,类似地,每一个FIN(表示结束)的ACK中的确认号为FIN的序列号加1. 完成三次握手,客户端与服务器开始传送数据,在上述过程中还有一些重要概念. 未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户端确认包.这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户端确认包时,删除该条目,服务器进入ESTABLISHED状态.
TCP连接终止 TCP连接终止需四个分节.
第一次握手:某个应用进程调用close,我们称这一端执行主动关闭.这一端的TCP于是发送一个FIN分节,表示数据发送完毕. 第二次握手:接收到FIN的另一端执行被动关闭(passive close).这个FIN由TCP确认.它的接收也作为文件结束符传递给接收端应用进程(放在已排队等候应用进程接收到任何其他数据之后). 第三次握手:一段时间后,接收到文件结束符的应用进程将调用close关闭它的套接口.这导致它的TCP也发送一个FIN. 第四次握手:接收到这个FIN的原发送端TCP对它进行确认. 面向字节的数据传送流(如TCP字节流、Unix管道等)也使用EOF表示在某个方向上不再有数据待传送.在TCP字节流中,EOF的读或写通过收发一个特殊的FIN分节来实现.
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |