典型TCP链接建立和断开状态机
1 简介
TCP 是确保数据在 Internet 上可靠传输的通信协议。在本文中,我们不仅会向您介绍 TCP 是什么,还会深入探讨其丰富的历史、内部运作、它与 Internet 协议 (IP) 的共生关系等等。
TCP/IP 模型 (传输控制协议/Internet 协议) 是一个四层网络框架,可通过互连网络实现设备之间的可靠通信。它提供了一组标准化的协议,用于跨互连网络传输数据,确保高效、无差错的交付。
每一层都有特定的功能,有助于管理网络通信的不同方面,这对于理解和使用现代网络至关重要。
TCP/IP 由国防部 (DoD) 在 1970 年代设计和开发,基于标准协议。TCP/IP 模型是 OSI 模型的简明版本。它与 OSI 模型中的 7 层不同,它包含 4 层。
传输控制协议(通常称为 TCP)是全球计算机网络之间数据通信的基础支柱。作为 Internet 协议 (IP) 套件的一部分,TCP 专门用于实现可靠、有序和错误检查的数据交付。这可确保在发送电子邮件、下载文件或流式传输电影时,每个数据包都完好无损、按顺序且无错误地到达。
- 主要特点
可靠的传输: TCP 的决定性特征之一是它的可靠性。发送数据包时,发送方希望接收方提供确认 (ACK)。如果在预定时间内未收到 ACK,则重新发送数据包。
按序送达:TCP 对它发送的每个数据包进行编号。此编号允许接收方以正确的顺序重新组合数据,即使数据包不按顺序到达也是如此。
错误检查:在发送数据包之前和接收数据包之后,TCP 使用校验和执行错误检查。如果数据包到达时出现错误,则会丢弃该数据包,并触发自动重新传输请求。
拥塞控制:TCP 会根据网络拥塞动态调整其传输速率,从而避免不必要的负载并提高整体网络性能。
2 建立连接的三次握手
TCP协议位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。
- 三次握手原理:
第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。
其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。
-
三次握手过程详细说明:
1、客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);
2、服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;
3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1
2 断开的四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。
收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
- 四次挥手原理:
第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。
其中:FIN标志位数置1,表示断开TCP连接。
可通过以下步骤理解四次挥手:
- 四次挥手过程详细说明:
1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成);
2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成);
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成);
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕
LISTEN:等待从任何远端TCP和端口的连接请求
SYN_SENT: 发送一个连接请求后等待一个匹配的连接请求
SYN_RECEIVED: 发送连接请求并且接收到匹配的连接请求后等待连接请求确认
ESTABLISHED: 表示一个打开的连接,接收到的数据可以倍投递到用户。连接的数据传输阶段的正常状态
FIN_WAIT_1: 等待远端TCP的连接终止请求,或者等待之前发送的连接终止请求的确认。
FIN_WAIT_2: 等待远端TCP的连接终止请求。
CLOSE_WAIT: 等待本地用户的连接终止请求。
CLOSING: 等待远端TCP的连接终止请求确认。
LAST_ACK: 等待先前发送给远端TCP的连接终止请求的确认,包括它字节的连接终止请求的确认。
TIME_WAIT: 等待足够的时间过期以确保远端TCP接收到它的连接终止请求的确认。
1 可靠的实现tcp全双工连接的终止
2 允许老的重复连接在网络中消失
CLOSED: 不在连接状态,这是为方便描述假想的状态,实际不存在。
4 优缺点和连接状态机管理
TCP连接过程中有众多链接状态需要管理,其转换过程可以用如下状态机表示:
TCP/IP 模型的优点
互作性 :TCP/IP 模型允许不同类型的计算机和网络相互通信,促进不同系统之间的兼容性和协作。
可扩展性 : TCP/IP 具有高度可扩展性,使其适用于小型和大型网络,从局域网 (LAN) 到互联网等广域网 (WAN)。
标准化 :它基于开放的标准和协议,确保不同的设备和软件可以协同工作而不会出现兼容性问题。
灵活性 : 该模型支持各种路由协议、数据类型和通信方式,使其能够适应不同的网络需求。
可靠性 : TCP/IP 包括错误检查和重传功能,可确保可靠的数据传输,即使远距离和各种网络条件也是如此。
TCP/IP 模型的缺点
安全问题 : TCP/IP 最初在设计时并未考虑安全性。虽然现在有许多可用的安全协议(例如 SSL/TLS),但它们已添加到基本 TCP/IP 模型之上,这可能会导致漏洞。
小型网络效率低下 :对于非常小的网络,与更简单的网络协议相比,TCP/IP 模型的开销和复杂性可能是不必要的且效率低下。
受地址空间限制 :尽管 IPv6 解决了这个问题,但较旧的 IPv4 系统的地址空间有限,这可能会导致大型网络中出现地址耗尽的问题。
数据开销 :TCP 是传输协议,包括大量开销,以确保可靠传输。这可能会降低效率,尤其是对于小数据包或速度至关重要的网络。
5 小结
TCP 不仅仅是一种协议;它是当今大多数互联网通信的基本心跳。从 1970 年代的起源到现在无处不在的地位,TCP 已经展示了无与伦比的适应性和弹性。
了解其核心功能、细分结构、安全注意事项和其他功能,可以让您了解复杂的工程设计,确保我们的数字交互既无缝又可靠。随着技术的不断发展,TCP 可能会适应和发展,进一步巩固其作为数字通信基石的作用。
- 点赞
- 收藏
- 关注作者
评论(0)