考点频率 :★★★★★(计算机网络必考,选择题每年至少1-2题)
难度 :⭐⭐⭐
建议:重点掌握TCP三次握手的过程与状态变化、可靠传输的机制(序号/确认/重传)、滑动窗口流量控制原理
1️⃣ TCP协议概述
TCP(Transmission Control Protocol,传输控制协议) 是TCP/IP协议族中传输层 的核心协议,提供面向连接、可靠、基于字节流的传输服务。
| 特点 | 说明 |
|---|---|
| 面向连接 | 通信前必须先建立连接(三次握手) |
| 可靠传输 | 通过序号、确认、重传机制保证数据不丢、不重、不乱序 |
| 字节流 | 把应用层数据看作无结构的字节流,不保留消息边界 |
| 全双工 | 双方可以同时发送和接收数据 |
| 流量控制 | 通过滑动窗口防止发送方压垮接收方 |
打个比方 :TCP就像打电话------先拨号建立连接(三次握手),双方确认能听见,然后你一句我一句地聊,每句话对方都"嗯"一声表示收到(确认),如果对方没听清你可以重说(超时重传),聊完了说"再见"挂断(四次挥手)。
2️⃣ TCP三次握手(核心考点)
2.1 为什么需要三次握手?
三次握手的目的是:同步双方的初始序号(ISN),并确认双方都有发送和接收能力。
- 第一次:客户端告诉服务器"我想连接,我的初始序号是x"
- 第二次:服务器告诉客户端"我收到了,我的初始序号是y,我同意连接"
- 第三次:客户端告诉服务器"我收到你的同意了,连接建立"
为什么不是两次? 防止已失效的连接请求突然又传到服务器,导致服务器错误地建立连接、浪费资源。三次握手能确保双方都确认了对方的收发能力。
2.2 三次握手详细过程
| 步骤 | 方向 | 标志位 | 序号 | 说明 |
|---|---|---|---|---|
| 第1次 | 客户端 → 服务器 | SYN=1 | seq=x | 客户端请求建立连接,发送自己的初始序号x |
| 第2次 | 服务器 → 客户端 | SYN=1, ACK=1 | seq=y, ack=x+1 | 服务器同意连接,发送自己的初始序号y,并确认收到客户端的x |
| 第3次 | 客户端 → 服务器 | ACK=1 | seq=x+1, ack=y+1 | 客户端确认收到服务器的y,连接正式建立 |
状态变化:
- 客户端:
CLOSED → SYN_SENT → ESTABLISHED - 服务器:
LISTEN → SYN_RCVD → ESTABLISHED
2.3 三次握手图示
客户端 服务器
| |
| SYN=1, seq=x |
|------------------------------>| (第1次握手)
| |
| SYN=1, ACK=1, seq=y, ack=x+1 |
|<------------------------------| (第2次握手)
| |
| ACK=1, seq=x+1, ack=y+1 |
|------------------------------>| (第3次握手)
| |
| 连接建立完成 |
3️⃣ TCP可靠传输机制
TCP通过以下机制保证数据可靠传输:
3.1 序号与确认
- 序号(seq):TCP给每个字节都编一个序号,保证数据按序到达
- 确认号(ack):接收方告诉发送方"我已经收到了序号为ack之前的所有字节",期望下次收到ack开始的数据
例如:接收方收到seq=1,长度=100的数据,则回复ack=101,表示"1~100我都收到了,请发101开始的数据"。
3.2 超时重传
发送方每发送一个报文段就启动一个定时器 。如果在超时时间内没有收到确认,就重传该报文段。
超时时间:通常根据往返时间(RTT)动态调整。
3.3 快速重传
如果发送方连续收到3个重复的ACK(说明某个报文段丢失了),就立即重传丢失的报文段,不必等待超时。
3.4 滑动窗口(可靠传输与流量控制的结合)
发送方维护一个发送窗口 ,窗口内的数据可以连续发送而不必等待确认。接收方通过接收窗口告诉发送方自己还能接收多少数据。
滑动窗口既实现了可靠传输(连续发送、累积确认),又实现了流量控制(根据接收方能力调整发送速度)。
4️⃣ TCP流量控制(滑动窗口机制)
4.1 为什么需要流量控制?
如果发送方发送速度太快,接收方来不及处理,就会导致数据丢失。流量控制就是让发送方根据接收方的处理能力来调整发送速度。
4.2 滑动窗口工作原理
- 接收方在每次确认时,通过窗口字段(rwnd) 告诉发送方:"我还能接收rwnd字节的数据"
- 发送方根据rwnd调整自己的发送窗口大小
- 如果rwnd=0,发送方停止发送,直到接收方发送新的窗口更新
示例:
- 接收方告诉发送方"rwnd=1000",发送方最多发送1000字节未确认数据
- 发送方发了500字节,收到确认后,窗口右移,可以继续发送
- 如果接收方缓冲区满了,发送rwnd=0,发送方暂停
4.3 零窗口与坚持定时器
当接收方通告rwnd=0后,发送方停止发送。但为了防止接收方窗口更新丢失导致双方永久等待,发送方启动坚持定时器,定期发送探测报文,询问接收方窗口是否已更新。
5️⃣ TCP拥塞控制(简要)
流量控制是"接收方"对"发送方"的限制,而拥塞控制是"网络"对"发送方"的限制。TCP通过四个算法进行拥塞控制:
| 算法 | 作用 |
|---|---|
| 慢开始 | 连接建立初期,拥塞窗口cwnd从1开始指数增长 |
| 拥塞避免 | cwnd达到慢开始门限ssthresh后,改为线性增长 |
| 快重传 | 收到3个重复ACK立即重传丢失报文 |
| 快恢复 | 快重传后,cwnd减半并进入拥塞避免,而不是回到1 |
软考中常考:慢开始阶段cwnd按指数增长,拥塞避免阶段按线性增长。
6️⃣ 经典例题
例题1:TCP建立连接时,第二次握手报文的标志位是( )。
A. SYN=1, ACK=0
B. SYN=1, ACK=1
C. SYN=0, ACK=1
D. SYN=0, ACK=0
解析 :第二次握手服务器同时发送SYN和ACK,表示"我同意连接并确认收到你的请求"。选 B。
例题2:TCP协议中,接收方通过( )字段告诉发送方自己还能接收多少数据。
A. 序号
B. 确认号
C. 窗口
D. 紧急指针
解析 :TCP头部中的窗口字段 用于流量控制,告诉发送方接收窗口大小。选 C。
例题3(判断):TCP三次握手的目的是同步双方的初始序号并确认双方收发能力。( )
解析:正确。三次握手确保双方都确认了对方的发送和接收能力,并交换了初始序号。
7️⃣ 记忆口诀
三次握手:SYN、SYN+ACK、ACK。
可靠传输:序号确认加重传,滑动窗口控流量。
流量控制看rwnd,拥塞控制看cwnd。
慢开始指数涨,拥塞避免线性增。
8️⃣ 小测验(评论区对答案)
TCP客户端发送的第一个报文段中,标志位SYN=1,序号seq=100。服务器回复的报文段中,SYN=1,ACK=1,seq=300,ack=101。则客户端第三次握手发送的报文段中,seq和ack分别是( )。
A. seq=101, ack=301
B. seq=100, ack=300
C. seq=101, ack=300
D. seq=100, ack=301
🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #TCP #三次握手 #可靠传输 #流量控制 #计算机网络 #软考备考