golang,go,博客,开源,编程

认识TCP

Published on with 0 views and 0 comments

TCP协议简介

TCP(Transmission Control Protocol,传输控制协议) 是一种面向连接、可靠的传输层协议。它定义了在计算机网络中如何可靠地传输数据,并确保数据在网络上传送的顺序性、完整性和无误性。TCP 是 IP协议族(即 TCP/IP 协议族)中的一个核心协议,它常常与 IP(Internet Protocol) 一起使用,负责实现端到端的可靠通信。由于其可靠性和数据完整性,TCP 被广泛应用于各种需要数据传输的网络应用中,如网页浏览(HTTP)、电子邮件(SMTP、IMAP、POP3)和文件传输(FTP)等。

1. TCP的特性

1.1 面向连接

TCP 是一种面向连接的协议。在通信开始之前,必须先在通信双方之间建立一个连接。这通常通过三次握手(三-way handshake)来实现。连接建立之后,数据才可以开始传输。在通信结束时,必须通过四次挥手(four-way handshake)来终止连接。

1.2 可靠性

TCP 提供可靠的数据传输机制,确保数据包按顺序传输,并且数据在传输过程中不会丢失或损坏。它通过以下方式来确保可靠性:

  • 数据分段与重组:当数据量大时,TCP 会将数据分成多个小段进行传输,接收方收到数据后会将这些小段重组为完整的数据。
  • 确认机制:每个收到的数据段都会被接收方确认。如果发送方没有收到确认,则会重新发送数据。
  • 重传机制:如果数据段丢失,接收方不会发送确认,发送方会在超时后重新发送数据段。
  • 流量控制:TCP 通过滑动窗口机制控制数据的发送速率,避免接收方因处理不过来而丢失数据。

1.3 有序性

TCP 确保数据的顺序性。接收方收到的数据段会按照发送顺序重新排序,即使数据包在网络中到达的顺序与发送顺序不同。TCP 会根据每个数据段的序列号对数据进行排序,确保应用层接收到的数据是正确的顺序。

1.4 全双工通信

TCP 是全双工通信协议,即通信的双方可以同时进行数据的发送和接收。每个连接都是双向的,客户端和服务器都可以在同一连接中发送和接收数据。

1.5 流量控制

TCP 使用 流量控制 来避免网络拥塞。流量控制的机制是 滑动窗口,通过调整窗口的大小来控制数据发送的速度。接收方根据自身的缓冲区状态,向发送方告知自己可以接收的窗口大小,发送方根据窗口大小来调整数据发送的速度,避免数据包丢失。

1.6 拥塞控制

TCP 采用 拥塞控制 来避免网络拥塞。当网络负载过重时,TCP 会降低数据的发送速度。TCP 的拥塞控制包括以下四个阶段:

  • 慢启动(Slow Start):在连接刚开始时,TCP 会采用一个较小的拥塞窗口,然后逐渐增加窗口的大小,直到达到网络的最大吞吐量。
  • 拥塞避免(Congestion Avoidance):当窗口增长到一定程度后,增长速率会变慢,以避免过度拥塞。
  • 快速重传(Fast Retransmit):当接收方发现丢失的数据段时,会立即通知发送方,发送方重新传输丢失的数据段。
  • 快速恢复(Fast Recovery):在快速重传后,TCP 会快速恢复到较高的传输速率。

2. TCP的头部结构

TCP 头部包含了控制信息,用于确保数据的可靠传输。TCP头部的格式如下:

字段名长度(字节)说明
源端口2源端口号,用于标识源应用程序。
目标端口2目标端口号,用于标识目标应用程序。
序列号4数据段的序列号,表示当前数据段的起始位置。
确认号4如果设置了确认位,该字段表示接收方期望的下一个字节的序列号。
数据偏移4表示TCP头部长度,以4字节为单位,告诉接收方TCP头部结束的位置。
保留位3保留为未来使用,通常设为0。
标志位9用于控制连接的建立、维持、终止等,常见标志位有:SYN、ACK、FIN等。
窗口大小2用于流量控制,指示接收方的缓冲区大小。
校验和2用于错误检测,确保数据的完整性。
紧急指针2如果URG标志为1,该字段指示紧急数据的结束位置。
选项0-40可选字段,用于进一步的控制,如最大报文段长度(MSS)、时间戳等。
填充0-3用于确保TCP头部是4字节的整数倍,填充为0。
数据部分可变传输的实际数据内容。

3. TCP连接的建立与断开

3.1 连接建立(三次握手,Three-Way Handshake)

TCP 使用三次握手来建立连接,确保通信双方都准备好传输数据。具体过程如下:

  1. 客户端发送SYN:客户端发送一个SYN(同步)包,请求与服务器建立连接。此时客户端进入 SYN_SENT 状态。
  2. 服务器回复SYN-ACK:服务器收到客户端的SYN包后,回复一个SYN-ACK包,表示接受连接请求并请求客户端确认。此时服务器进入 SYN-RECEIVED 状态。
  3. 客户端确认ACK:客户端收到服务器的SYN-ACK包后,发送一个确认包(ACK)。此时,客户端和服务器都进入 ESTABLISHED(已建立连接)状态,连接建立成功。

3.2 连接断开(四次挥手,Four-Way Handshake)

TCP 连接的断开需要四次挥手来保证双方都能正常关闭连接。具体过程如下:

  1. 客户端发送FIN:客户端发送一个FIN(结束)包,告诉服务器自己没有数据要发送了,准备关闭连接。此时客户端进入 FIN_WAIT_1 状态。
  2. 服务器回复ACK:服务器收到客户端的FIN包后,回复一个ACK包,确认接收到关闭请求。此时服务器进入 CLOSE_WAIT 状态。
  3. 服务器发送FIN:服务器准备关闭连接时,发送一个FIN包,表示自己也没有数据要发送了。此时,服务器进入 LAST_ACK 状态。
  4. 客户端确认ACK:客户端收到服务器的FIN包后,发送一个ACK包确认关闭连接。此时客户端进入 TIME_WAIT 状态,等待足够的时间确保服务器收到了确认包后,连接完全关闭。

4. TCP常见的状态

TCP 连接的状态反映了连接的生命周期,包括以下常见状态:

  • LISTEN:服务器在等待客户端的连接请求。
  • SYN_SENT:客户端发送了连接请求,等待服务器的确认。
  • SYN_RECEIVED:服务器已收到连接请求,等待客户端的确认。
  • ESTABLISHED:连接已成功建立,数据可以双向传输。
  • FIN_WAIT_1:客户端请求关闭连接,等待服务器的确认。
  • CLOSE_WAIT:服务器接收到关闭请求,等待关闭连接。
  • LAST_ACK:服务器发送关闭请求后,等待客户端的确认。
  • TIME_WAIT:客户端已确认连接关闭,等待足够的时间确保服务器收到确认。
  • CLOSED:连接已完全关闭。

5. 总结

TCP 是一种面向连接、可靠的传输协议,确保数据的有序、完整和无误地传输。它提供了可靠的传输机制、流量控制、拥塞控制以及顺序保证。TCP 的连接建立通过三次握手完成,连接断开通过四次挥手进行。此外,TCP 使用确认机制、重传机制和序列号来确保数据的正确传输。由于其可靠性,TCP 被广泛应用于需要确保数据完整性的网络协议和应用中。


标题:认识TCP
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/01/06/1736153512628.html
联系:scotttu@163.com