《计算机网络》4小时期末速成课笔记-传输层
本文最后更新于8 天前,其中的信息可能已经过时,如有错误请在评论区留言

感谢老师课程!
课程链接:《计算机网络》4 小时期末速成课!期末速成丨考前突击丨期末不挂科丨考点总结
主讲人:paper 老师(B 站 UP:数学建模老哥)

什么是传输层?

传输层(英语:Transport Layer)在计算机网络中是互联网协议包与开放系统互连(OSI)网络堆栈中协议的分层结构中的方法的一个概念划分。该层的协议为应用进程提供端到端的通信服务。它提供面向连接的数据流支持、可靠性、流量控制、多路复用等服务。

传输层的功能:
传输层提供进程和进程之间的逻辑通信,靠套接字Socket=(主机IP地址,端口号)找到应用进程。
传输层对收到的报文进行差错检测。

传输层的两种协议:

面向连接的传输控制协议TCP:
传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。
可靠,面向连接,时延大

无连接的数据报协议UDP:
传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
不可靠,无连接,时延小

TCP协议

TCP是面向连接(虚连接)的传输层协议。
每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重

TCP提供全双工通信:
发送缓存:准备发送的数据、已发送但尚未收到确认的数据
接收缓存:按序到达但尚未被接受应用程序读取的数据、不按序到达的数据

TCP段格式

字段名称大小作用
源端口(Source Port)16位指定发送端应用进程的端口号
目标端口(Destination Port)16位指定接收端应用进程的端口号
序列号(Sequence Number)32位用于标识数据流中的字节顺序,第一个数据字节的序列号
确认号(Acknowledgment Number)32位如果ACK标志位被设置,表示接收端期望收到的下一个字节的序列号
数据偏移(Data Offset)4位表示TCP头部的长度,以32位字(4B)为单位,指示数据开始的位置
保留(Reserved)3位保留字段,暂时未使用,设置为0
标志位9位URG:紧急指针有效。
ACK:确认号有效。
PSH:接收方应尽快将数据推送给应用层。
RST:重置连接。
SYN:同步序列号,用于连接建立。
FIN:发送方完成发送任务,准备关闭连接。
窗口大小(Window Size)16位用于流量控制,表示接收方能接收的最大字节数
校验和(Checksum)16位用于检验TCP头部和数据部分的传输错误
紧急指针(Urgent Pointer)16位如果URG标志位设置,指示紧急数据的偏移量
选项(Options)可变提供额外的控制信息,如最大段大小(MSS)、时间戳等
填充(Padding)可变为了使TCP头部长度为32位的倍数,可能需要填充一些无效位
数据可变TCP段的有效载荷,包含传输的数据

TCP连接的三个阶段

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。

三次握手

ROUND 1:

客户端发送连接请求报文段,无应用层数据。
SYN=1,seq=x(随机)

ROUND 2:

服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
SYN=1,ACK=1,seq=y(随机),ack=x+1

ROUND 3:

客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。
SYN=0,ACK=1,seq=x+1,ack=y+1

ACK(Acknowledgment Flag)和ack(Acknowledgment Number)对别

属性ACKack
类型TCP 报文头的标志位TCP 报文头的字段(数值)
含义确认该报文是否为确认报文确认收到的序列号
取值01一个具体的数字
作用指示报文是否包含确认功能指明期望接收的下一个序列号

SYN(Synchronize)
表示同步序列号,是连接建立时用来发起请求的标志位。
如果 SYN=1,说明这是一个同步请求,用于初始化序列号并建立连接。

seq(Sequence Number)
表示发送方的初始序列号,用于标识数据的顺序。
每一方在通信中都会用自己的序列号 seq,并在握手时交换。
在第一次握手时,seq=x 表示客户端的初始序列号。

ACK(Acknowledgment)
表示确认应答标志位。
如果 ACK=1,表示该报文是对之前报文的确认。

