一, TCP协议
TCP(Transmission Control Protocol,传输控制协议)是互联网核心协议之一,位于传输层,为应用层提供可靠的、面向连接的数据传输服务。
1. TCP的核心特点
特性 | 说明 |
---|---|
面向连接 | 通信前需通过三次握手建立连接,结束后通过四次挥手释放连接。 |
可靠传输 | 通过确认应答(ACK)、超时重传、序列号机制保证数据不丢失、不重复、按序到达。 |
流量控制 | 通过滑动窗口机制动态调整发送速率,避免接收方缓冲区溢出。 |
拥塞控制 | 根据网络状况(如丢包)动态调整发送窗口(慢启动、拥塞避免、快重传等算法)。 |
全双工通信 | 同一连接中双方可同时发送和接收数据。 |
字节流服务 | 数据被看作无结构的字节流,应用层需自行定义消息边界(如HTTP的\r\n )。 |
2. TCP报文结构
TCP头部通常为20字节(可选项扩展至60字节),关键字段如下:
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位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 | 保留 | 控制标志(URG/ACK/PSH/RST/SYN/FIN)| 窗口大小 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 校验和(16位) | 紧急指针(16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 可选项(可选) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
关键字段说明:
-
源/目的端口:标识应用层服务(如HTTP=80,SSH=22)。
-
序列号(SEQ):数据字节流的编号,解决乱序问题。
-
确认号(ACK):期望收到的下一个字节序号(表示之前数据已确认接收)。
-
控制标志:
-
SYN
:发起连接。 -
ACK
:确认应答。 -
FIN
:关闭连接。 -
RST
:强制重置连接。
-
-
窗口大小:接收方可用的缓冲区空间(流量控制)。
-
3. TCP连接管理
(1) 三次握手(建立连接)
plaintext
客户端(Client) 服务端(Server)
| |
|------------------ SYN=1, SEQ=x ------------>|
| |
|<--------- SYN=1, ACK=1, SEQ=y, ACK=x+1 ----|
| |
|------------------ ACK=1, SEQ=x+1, ACK=y+1 ->|
| |
-
步骤解析:
-
第一次握手(SYN)
-
客户端发送
SYN=1
(请求建立连接)和随机初始序列号seq=x
。 -
作用:客户端告诉服务端“我想建立连接,我的初始序列号是
x
”。
-
-
第二次握手(SYN+ACK)
-
服务端收到
SYN
后,回复SYN=1
(同意建立连接)和ACK=1
(确认收到客户端的x
),并发送自己的初始序列号seq=y
。 -
作用:服务端告诉客户端“我收到你的请求了,同意建立连接,我的初始序列号是
y
”。
-
-
第三次握手(ACK)
-
客户端收到
SYN+ACK
后,回复ACK=1
(确认收到服务端的y
),并发送ack=y+1
。 -
作用:客户端告诉服务端“我收到你的确认了,可以开始通信了”。
-
-
-
为什么是三次?
-
防止历史重复连接请求(旧SYN包)干扰
如果只有两次握手,服务端收到SYN
就直接建立连接,但网络可能有延迟的旧SYN包,导致服务端误认为客户端又发起了新连接,浪费资源。
第三次握手让客户端确认服务端的响应,确保连接是当前有效的。 -
同步双方的初始序列号(seq)
双方需要交换初始seq
,用于后续数据排序和去重。三次握手确保双方都确认了对方的seq
。
(2) 四次挥手(释放连接)
TCP 是全双工通信(双方可同时收发数据),关闭连接时需要分别关闭两个方向的数据流。
客户端(Client) 服务端(Server)
| |
|------------------ FIN=1, SEQ=u ------------>|
| |
|<------------- ACK=1, ACK=u+1 --------------|
| |
|<------------- FIN=1, SEQ=v, ACK=u+1 -------|
| |
|------------------ ACK=1, ACK=v+1 ---------->|
| |
为什么是四次挥手?
-
第一次挥手(FIN)
-
客户端发送
FIN=1
(请求关闭连接)和seq=u
(当前数据流的最后一个字节序号)。 -
作用:客户端告诉服务端“我这边数据发完了,准备关闭”。
-
-
第二次挥手(ACK)
-
服务端收到
FIN
后,回复ACK=1
(确认收到FIN
),并发送ack=u+1
。 -
作用:服务端告诉客户端“我收到你的关闭请求了,但我可能还有数据要发”。
-
-
TCP是全双工的,需要分别关闭两个方向
-
客户端可以主动关闭发送方向(第一次挥手),但服务端可能仍有数据要发送(第二次挥手只是确认)。
-
服务端处理完数据后,再关闭自己的发送方向(第三次挥手)。
-
客户端最后确认(第四次挥手)。
-
-
如果合并第二次和第三次挥手?
如果服务端没有剩余数据要发送,可以合并ACK
和FIN
(变成三次挥手),但一般情况下,TCP 实现会分开处理,确保数据完整传输。-
第三次挥手(FIN)
-
服务端处理完剩余数据后,发送
FIN=1
(请求关闭连接)和seq=v
。 -
作用:服务端告诉客户端“我这边也发完了,可以关闭了”。
-
-
第四次挥手(ACK)
-
客户端收到
FIN
后,回复ACK=1
(确认收到FIN
),并发送ack=v+1
。 -
作用:客户端告诉服务端“我收到你的关闭请求了,可以彻底关闭了”。
-
-
二, TCP-IP协议通信模型
1. 概述
1. TCP/IP四层模型
层级 | 功能 | 核心协议 | 典型设备 |
---|---|---|---|
应用层 | 提供用户接口,处理应用程序逻辑(如HTTP网页、FTP文件传输)。 | HTTP、FTP、DNS、SMTP、SSH | 应用服务器、PC |
传输层 | 提供端到端的数据传输服务(可靠TCP或高效UDP)。 | TCP、UDP | 防火墙、负载均衡器 |
网络层 | 负责寻址、路由选择,实现跨网络通信(如IP寻址、路由器跳转)。 | IP、ICMP、ARP、BGP | 路由器、三层交换机 |
网络接口层 | 管理物理介质访问(如以太网、Wi-Fi),负责数据帧的封装和传输。 | Ethernet、Wi-Fi、PPP、HDLC | 交换机、网卡、光纤 |
注:
TCP/IP模型将OSI的应用层、表示层、会话层合并为应用层。
网络接口层对应OSI的数据链路层+物理层。
2. 各层核心功能与协议
(1) 应用层(Application Layer)
-
功能:直接面向用户,提供网络服务(如浏览器访问网页、邮件发送)。
-
关键协议:
-
HTTP/HTTPS:网页传输(80/443端口)。
-
FTP:文件传输(21控制端口+20数据端口)。
-
DNS:域名解析(53端口)。
-
SMTP/POP3:邮件发送与接收(25/110端口)。
-
SSH:加密远程登录(22端口)。
-
(2) 传输层(Transport Layer)
-
功能:确保数据可靠或高效地传输到目标应用(通过端口号区分服务)。
-
关键协议:
-
TCP(Transmission Control Protocol):
-
面向连接,可靠传输(确认、重传、排序)。
-
适用场景:网页(HTTP)、文件传输(FTP)、邮件(SMTP)。
-
-
UDP(User Datagram Protocol):
-
无连接,高效但不可靠(无确认、可能丢包)。
-
适用场景:视频流(RTP)、DNS查询、在线游戏。
-
-
(3) 网络层(Internet Layer)
-
功能:通过IP地址实现跨网络通信,选择最优路径(路由)。
-
关键协议:
-
IP(Internet Protocol):
-
无连接、不可靠,仅负责寻址和分组转发(IPv4/IPv6)。
-
-
ICMP(Internet Control Message Protocol):
-
传递网络状态信息(如
ping
命令使用ICMP Echo Request/Reply)。
-
-
ARP(Address Resolution Protocol):
-
将IP地址解析为MAC地址(如局域网内通信)。
-
-
BGP/OSPF:
-
路由协议,决定数据包如何跨网络传输。
-
-
(4) 网络接口层(Network Interface Layer)
-
功能:管理物理网络介质(电缆、光纤、无线电波),封装数据帧。
-
关键协议与技术:
-
Ethernet(以太网):
-
使用MAC地址标识设备(如
00:1A:2B:3C:4D:5E
)。
-
-
Wi-Fi(IEEE 802.11):
-
无线局域网通信(2.4GHz/5GHz频段)。
-
-
PPP(Point-to-Point Protocol):
-
拨号上网或点对点直连(如家庭宽带PPPoE)。
-
-
3. 数据封装与解封装流程
发送方(封装)
-
应用层:生成原始数据(如HTTP请求)。
-
传输层:添加TCP/UDP头部(包含源/目的端口号)。
-
网络层:添加IP头部(源/目的IP地址)。
-
网络接口层:添加帧头(MAC地址)和帧尾(FCS校验),转换为比特流通过物理介质传输。
接收方(解封装)
-
网络接口层:校验帧完整性,剥离MAC头部。
-
网络层:检查IP地址,决定是否接收或转发。
-
传输层:根据端口号交给对应应用程序(如80→HTTP服务)。
-
应用层:处理数据(如渲染网页)。
三, UDP协议
1. UDP的核心特点
特性 | 说明 |
---|---|
无连接 | 通信前无需握手,直接发送数据,节省延迟。 |
不可靠传输 | 不保证数据到达、不排序、不重传,可能丢包或重复。 |
头部开销小 | 固定8字节头部(TCP至少20字节),传输效率高。 |
支持广播/多播 | 可向多个目标发送数据(如视频流、在线会议)。 |
无拥塞控制 | 发送速率由应用层控制,适合实时应用(如游戏、直播)。 |
2. UDP报文结构
UDP头部仅8字节,结构如下:
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| 源端口(16位) | 目的端口(16位) |
+--------+--------+--------+--------+
| 数据报长度(16位) | 校验和(16位) |
+--------+--------+--------+--------+
| 数据(可变长度) |
+-----------------------------------+
-
关键字段:
-
源端口/目的端口:标识发送方和接收方的应用(如DNS=53,QUIC=443)。
-
数据报长度:包括头部和数据的总长度(最大65535字节)。
-
校验和(可选):检测数据是否损坏(IPv6强制要求)。
-
注:UDP的“不可靠”指协议本身不提供重传和排序,但应用层可自行实现可靠性(如QUIC协议)。
3. UDP工作流程
(1) 发送数据
-
应用层将数据交给UDP。
-
UDP添加头部(源/目的端口、长度、校验和)。
-
直接发送给网络层(IP),不建立连接,无需等待确认。
(2) 接收数据
-
网络层(IP)将数据包传递给UDP。
-
UDP检查目的端口,将数据交给对应应用。
-
无确认机制:接收方不发送ACK,发送方不知数据是否到达。
4. UDP的典型应用场景
(1) 实时多媒体传输
-
视频/音频流:如Zoom、WebRTC(容忍少量丢包,延迟敏感)。
-
在线游戏:如MOBA、FPS(低延迟优先于数据完整)。
(2) 简单查询/响应协议
-
DNS查询:域名解析(请求-响应模式,一次交互完成)。
-
DHCP:动态分配IP地址(基于UDP广播)。
(3) 广播/多播通信
-
网络时间协议(NTP):同步时钟。
-
IoT设备发现:如SSDP(Simple Service Discovery Protocol)。
(4) 自定义可靠协议
-
QUIC(HTTP/3底层协议):在UDP上实现可靠传输,减少TCP握手延迟。
-
TFTP(简单文件传输):基于UDP的轻量级文件传输。
5. UDP的优缺点
优点
-
低延迟:无需握手和确认,适合实时应用。
-
低开销:头部小,适合高频小数据包(如传感器数据)。
-
灵活性:应用层可自定义可靠性或拥塞控制(如QUIC)。
缺点
-
不可靠:需应用层处理丢包、乱序(如视频会议用前向纠错FEC)。
-
无流量控制:可能淹没接收方(需应用层限速)。
-
易受攻击:UDP洪水攻击(DDoS常见手段)
四,TCP协议和UDP协议的区别
TCP(传输控制协议)和UDP(用户数据报协议)是传输层的两大核心协议,它们在设计目标、特性和适用场景上存在显著差异。以下是两者的详细对比:
1. 核心特性对比
对比项 | TCP | UDP |
---|---|---|
连接方式 | 面向连接(需三次握手建立连接) | 无连接(直接发送数据) |
可靠性 | 可靠传输(确认、重传、排序) | 不可靠(可能丢包、乱序、重复) |
数据顺序 | 保证数据按序到达 | 不保证顺序 |
流量控制 | 通过滑动窗口动态调整发送速率 | 无流量控制 |
拥塞控制 | 拥塞避免、慢启动、快重传等算法 | 无拥塞控制,发送速率由应用层决定 |
头部开销 | 至少20字节(含选项可达60字节) | 固定8字节 |
传输效率 | 低(延迟高、协议开销大) | 高(延迟低、开销小) |
通信模式 | 仅支持单播(一对一) | 支持单播、广播、多播(一对多) |
适用场景 | 网页(HTTP)、文件传输(FTP)、邮件(SMTP) | 视频流、在线游戏、DNS、IoT传感器数据 |
2. 关键机制差异
(1) 连接管理
-
TCP:
-
通信前需通过三次握手建立连接(SYN、SYN-ACK、ACK)。
-
通信结束需通过四次挥手释放连接(FIN、ACK、FIN、ACK)。
-
确保双方收发能力正常,避免资源浪费。
-
-
UDP:
-
直接发送数据,无需握手或连接维护。
-
适合高频、短时交互(如DNS查询)。
-
(2) 可靠性保障
-
TCP:
-
确认应答(ACK):接收方每收到数据包会发送确认。
-
超时重传:未收到ACK时重发数据。
-
序列号(SEQ):标识数据顺序,解决乱序问题。
-
-
UDP:
-
无ACK、无重传、无序列号,完全依赖应用层处理可靠性。
-
(3) 流量与拥塞控制
-
TCP:
-
滑动窗口:根据接收方缓冲区大小动态调整发送窗口。
-
拥塞控制:通过慢启动、拥塞避免等算法避免网络过载。
-
-
UDP:
-
无内置控制机制,可能因发送过快导致网络拥塞或接收方丢包。
-
3. 典型应用场景
TCP适用场景
-
需要可靠传输:
-
网页浏览(HTTP/HTTPS)。
-
文件传输(FTP、SFTP)。
-
电子邮件(SMTP、IMAP)。
-
数据库访问(MySQL、PostgreSQL)。
-
-
长连接交互:
-
SSH远程登录。
-
金融交易(如银行系统)。
-
UDP适用场景
-
实时性优先:
-
视频会议(Zoom、WebRTC)。
-
在线游戏(王者荣耀、绝地求生)。
-
语音通话(VoIP)。
-
-
简单查询/响应:
-
DNS域名解析。
-
DHCP动态IP分配。
-
4. 如何选择TCP或UDP?
-
选择TCP:
-
数据必须完整到达(如文件下载)。
-
需要自动处理乱序和重传(如网页加载)。
-
通信双方需长期稳定连接(如数据库查询)。
-
-
选择UDP:
-
低延迟比可靠性更重要(如实时游戏)。
-
数据量小且交互简单(如DNS查询)。
-
应用层已实现可靠性(如QUIC协议)。
-