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"结束标志。

相关推荐
苏苏大大18 分钟前
【八股】计算机网络
网络·计算机网络
忆源39 分钟前
SOME/IP--协议英文原文讲解11
网络·网络协议·tcp/ip
baowxz43 分钟前
tcp协议连接,和传输数据
网络·网络协议·tcp/ip
Long._.L1 小时前
Wireshark使用介绍
网络·测试工具·wireshark
ITPUB-微风1 小时前
功能开关聚合对象实践:提升金融领域的高可用性
网络·数据库·金融
火绒终端安全管理系统1 小时前
火绒终端安全管理系统V2.0【系统防御功能】
网络·安全·网络安全·火绒安全·火绒
Tanecious.2 小时前
计算机三级网络技术知识汇总【4】
网络·智能路由器
Matlab仿真实验室2 小时前
基于Matlab实现MAC协议-ALOHA协议仿真程序(源码+数据)
开发语言·网络·matlab·mac协议-aloha协议仿真
D-river2 小时前
【如何基于Debian构建Kali Linux】
linux·网络·安全·网络安全
Мартин.3 小时前
[Meachines] [Easy] Horizontall Strapi RCE+KTOR-HTTP扫描+Laravel Monolog 权限提升
网络协议·http·laravel·ctf