TCP/IP协议

TCP/IP协议是构成Internet基础的最核心协议,该协议由网络层的IP协议和传输层的TCP协议共同组成。简单来说,TCP协议负责监控传输过程中的问题,一旦发现问题,会立即发送信号请求重传,确保所有数据都能安全无误地送达目的地。而IP协议则为连接到Internet的每一台设备分配一个独特的地址。

TCP报文首部:

TCP(传输控制协议)报文首部是TCP协议的核心部分,包含了控制数据传输的关键信息。TCP报文首部的长度通常为20字节 (无选项时),但如果有选项字段,最大可扩展到60字节。以下是TCP报文首部的详细格式:


TCP报文首部格式

TCP报文首部由以下字段组成,按顺序排列:

字段名称 长度(比特) 描述
源端口号 16 发送方的端口号,用于标识发送应用程序。
目的端口号 16 接收方的端口号,用于标识接收应用程序。
序列号(Seq) 32 当前报文段数据的第一个字节的序列号,用于数据排序和重组。
确认号(Ack) 32 期望收到的下一个字节的序列号,用于确认已收到的数据。
数据偏移 4 TCP首部的长度(以4字节为单位),用于确定数据部分的起始位置。
保留字段 6 保留供未来使用,必须设置为0。
控制位(Flags) 6 用于控制TCP连接和传输的标志位,包括URG、ACK、PSH、RST、SYN、FIN。
窗口大小 16 接收方的接收窗口大小,用于流量控制。
校验和 16 用于校验TCP报文段(包括首部和数据)的完整性。
紧急指针 16 当URG标志位为1时有效,指示紧急数据的结束位置。
选项(可选) 0-320 可选字段,用于扩展TCP功能(如最大段大小MSS、窗口缩放因子等)。
填充 可变 确保TCP首部长度是4字节的倍数。

控制位(Flags)详解

控制位是TCP报文首部中的重要部分,用于控制连接和传输行为。每个标志位占1比特,具体含义如下:

标志位 名称 描述
URG 紧急指针有效 当URG=1时,表示紧急数据存在,紧急指针字段有效。
ACK 确认号有效 当ACK=1时,表示确认号字段有效,用于确认已收到的数据。
PSH 推送功能 当PSH=1时,要求接收方尽快将数据交给应用程序,而不是缓存。
RST 重置连接 当RST=1时,表示连接出现严重错误,需要强制断开连接。
SYN 同步序列号 当SYN=1时,表示请求建立连接,用于三次握手。
FIN 结束连接 当FIN=1时,表示发送方没有数据要发送了,用于四次挥手断开连接。

选项字段(可选)

选项字段用于扩展TCP功能,常见的选项包括:

  1. 最大段大小(MSS):协商TCP报文段的最大长度。

  2. 窗口缩放因子:用于扩大窗口大小的范围。

  3. 时间戳:用于计算往返时间(RTT)和防止序列号回绕。


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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         源端口号             |         目的端口号           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       序列号(Seq)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       确认号(Ack)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 | 保留 | URG | ACK | PSH | RST | SYN | FIN |  窗口大小  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           校验和            |           紧急指针            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            数据                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

TCP协议的三次握手和四次挥手:

TCP(传输控制协议)通过三次握手 建立连接,通过四次挥手断开连接,确保数据传输的可靠性。以下是详细解释:


三次握手(建立连接)

三次握手用于客户端和服务器之间建立TCP连接,确保双方都能正常收发数据。

  1. 第一次握手(SYN)

    • 客户端向服务器发送一个SYN(同步)报文,并随机生成一个初始序列号(Seq = x)。

    • 客户端进入SYN_SENT状态。

    • 目的:客户端请求建立连接。

  2. 第二次握手(SYN + ACK)

    • 服务器收到SYN报文后,向客户端发送一个SYN + ACK报文

      • 确认客户端的SYN(ACK = x + 1)。

      • 同时发送自己的SYN报文,随机生成一个初始序列号(Seq = y)。

    • 服务器进入SYN_RECEIVED状态。

    • 目的:服务器确认客户端的请求,并发送自己的连接请求。

  3. 第三次握手(ACK)

    • 客户端收到服务器的SYN + ACK报文后,向服务器发送一个ACK(确认)报文(ACK = y + 1)。

    • 客户端进入ESTABLISHED状态。

    • 服务器收到ACK报文后,也进入ESTABLISHED状态。

    • 目的:客户端确认服务器的连接请求。

