运输层:TCP 连接管理

禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!

TCP 连接

TCP 是面向连接的协议,运输连接用于 TCP 报文的传输,因此连接的建立和释放是每一次面向连接的通信中必备的过程。运输连接有三个阶段,分别是连接建立、数据传送、连接释放,运输连接的管理就是使运输连接的建立和释放都能正常地进行。
TCP 连接建立过程中要解决 3 个问题:

  1. 要使每一方能够确知对方的存在;
  2. 要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
  3. 能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

TCP连接的建立采用客户-服务器方式,主动发起连接建立的应用进程叫做客户(client),被动等待连接建立的应用进程叫做服务器(server)。

连接建立

运行在一台主机(客户)上的一个进程想要和另一台主机(服务器)上的一个进程建立连接,客户进程会先通知客户 TCP,由客户 TCP 采用三次握手的方式与服务器中的 TCP 建立连接。

第一次握手

客户端的 TCP 首先向服务器端的 TCP 发送一个特殊的 SYN 报文段,报文段不包含任何应用层数据,而标志位 SYN 被设置为 1。另外客户会随机选择一个初始序号(cient_isn),并将此编号置于该其实 TCP SYN 报文段的序号字段中(这是一种安全性的做法)。

第二次握手

当服务器收到包含 TCP SYN 报文段的 IP 数据报时,服务器就将之提取出来。服务器将为该 TCP 连接分配缓存和变量,并向该客户 TCP 发送SYNACK 报文段。允许连接报文段也不包含任何应用层数据,但是在报文段首部会包含 3 个重要的信息。首先是 SYN 比特被置为 1,其次 TCP 报文段首部确认号被置为 client_isn + 1,最后服务器选择自己的初始序号(server_isn)写入序号字段。因此 SYNACK 报文段说明服务器收到发起连接的申请,服务器同意连接,并告知服务器的初始序号是 server_isn。

第三次握手

客户收到 SYNACK 报文段后,客户也要给该链接分配缓存和变量。客户机向服务器发送另一个报文段,这是对服务器 SYNACK 的确认(server_isn + 1 放置到 TCP 报文段首部的确认字段)。因为连接已经建立,因此 SYN 比特被置为 0,该阶段可以在报文段负载中携带服务器数据。

连接释放

四次挥手

参与一条 TCP 连接的两个进程中的任何一个都可以终止 TCP 连接,TCP 连接结束后主机中的资源会被释放。例如客户打算关闭连接,则客户应用进程将放出一个关闭连接的指令。客户 TCP 将向服务器发送一个特殊的 TCP 报文段,首部的 FIN 标志位被设置为 1。当服务器接收到报文段后,就发送一个 ACK 报文段,然后发送自己的终止报文段。最后客户对服务器的终止报文进行确认,此时两台主机上用于该链接的所有的资源都会被释放。

定时等待

发起终止的主机必须等待 2MSL 的时间,这么做的目的有 2 个。第一,为了保证发送的最后一个 ACK 报文段能够到达。第二,防止 “已失效的连接请求报文段”出现在本连接中。在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

TCP 连接状态

客户

服务器

FSM 描述

参考资料

《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社

posted @ 2020-07-13 01:51  乌漆WhiteMoon  阅读(365)  评论(0编辑  收藏  举报