tcp握手挥手的过程分析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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分节来实现。

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档