打工人日报#20251029
打工人日报#20251029
TCP 协议介绍
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接、可靠的传输层协议,在 TCP/IP 协议族中扮演着核心角色,为应用层提供了稳定的数据传输服务。
1. TCP 协议的特点
- 面向连接:在数据传输之前,TCP 需要在发送方和接收方之间建立一条逻辑连接。这个过程通过三次握手来完成,确保双方都做好数据传输的准备。连接建立后,数据在这条连接上有序地传输。传输结束后,通过四次挥手来关闭连接,释放相关资源。例如,在进行文件传输时,TCP 会先建立连接,保证文件数据能够准确无误地按顺序传输到接收方。
- 可靠传输:TCP 通过一系列机制来保证数据的可靠传输。它使用序列号对每个发送的数据段进行编号,接收方通过确认应答(ACK)机制告知发送方已成功接收的数据。如果发送方在一定时间内没有收到确认应答,就会重传数据。此外,TCP 还会对数据进行校验和计算,以检测数据在传输过程中是否出错。例如,在网络不稳定的情况下,部分数据段可能丢失,TCP 的重传机制会确保这些数据段最终能被接收方正确接收。
- 流量控制:为了防止发送方发送数据过快,导致接收方来不及处理而丢失数据,TCP 采用流量控制机制。接收方通过在确认应答中携带自己的接收窗口大小信息,告知发送方自己当前能够接收的数据量。发送方根据接收方的接收窗口大小来调整自己的发送速率。比如,当接收方处理数据的速度较慢时,会减小接收窗口大小,发送方收到这个信息后就会降低发送速率。
- 拥塞控制:TCP 能够感知网络的拥塞情况,并采取相应措施来避免网络拥塞。当网络出现拥塞时,路由器可能会丢弃数据包,导致发送方重传数据,进一步加剧拥塞。TCP 通过慢启动、拥塞避免、快速重传和快速恢复等算法来调整发送窗口大小,从而控制数据发送速率,缓解网络拥塞。例如,在网络拥塞时,TCP 会逐渐降低发送窗口大小,减少数据发送量,直到网络状况改善。
2. TCP 数据段格式
- 源端口号(Source Port):2 字节,标识发送端应用程序使用的端口号,用于区分同一主机上的不同应用程序。
- 目的端口号(Destination Port):2 字节,指定接收端应用程序的端口号,确保数据能够准确交付给目标应用程序。
- 序列号(Sequence Number):4 字节,用于标识 TCP 数据段在数据流中的位置。在连接建立时,发送方会随机选择一个初始序列号,后续发送的数据段序列号依次递增。接收方根据序列号对数据进行排序和重组,确保数据的顺序性。
- 确认号(Acknowledgment Number):4 字节,是接收方期望接收的下一个数据段的序列号。当接收方成功接收数据后,会在确认应答中返回确认号,告知发送方已成功接收的数据位置,让发送方知道可以继续发送后续数据。
- 数据偏移(Data Offset):4 位,以 4 字节为单位,表示 TCP 首部的长度。由于 TCP 首部可能包含选项字段,长度是可变的,数据偏移字段用于指示首部的实际长度,从而确定数据部分的起始位置。
- 保留(Reserved):6 位,保留字段,目前未使用,通常设置为 0。
- 控制位(Control Bits):6 位,包含多个控制标志位,用于控制 TCP 连接的建立、数据传输和连接关闭等操作。常见的控制位包括:
- SYN(Synchronize):同步序列号,用于连接建立阶段。SYN = 1 表示这是一个连接请求或连接接受报文。
- ACK(Acknowledgment):确认标志,ACK = 1 时,确认号字段有效,表明接收方已成功接收数据。
- FIN(Finish):结束标志,FIN = 1 表示发送方已完成数据发送,请求关闭连接。
- RST(Reset):复位标志,RST = 1 时,表示连接出现异常,需要重置连接。
- 窗口大小(Window Size):2 字节,接收方通过该字段告知发送方自己当前的接收窗口大小,即还能接收多少字节的数据。发送方根据这个窗口大小来调整自己的发送速率,实现流量控制。
- 校验和(Checksum):2 字节,用于检测 TCP 数据段在传输过程中是否发生错误。校验和的计算包括 TCP 首部、数据部分以及一个伪首部(包含源 IP 地址、目的 IP 地址、协议字段和 TCP 长度等信息)。接收方通过重新计算校验和来验证数据的完整性。
- 紧急指针(Urgent Pointer):2 字节,当 URG 标志位为 1 时,紧急指针字段有效。它指向紧急数据的末尾,告诉接收方在数据流中紧急数据的位置。
- 选项(Options):可变长度,用于一些可选功能,如最大段大小(MSS)协商、窗口扩大因子、时间戳等。选项字段以 32 位为边界进行填充,不足部分补 0。
3. TCP 连接的建立与关闭
- 连接建立(三次握手):
- 第一次握手:客户端向服务器发送一个 SYN 报文段,其中包含客户端随机生成的初始序列号(ISN),表示客户端希望与服务器建立连接。
- 第二次握手:服务器接收到客户端的 SYN 报文段后,向客户端发送一个 SYN + ACK 报文段。该报文段中的 SYN 标志位为 1,确认号为客户端的序列号加 1,同时服务器也随机生成自己的初始序列号,告知客户端自己也准备好建立连接。
- 第三次握手:客户端接收到服务器的 SYN + ACK 报文段后,向服务器发送一个 ACK 报文段,确认号为服务器的序列号加 1,表明客户端已收到服务器的连接确认。此时,双方的连接建立成功,可以开始数据传输。
- 连接关闭(四次挥手):
- 第一次挥手:主动关闭方(通常是客户端)发送一个 FIN 报文段,FIN 标志位为 1,表示主动关闭方已完成数据发送,请求关闭连接。
- 第二次挥手:被动关闭方(通常是服务器)接收到 FIN 报文段后,发送一个 ACK 报文段,确认号为主动关闭方的序列号加 1,表明已收到关闭请求,但被动关闭方可能还有数据需要继续发送,所以不会立即关闭连接。
- 第三次挥手:当被动关闭方完成数据发送后,向主动关闭方发送一个 FIN 报文段,请求关闭连接。
- 第四次挥手:主动关闭方接收到被动关闭方的 FIN 报文段后,发送一个 ACK 报文段,确认号为被动关闭方的序列号加 1,然后等待一段时间(2MSL,Maximum Segment Lifetime,最大报文生存时间)后关闭连接。被动关闭方收到 ACK 报文段后,也关闭连接。
4. TCP 的应用场景
- 文件传输:如 FTP(文件传输协议)和 SFTP(安全文件传输协议),需要确保文件的完整性和准确性,TCP 的可靠传输特性能够保证文件在传输过程中不丢失、不损坏,并且按顺序到达接收方。
- 电子邮件:SMTP(简单邮件传输协议)用于发送邮件,POP3(邮局协议版本 3)和 IMAP(互联网消息访问协议)用于接收邮件,这些协议都依赖 TCP 来保证邮件数据的可靠传输,避免邮件内容出现错误或丢失。
- 网页浏览:HTTP(超文本传输协议)在传输网页数据时,通常使用 TCP 协议。浏览器与服务器之间通过 TCP 连接进行通信,确保网页的文本、图片、视频等资源能够完整、正确地传输到浏览器端显示。
阅读
《晚熟的人》
晚熟的人似乎也是不靠谱的!

