tcp/ip学习之11: tcp协议格式

tcp协议

TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

一、TCP的主要特点

  1. 面向连接
    • 在数据传输之前,TCP需要在通信双方之间建立一个连接。这个过程就像打电话,在通话之前需要先拨号建立通话线路。例如,当你的浏览器要从服务器下载一个网页时,浏览器(客户端)会先向服务器发送一个建立连接的请求。服务器收到请求后,会进行一系列的握手过程来确认连接。只有在连接建立成功后,数据才能开始传输。
  2. 可靠传输
    • TCP通过多种机制来保证数据的可靠传输。它使用序列号来对发送的字节流进行编号。比如,客户端发送的一系列数据包,每个数据包都有一个序列号。当服务器收到数据包后,会根据序列号来检查数据是否完整、是否有重复或者丢失。如果发现数据丢失,TCP会要求重传丢失的数据包。同时,TCP还使用确认应答(ACK)机制,接收方收到数据后会发送一个确认消息给发送方,告知数据已经成功接收。如果发送方在一定时间内没有收到确认应答,就会重传数据。
  3. 基于字节流
    • TCP把应用层的数据看作是一个无结构的字节流。它不会像UDP那样把数据划分为一个个独立的报文。例如,一个大型文件在应用层被分割成多个字节,TCP会把这些字节按照顺序传输,接收方收到后会根据序列号重新组装成完整的文件,而不会像UDP那样可能会丢失或者顺序混乱。
  4. 拥塞控制
    • TCP能够根据网络的拥塞情况动态调整发送数据的速率。当网络出现拥塞时,TCP会减慢发送速度,避免过多的数据包同时进入网络,导致网络瘫痪。例如,在一个网络环境中,当多个用户同时下载大文件时,网络可能会出现拥塞。TCP会根据网络的反馈(如丢包率等)来调整每个连接的发送速率,使得网络资源能够更合理地分配。

二、TCP的协议格式

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          源端口(16位)          |         目的端口(16位)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        序列号(32位)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     确认号(32位)(如果ACK标志位为1)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  数据偏移(4位)| 保留(6位)|      标志位(6位)       |  窗口大小(16位)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     校验和(16位)         |    紧急指针(16位)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    选项(可选,最大40字节)                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             数据                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1. 源端口和目的端口
    • 这两个字段各占16位。源端口是发送端的端口号,用于标识发送端的应用程序;目的端口是接收端的端口号,用于标识接收端的应用程序。例如,当一个客户端通过浏览器(通常使用80端口)访问服务器上的网页时,客户端会随机选择一个端口(如12345)作为源端口,而目的端口就是服务器的80端口。
  2. 序列号
    • 占32位,用于标识从TCP源端向目的端发送的字节流。序列号的初始值是随机的,每发送一个字节,序列号就加1。例如,一个客户端发送一个包含100字节数据的报文,序列号从1000开始,那么下一个报文的序列号就会从1100开始(假设没有其他数据发送)。
  3. 确认号
    • 占32位,是接收方期望收到的下一个字节的序列号。如果发送方发送了序列号为1000 - 1099的数据,接收方正确接收后,会发送一个确认号为1100的确认报文,表示它期望收到的下一个字节的序列号是1100。
  4. 数据偏移
    • 占4位,表示TCP报头的长度。因为TCP报头长度不是固定的,它可能包含可选的扩展选项,所以需要这个字段来标识报头的长度。
  5. 标志位
    • 包含多个标志位,如SYN(同步序列号)、ACK(确认应答)、FIN(结束连接)等。例如,在建立连接的三次握手过程中,客户端发送的第一个报文会设置SYN标志位,表示请求建立连接;服务器收到后会回复一个带有SYN和ACK标志位的报文;客户端再回复一个带有ACK标志位的报文,完成连接建立。
  6. 窗口大小
    • 占16位,用于流量控制。它表示接收方能够接收的数据量。例如,如果接收方的窗口大小为1024字节,那么发送方一次最多只能发送1024字节的数据,直到收到接收方的确认和窗口更新。
  7. 校验和
    • 占16位,用于检查TCP报头和数据部分的错误。它通过一定的算法计算出一个校验值,接收方收到数据后会重新计算校验值,如果和发送方的校验值不一致,就说明数据在传输过程中出现了错误。
  8. 紧急指针
    • 占16位,用于指出在TCP数据中有紧急数据的位置。当有紧急数据需要优先处理时,这个字段就会发挥作用。例如,在一个交互式应用中,用户可能需要立即发送一个中断信号,紧急指针就可以用来标识这个信号的位置。
  9. 选项和填充
    • 选项部分是可选的,用于扩展TCP的功能。例如,它可以用于支持更大的窗口大小等。填充部分是为了使整个TCP报头的长度是32位的整数倍。