ack(Acknowledgment Number)
表示确认号,用于告诉对方:“我期望接收的下一个数据包的序列号是什么”。
例如,ack=x+1 表示已经成功接收了序列号为 x 的报文,下一个期望收到的是 x+1。

步骤发起方SYNACKseqack
第一次握手客户端 A10x
第二次握手服务器 B11yx+1
第三次握手客户端 A01x+1y+1

四次挥手

ROUND 1:

客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。
FIN=1,seq=u

ROUND 2:

服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了——半关闭状态。
ACK=1,seq=v,ack=u+1

ROUND 3:

服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。
FIN=1,ACK=1,seq=w,ack=u+1

ROUND 4:

客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭。 ACK=1,seq=u+1,ack=w+1

FIN(Finish)
断开连接的标志位,表示发送方不再有数据需要传输了,要求释放连接。

ACK(Acknowledgment)
确认标志位,用来确认对方的 FIN 请求。

seq(Sequence Number)
发送方的序列号,用于标识该报文在数据流中的位置。

ack(Acknowledgment Number)
确认号,用于确认接收到的对方序列号。

步骤发起方FINACKseqack
第一次挥手客户端 A10u
第二次挥手服务器 B01vu+1
第三次挥手服务器 B10v
第四次挥手客户端 A01u+1v+1

可靠传输

流量控制

流量控制:让发送方慢点,要让接收方来得及接收。
TCP利用滑动窗口机制实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗
口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方) ,发送方的发送窗口取接
收窗口rwnd和拥塞窗口cwnd的最小值(拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的
窗口值,反映网络当前容量)。

出现拥塞的条件:
对资源需求的总和 -> 可用资源网络中有许多资源同时呈现供应不足
拥塞控制:
网络性能变坏 -> 网络吞吐量将随输入负荷增大而下降
防止过多的数据注入到网络中

拥塞控制四种方法:
1.慢开始 2.拥塞避免 3.快重传 4.快恢复

慢启动 (Slow Start):

在 TCP 连接开始时,发送方会逐步增加其发送窗口大小,尝试找到网络的可用容量。
初始的拥塞窗口(Congestion Window, CWND)从一个较小的值开始,通常是1个最大报文段(MSS)。
每次收到确认(ACK),CWND会指数级增长(即每个RTT加倍),直到达到慢启动阈值(ssthresh)或者发生丢包。

拥塞避免 (Congestion Avoidance):

当 CWND 达到慢启动阈值后,TCP 会进入拥塞避免阶段。
在这个阶段,CWND 的增长从指数变为线性,每经过一个RTT,CWND 增加一个 MSS。
目的是更稳健地寻找网络的最大吞吐量,避免出现拥塞。

快重传 (Fast Retransmit):

当接收方收到一个丢失的数据包后,会快速发送多个重复的 ACK 给发送方。
如果发送方在收到三个重复的 ACK 时,尚未收到对丢失报文的确认,它会立即重传丢失的数据包,而无需等待超时。

快恢复 (Fast Recovery):

与快重传结合使用。
当发送方检测到丢包并重传丢失的数据包后,它不会像传统的慢启动那样将 CWND 直接降到初始值。
相反,它将 CWND 减半(通常设置为 ssthresh),然后进入拥塞避免阶段。

UDP协议

UDP首部

UDP首部总共占用8个字节,包含以下四个字段:
源端口号(Source Port) – 16位
目的端口号(Destination Port) – 16位
长度(Length) – 16位
校验和(Checksum) – 16位

例题:下面是以十六进制格式存储的一个UDP首部:CB84000D001C001C试问:源端口号是 [填空1](请用16进制表示),目的端口号是 [填空2](请用10进制表示),数据长度是 [填空3] 字节。

源端口号是 CB84
目的端口号是 13
数据长度是 20 字节(数据长度是UDP数据报长度-首部长度8字节)

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