Skip to content

传输层协议

TCP协议介绍

概述

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输层协议,广泛应用于计算机网络通信中。TCP提供可靠的数据传输服务,确保数据包按序到达,且无丢失、无重复。它通过连接建立、数据传输、连接终止的方式实现可靠通信。

TCP的主要功能

  1. 连接管理:通过三次握手建立连接,四次挥手终止连接,确保可靠通信。
  2. 可靠传输:通过序列号、确认号、窗口机制、重传机制等手段,保证数据传输的可靠性。
  3. 流量控制:通过滑动窗口机制控制数据发送速度,防止网络拥塞。
  4. 拥塞控制:通过慢启动、拥塞避免、快重传和快恢复等算法,避免网络拥塞。

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |Reser- | Flags | |
| Offset|ved | | Window |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (if any) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data (variable length) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段详细描述

  • Source Port(源端口):16位,发送方的端口号。
  • Destination Port(目标端口):16位,接收方的端口号。
  • Sequence Number(序列号):32位,数据段的序列号,用于数据重排序和丢失检测。
  • Acknowledgment Number(确认号):32位,期望接收的下一个数据段的序列号。
  • Data Offset(数据偏移):4位,TCP头部的长度,以32位字为单位。
  • Reserved(保留):6位,保留字段,必须为0。
  • Flags(标志位):6位,包含控制位:
    • URG:紧急指针有效。
    • ACK:确认号有效。
    • PSH:接收方应尽快将数据推送给应用层。
    • RST:重置连接。
    • SYN:同步序列号,用于建立连接。
    • FIN:表示发送方已完成发送数据,用于终止连接。
  • Window(窗口大小):16位,接收方的缓冲区大小,用于流量控制。
  • Checksum(校验和):16位,校验TCP头部和数据,以确保数据完整性。
  • Urgent Pointer(紧急指针):16位,指示紧急数据的结束位置。
  • Options(选项):可变长度,用于携带额外的控制信息。
  • Data(数据):可变长度,实际传输的数据。

TCP的工作机制

  1. 连接建立(三次握手)

    • 第一次握手:客户端发送SYN报文,请求建立连接。

      Client -> Server: SYN, Seq=x
    • 第二次握手:服务器接收SYN报文,回复SYN+ACK报文,确认收到请求,并向客户端发送连接请求。

      Server -> Client: SYN, ACK, Seq=y, Ack=x+1
    • 第三次握手:客户端接收SYN+ACK报文,回复ACK报文,确认连接建立。

      Client -> Server: ACK, Seq=x+1, Ack=y+1
  2. 数据传输

    • 在数据传输过程中,双方通过发送数据报文和确认报文进行数据交换。
      Client -> Server: Data, Seq=n, Ack=m
      Server -> Client: ACK, Seq=m, Ack=n+len(Data)
  3. 连接终止(四次挥手)

    • 第一次挥手:客户端发送FIN报文,表示数据发送完毕,要求终止连接。

      Client -> Server: FIN, Seq=u, Ack=v
    • 第二次挥手:服务器接收FIN报文,回复ACK报文,确认连接终止请求。

      Server -> Client: ACK, Seq=v, Ack=u+1
    • 第三次挥手:服务器发送FIN报文,表示数据发送完毕,要求终止连接。

      Server -> Client: FIN, Seq=w, Ack=u+1
    • 第四次挥手:客户端接收FIN报文,回复ACK报文,确认连接终止。

      Client -> Server: ACK, Seq=u+1, Ack=w+1

TCP的流量控制和拥塞控制

  1. 流量控制

    TCP使用滑动窗口机制进行流量控制,通过窗口大小字段控制数据发送速度,确保接收方有足够的缓冲区处理数据。

    • 窗口大小:接收方在ACK报文中指定窗口大小,发送方根据窗口大小控制发送数据的数量。
  2. 拥塞控制

    TCP通过慢启动、拥塞避免、快重传和快恢复等算法进行拥塞控制,避免网络拥塞,确保网络稳定性。

    • 慢启动:初始时,发送方缓慢增加拥塞窗口,逐步探测网络容量。
    • 拥塞避免:拥塞窗口增长到一定程度后,发送方逐步增加窗口大小,避免网络拥塞。
    • 快重传:当发送方接收到三个重复的ACK报文时,立即重传丢失的数据段。
    • 快恢复:在快重传后,发送方快速恢复数据传输,避免拥塞窗口骤减。