总结:三次握手确保双方都能正常收发数据,并同步初始序列号。


四次挥手(断开连接)

四次挥手用于客户端和服务器之间断开TCP连接,确保数据传输完整。

  1. 第一次挥手(FIN)

    • 客户端(或服务器)发送一个FIN(结束)报文(Seq = u),表示自己没有数据要发送了。

    • 发送方进入FIN_WAIT_1状态。

    • 目的:请求关闭连接。

  2. 第二次挥手(ACK)

    • 接收方收到FIN报文后,发送一个ACK报文(ACK = u + 1),确认收到关闭请求。

    • 接收方进入CLOSE_WAIT状态。

    • 发送方收到ACK后,进入FIN_WAIT_2状态。

    • 目的:接收方确认关闭请求,但可能还有数据要发送。

  3. 第三次挥手(FIN)

    • 接收方完成数据发送后,发送一个FIN报文(Seq = v),表示自己也没有数据要发送了。

    • 接收方进入LAST_ACK状态。

    • 目的:接收方请求关闭连接。

  4. 第四次挥手(ACK)

    • 发送方收到FIN报文后,发送一个ACK报文(ACK = v + 1),确认收到关闭请求。

    • 发送方进入TIME_WAIT状态,等待一段时间(2MSL)后关闭连接。

    • 接收方收到ACK后,立即关闭连接。

    • 目的:发送方确认接收方的关闭请求。

总结:四次挥手确保双方都能安全关闭连接,避免数据丢失。


为什么需要三次握手和四次挥手?

  • 三次握手:确保双方都能正常收发数据,避免因网络延迟导致的无效连接。

  • 四次挥手:确保双方都完成数据传输后再关闭连接,避免数据丢失。


示意图

三次握手

复制代码
客户端 -> SYN -> 服务器
客户端 <- SYN+ACK <- 服务器
客户端 -> ACK -> 服务器

四次挥手

复制代码
客户端 -> FIN -> 服务器
客户端 <- ACK <- 服务器
客户端 <- FIN <- 服务器
客户端 -> ACK -> 服务器

**  注:seq** :"sequance"序列号;ack :"acknowledge"确认号;SYN :"synchronize"请求同步标志;;ACK :"acknowledge"确认标志" FIN:"Finally"结束标志。

相关推荐
sakoba3 小时前
Docker学习其二(容器卷,Docker网络,Compose)
运维·网络·学习·docker·容器·基础
惜.己4 小时前
appium中urllib3.exceptions.LocationValueError: No host specified. 的错误解决办法
网络·appium
吉凶以情迁5 小时前
window服务相关问题探索 go语言服务开发探索调试
linux·服务器·开发语言·网络·golang
专注VB编程开发20年5 小时前
UDP受限广播地址255.255.255.255的通信机制详解
网络·udp·智能路由器
189228048616 小时前
NX947NX955美光固态闪存NX962NX966
大数据·服务器·网络·人工智能·科技
Sadsvit7 小时前
Linux 进程管理与计划任务
linux·服务器·网络
一碗白开水一7 小时前
【模型细节】FPN经典网络模型 (Feature Pyramid Networks)详解及其变形优化
网络·人工智能·pytorch·深度学习·计算机视觉
什么都想学的阿超7 小时前
【网络与爬虫 38】Apify全栈指南:从0到1构建企业级自动化爬虫平台
网络·爬虫·自动化
D-海漠9 小时前
安全光幕Muting功能程序逻辑设计
服务器·网络·人工智能
都给我9 小时前
可计算存储(Computational Storage)与DPU(Data Processing Unit)的技术特点对比及实际应用场景分析
运维·服务器·网络·云计算