三、TCP的三次握手和四次挥手过程

  1. 三次握手
    • 第一次握手: 客户端向服务器发送一个SYN报文,表示请求建立连接。这个报文的序列号是x。
    • 第二次握手: 服务器收到客户端的SYN报文后,会回复一个SYN - ACK报文。这个报文的序列号是y,确认号是x + 1,表示服务器已经收到客户端的SYN报文,并且期望收到下一个序列号为x + 1的数据。
    • 第三次握手: 客户端收到服务器的SYN - ACK报文后,会发送一个ACK报文给服务器。这个报文的序列号是x + 1,确认号是y + 1。当服务器收到这个ACK报文后,连接就建立成功了。
  2. 四次挥手
    • 第一次挥手: 当客户端或服务器一方想要关闭连接时,会发送一个FIN报文给对方。例如,客户端发送一个FIN报文,序列号为x,表示客户端已经没有数据要发送了。
    • 第二次挥手: 接收方(服务器)收到FIN报文后,会发送一个ACK报文给发送方(客户端),确认号为x + 1。此时,发送方进入半关闭状态,它仍然可以接收数据,但不能发送数据。
    • 第三次挥手: 当接收方(服务器)也完成数据传输后,会发送一个FIN报文给发送方(客户端),序列号为y。
    • 第四次挥手: 发送方(客户端)收到FIN报文后,会发送一个ACK报文给接收方(服务器),确认号为y + 1。然后,发送方等待一段时间(2MSL,即最大报文段寿命),如果没有收到任何报文,就认为连接已经安全关闭。

四、TCP协议的位置

TCP(传输控制协议)在TCP/IP模型中位于传输层。TCP/IP模型是一个分层的网络协议体系结构,用于规范网络通信的过程。它由四层组成,分别是链路层、网络层、传输层和应用层。TCP在其中的传输层发挥着关键作用。
TCP/IP模型的分层结构
TCP/IP模型的四层结构如下:
链路层(Link Layer)
功能:负责处理与物理网络的接口,包括硬件设备驱动程序、网卡和网络介质等。它负责将数据封装成帧(Frame),并通过物理介质(如以太网电缆)发送出去。链路层还负责错误检测和纠正。
常见协议:以太网(Ethernet)、无线局域网(WLAN)、点对点协议(PPP)等。
网络层(Internet Layer)
功能:负责将数据包从源主机传输到目标主机。它主要处理路由选择和数据包的转发。网络层将数据封装成IP数据报(IP Datagram),并使用IP地址来标识源和目标主机。
主要协议:IP(Internet Protocol)、ICMP(Internet Control Message Protocol)、IGMP(Internet Group Management Protocol)等。
传输层(Transport Layer)
功能:负责端到端的通信,确保数据的可靠传输。传输层提供了两种主要的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的、面向连接的字节流服务,而UDP提供无连接的、不可靠的数据报服务。
主要协议:
TCP(Transmission Control Protocol):提供可靠的、面向连接的字节流服务,确保数据的完整性和顺序传输。它通过序列号、确认应答、重传机制等来实现可靠性。
UDP(User Datagram Protocol):提供无连接的、不可靠的数据报服务,适用于对实时性要求较高但对可靠性要求较低的应用,如视频流和语音通信。
应用层(Application Layer)
功能:负责处理特定的应用程序之间的通信。应用层协议定义了应用程序之间的交互规则,例如网页浏览、电子邮件、文件传输等。
常见协议:HTTP(超文本传输协议)、HTTPS(安全超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、DNS(域名系统)等。

总结

TCP报文段的格式设计得非常精细,通过各种字段和机制,TCP能够实现可靠的数据传输、流量控制、拥塞控制等功能。这些字段和机制共同确保了TCP在复杂的网络环境中能够高效、可靠地传输数据。

posted @ 2025-07-28 10:22  cupid8505  阅读(252)  评论(0)    收藏  举报