UDP协议介绍

概述

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,提供简单而高效的数据传输服务。与TCP不同,UDP不提供可靠性、数据顺序或流量控制,但它的低开销和快速传输使其在需要快速传输和低延迟的应用中非常有用。

UDP的主要功能

  1. 无连接传输:UDP不建立连接,数据可以直接发送到目标地址。
  2. 数据报传输:UDP将数据封装在数据报中,每个数据报独立传输。
  3. 低延迟:由于没有连接管理和流量控制,UDP传输延迟较低。
  4. 简单快速:UDP的头部开销较小,适用于简单快速的数据传输。

UDP报文格式

UDP报文由头部和数据部分组成,头部的固定长度为8字节。UDP头部的格式如下:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段详细描述

  • Source Port(源端口):16位,表示发送方的端口号。
  • Destination Port(目标端口):16位,表示接收方的端口号。
  • Length(长度):16位,表示UDP报文的总长度(包括头部和数据)。
  • Checksum(校验和):16位,校验整个UDP报文,以确保数据完整性。
  • Data(数据):可变长度,实际传输的数据。

UDP的工作机制

  1. 数据报封装

    发送方应用程序将数据封装成UDP数据报,并通过网络发送到接收方。每个UDP数据报都是独立的,具有完整的头部和数据部分。

  2. 无连接传输

    UDP不需要建立连接,数据可以直接发送到目标地址和端口。由于没有连接管理,UDP传输速度快,延迟低。

  3. 无可靠性保证

    UDP不提供重传、顺序控制或流量控制。如果数据在传输过程中丢失、重复或顺序错误,UDP不会处理这些问题,由应用程序负责处理。

UDP的应用场景

UDP由于其简单和快速的特性,适用于以下应用场景:

  1. 实时应用

    • 语音和视频通信(如VoIP、视频会议)
    • 在线游戏
    • 实时流媒体
  2. 广播和多播

    • IPTV
    • 网络广播
    • 多播组通信
  3. 简单请求/响应服务

    • DNS查询
    • TFTP(简单文件传输协议)

UDP的优势和劣势

优势
  1. 低开销:UDP头部只有8字节,开销较小。
  2. 低延迟:无连接管理和流量控制,传输延迟低。
  3. 简单实现:协议简单,容易实现和部署。
  4. 支持广播和多播:适用于需要广播或多播的应用。
劣势
  1. 无可靠性:没有重传机制,数据可能丢失或重复。
  2. 无顺序控制:数据报可能乱序到达。
  3. 无流量控制:不适合大规模数据传输,可能导致网络拥塞。

UDP和TCP的比较

特性UDP(User Datagram Protocol)TCP(Transmission Control Protocol)
连接方式无连接面向连接
可靠性无保证提供可靠传输
传输顺序无保证保证按序到达
流量控制提供流量控制
头部开销8字节20字节(不包括选项)
适用场景实时应用、广播、多播、简单请求需要可靠传输的应用(如文件传输、电子邮件)

UDP通信示例

假设一个简单的UDP通信过程,客户端发送一个数据报到服务器,服务器接收到数据后进行处理。

客户端发送数据报

客户端将数据封装成UDP报文,并发送到服务器的目标地址和端口。

UDP Header:
- Source Port: 12345
- Destination Port: 80
- Length: 20
- Checksum: 0x1234
Data: "Hello, Server!"
服务器接收数据报

服务器监听目标端口,接收到UDP报文后,解析报文头部并处理数据。

UDP Header:
- Source Port: 12345
- Destination Port: 80
- Length: 20
- Checksum: 0x1234
Data: "Hello, Server!"