当前位置: 首页 > news >正文

TCP 与 UDP报文

** TCP 与 UDP报文**

1. 引言

在网络通信中,TCP(传输控制协议) 和 UDP(用户数据报协议) 是两种最核心的传输层协议。它们各自适用于不同的场景,理解其工作原理对开发高性能网络应用至关重要。本文将详细解析:


2. TCP 协议详解

2.1 TCP 报文结构

TCP 报文由 头部(Header) 和 数据(Data) 两部分组成,其头部固定为 20 字节(可扩展至 60 字节)。以下是关键字段解析:

字段长度(比特)说明
源端口(Source Port)16发送方的端口号(如 HTTP 默认 80)。
目标端口(Destination Port)16接收方的端口号(如 SSH 默认 22)。
序列号(Sequence Number)32当前报文段第一个字节的序号,用于数据排序和重组。
确认号(Acknowledgment Number)32期望接收的下一个字节序号,用于可靠传输(ACK 标志为 1 时有效)。
数据偏移(Data Offset)4TCP 头部长度(以 4 字节为单位),最小 5(20 字节),最大 15(60 字节)。
控制位(Flags)6包括 SYNACKFINRST 等标志位(见下文)。
窗口大小(Window Size)16接收方的可用缓冲区大小,用于流量控制(滑动窗口机制)。
校验和(Checksum)16校验头部和数据的完整性,防止传输错误。
紧急指针(Urgent Pointer)16指示紧急数据的末尾位置(需 URG=1)。

关键字段解析
• 源/目标端口:标识通信的进程(与 IP 地址结合称为 套接字)。

• 序列号与确认号:

• 序列号(Seq)表示当前报文数据的起始编号。

• 确认号(Ack)表示期望收到的下一个字节编号(如 Ack=X+1 表示已收到 X)。

• 通过比对实现可靠传输(丢包重传)。

• 控制标志位:

SYN:发起连接(三次握手)。

ACK:确认数据。

FIN:关闭连接(四次挥手)。

RST:强制重置连接。

URG:紧急数据(如 Ctrl+C 中断命令)。

PSH:催促接收方立即处理数据。


2.2 TCP 三次握手

三次握手用于建立 TCP 连接,确保双方收发能力正常:

  1. 第一次握手(SYN)
    • 客户端发送 SYN=1, Seq=X

    • 进入 SYN_SENT 状态。

  2. 第二次握手(SYN+ACK)
    • 服务器回复 SYN=1, ACK=1, Seq=Y, Ack=X+1

    • 进入 SYN_RCVD 状态。

  3. 第三次握手(ACK)
    • 客户端发送 ACK=1, Seq=X+1, Ack=Y+1

    • 双方进入 ESTABLISHED 状态。

为什么需要三次?
防止历史重复连接请求突然到达服务器,导致资源浪费。


2.3 TCP 四次挥手

四次挥手用于安全关闭连接:

  1. 第一次挥手(FIN)
    • 客户端发送 FIN=1, Seq=X,进入 FIN_WAIT_1

  2. 第二次挥手(ACK)
    • 服务器回复 ACK=1, Ack=X+1,进入 CLOSE_WAIT

    • 客户端收到后进入 FIN_WAIT_2

  3. 第三次挥手(FIN)
    • 服务器发送 FIN=1, Seq=Y,进入 LAST_ACK

  4. 第四次挥手(ACK)
    • 客户端回复 ACK=1, Ack=Y+1,进入 TIME_WAIT(等待 2MSL)。

    • 服务器收到后关闭连接。

为什么需要四次?
因为 TCP 是全双工的,必须分别关闭两个方向的连接。


3. UDP 协议详解

3.1 UDP 报文结构

UDP 头部仅 8 字节,极为轻量:

字段长度(比特)说明
源端口(Source Port)16可选,不使用时设为 0。
目标端口(Destination Port)16必须指定。
长度(Length)16整个 UDP 报文的长度(含头部)。
校验和(Checksum)16可选,但推荐启用。

UDP 特点:
• 无连接:无需握手,直接发送数据。

• 不可靠:不保证顺序、不重传丢失包。

• 低延迟:适合视频流、DNS 查询等场景。

相关文章:

  • 《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》封面颜色空间一图的选图历程
  • linux系统基本操作命令
  • asyncio:Python的异步编程
  • Lua 元表和元方法
  • 【ArcGIS Pro微课1000例】0066:多边形要素添加折点,将曲线线段(贝塞尔、圆弧和椭圆弧)替换为线段?
  • Webug4.0靶场通关笔记16- 第20关文件上传(截断上传)
  • 【NLP】 31. Retrieval-Augmented Generation(RAG):KNN-LM, RAG、REALM、RETRO、FLARE
  • # 从零构建一个简单的卷积神经网络:手写数字识别
  • 【Unity】AssetBundle热更新
  • HTML 元素
  • 冷启动算法简介和示例
  • 【了解】数字孪生网络(Digital Twin Network,DTN)
  • 代码随想录算法训练营第60期第二十七天打卡
  • ABC 404
  • sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
  • 机器人强化学习入门学习笔记(二)
  • HTML05:超链接标签及应用
  • 永磁同步电机控制算法--基于PI和前馈的位置伺服控制
  • 告别(Python)if elif else错误使用方法
  • 介绍分治、动态规划、回溯分别是什么?有什么联系和区别?给出对象的场景和java代码?
  • 五一档7.47亿收官:《水饺皇后》领跑;男观众占比增多
  • 降雪致长白山天池景区关闭,有游客在户外等待一小时,景区回应
  • 申活观察|演出场次破纪录、入境游导游档期忙,上海文旅商“热力”拉满
  • 言短意长|如何看待“订不到酒店的游客住进局长家”这件事
  • 美妙的下午
  • AI世界的年轻人|研究不止于实验室,更服务于遥远山区