TCP协议,UDP协议
1. UDP协议
对于 408 考试来说,不算重点,UDP适合少量数据传输。
关于UDP
(A)UDP是无连接的;
(B)UDP是 Best-Effort Delivery,不保证可靠交付;
(C)面向报文的,一次传输少量数据;
(D)UDP 无拥塞控制,适合实时使用。
* UDP 是定义在传输层的一种协议,装上 “UDP首部”。
* 全 0 校验
2.TCP协议
总结
(A)虚连接 / 面向连接的,定义在 传输层;
(B)对于 1 个TCP而言,有两个端点,点对点协议;
(C)可靠交付。所谓可靠,即保证发送发出的,和接收方收到的一致;
(D)TCP 提供全双工通信;
(E)无结构字节流,面向字节流。
报文格式
为了加深理解,将上述报文格式列举成:
(1)TCP首部 —— 4 个字节(B),32 bit。
- 半字-源端口; 半字-目的端口
- 半字-序号;半字-序号
- 半字-确认号;半字-确认号
- 半字-数据偏移(4bit)、保留(6bit)、6位状态位;半字-窗口
- 半字-检验和;半字-紧急指针
- 半字-选项;0.5*半字:选项;0.5*半字:填充
(2)TCP首部 —— 关于 6 位状态位
- URG 紧急,告诉发送方的状态
- ACK 确认
- PSH 推送,告诉接收方
- RST 重置,释放连接
- SYN 同步位,该状态位为1时,表示正在建立连接、确认连接
- FIN 表示数据发送完毕
(3)TCP首部 —— 窗口
- 窗口涵盖在 ACK 帧内的;接收方告诉发送方能够接收的字节;
例题:假设主机A 向主机B 发送一个ACK(基于 TCP 协议),指定窗口=700,发送给主机B。此时,主机B窗口为 1000,那么主机B规定的窗口编号为,701-1700。
个人评注,
- 这里的窗口是一个消息的报文,可以理解为 单个消息内部的 offset。
- 报文中的窗口,含义是起始位置;
- 窗口大小由接收报文的一方,通常是发送方,来决定。预留出的位置号,起始位置 - 起始位置+自己的窗口大小。
(4)TCP首部 —— 首部检验和
- 干什么呢?主要是检验,首部+数据;
- 注意,检验时候,要加上“12字节伪首部”,伪首部第四个字段为6。类比地说,就是钥匙。
(5)TCP首部 —— 6位状态位
- SYN=1时候,表示接收或者确认连接;
- SYN 存在洪泛攻击,就是用户不发送第二个ACK,TCP挂起 /半连接。导致什么结果?就是服务器一直发送 ACK 要求用户回应,不断占用资源。
- 洪泛攻击适用于 三次握手协议
3. TCP协议 —— 可靠传输
特点
- 面向字节 / 字节流
- 捎带确认、规定时间、冗余 ACK
捎带确认
- 在 TCP 首部的确认号,填写“下一帧期待被传的帧号”,称为“捎带确认”;
- 默认,累计确认
TCP协议可靠传输的时间规定
- 自适应算法
- 通常是最近若干个 RTT 的加权平均,称为 RTTs
冗余ACK
- 发送方已然发送了好几帧,接收方连续发送几个同样序号 ACK,称为“冗余ACK”;
- 收到冗余 ACK 认为该帧已经传丢,需要重发。
快速重传
- 针对冗余ACK 重发问题,直接发送冗余帧号+1 的帧序列;
4. TCP协议 —— 流量控制
简单总结
- 简单来说,就是“发送方你慢点”。参考王道计算机网络视频课;
- 采用措施,滑动窗口机制。接收方在ACK帧中设置 LEN(WIN),发送方接收之后,依据报文信息设置窗口大小
例题-1
例题-2
- 滑动窗口机制,一定是接收方发送给发送方;
- ACK报文: ACK=1,ack=开始位置序号, rwnd=可容纳字节数量
- 一旦接收方发送的 ACK 报文中,rwnd=0 时候,发送方接收到就开启计时器,time out 之后发送 “探测报文”
5. TCP协议 —— 拥塞控制
定义
- 资源需求 > 资源供给,称为“拥塞”。这是非官方定义。
- 为什么要拥塞控制?防止过多数据进入网络
基本假设
- 针对发送方。即数据单一发送,接收方只发送 ACK;
- 接收窗口足够大的时候,发送窗口取决于拥塞窗口。有公式 发送窗口 swnd = min{ 接收窗口 rwnd, 拥塞窗口 cwnd }
采取措施 —— 如何控制拥塞?
- 慢开始 + 拥塞避免
- 快重传 + 快恢复
考试程度,不至于细节
传输轮次
- 定义:发送一批报文,该批次所有报文收到 ACK 的时间。
- 某些情况下,认为是 RTT
慢开始 + 拥塞避免
- 一旦拥塞,cwnd = 1
- threshold(n+1) = 0.5*threshold(n)
如何判断拥塞?
TCP的拥塞控制如何判断当前网络情况
- 丢包事件:类似于你在路上发现有车辆出事故或堵住了,这表明道路可能拥堵。 TCP通过检测数据包是否被丢弃来判断发生了丢包事件,从而推测网络是否发生了拥塞。
- ACK延迟/计时器模式:这就像你观察到远处的车辆行驶速度变慢一样。 TCP利用接收方发送的确认信息(ACK)来评估网络延迟情况。 如果接收方的确认信息回来得很慢,可能意味着网络拥塞。
- 拥塞窗口过小:就像你在拥堵路段想要保持适当距离,以避免发生碰撞一样。 TCP根据接收到的确认信息和拥塞窗口大小来判断网络拥塞情况。 如果拥塞窗口较小,意味着网络拥塞,发送方需要减缓发送速率。
- 重复确认/冗余ACK:如果你看到其他司机多次重复发出警示,可能是发生了意外或拥堵。 类似地,TCP通过接收到的重复确认信息来判断是否发生了网络拥塞。
快重传 + 快恢复
- 触发:三次冗余 ACK。口诀:快重传基于冗余 ACK
- cwnd = 0.5*threshold(n+1)
- threshold(n+1) = 0.5*threshold(n)
- 个人评注,其实是 基于不同拥塞探测方式,冗余ACK探测方式,或许实际应用最快速最敏感。PPT 显示应用方面更多用【快重传】。
6. TCP协议 —— 连接管理
- SYN=1 表示,连接请求/连接确认。即 前两次 发送数据帧。
- 三次握手机制
- 三次握手,会产生洪泛攻击。即第二次请求不成立,即便收到服务器 ACK
7. TCP协议 —— 连接释放
- 任何进程均可以随时终止连接
- 资源释放过程如下
2023年11月24日
之前看视频画了点
【2014】下列关于 UDP 协议的叙述中,正确的是()
I.提供无连接服务
II.提供复用/分用服务
III.通过差错校验,保障可靠数据传输
A.仅 I
B.仅 I、II
C.仅I 、II
D. I、I、III
答案:B
解析:
UDP 协议,无连接服务,提供复用/分用服务。
【2018】UDP 协议实现分用时所依据的头部字段是()
A.源端口号
B.目的端口号
C.长度
D.校验和
答案:B
解析:
分用时候,用的头部字段中的目的端口号。
2023年11月24日 星期五
今天可是周末,我已经很多年木有周末了!吐槽!
开始工作吧!
【2014】主机甲和乙建立了 TCP 连接,甲始终以 MSS=1 KB 大小的段发送数据,并一直有数据发送。乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 t 时刻发生超时的时候拥塞窗口为 8KB,则从 t 时刻起,不再发生超时的情况下,经过 10 个 RTT后,甲的发送窗口是()
A.10KB | B.12KB | C.14KB | D.15KB
答案:A
解析:
特别地,如果 RTT = 4 的时候,发送窗口为多少?答曰:4 KB。
王道习题 - 帮助理解滑动窗口协议
P225
第 7 题,如果发送窗口 变为 2000B,收到 ACK 之前可以发送 2000 字节 的信息。这道题没太理解知识点,暂时先记住。
第 20 题,发送窗口由 2000 变为 3000,表示在收到确认之前,还可以发送 3000B 。
第 9 题,TCP协议对 字节 进行编号,但是收到 报文段 的字节之后,才ACK,因此,是对 报文段 进行确认。
NOTES
TCP是全双工通信。
TCP首部的窗口,通常由 接收方发送给发送方的报文中规定。
关于 TCP 三次 / 四次 握手协议 抓包实验
实验一:https://blog.csdn.net/daxiongbaobei/article/details/106128851
实验二:https://www.cnblogs.com/Blogwjl/p/15858488.html
建立连接是3次握手,释放连接是4次握手。
王道计算机网络辅导书 P226 第18题
鉴于上述实验结果
我方发出的帧:seq = 对方ack, ack = 对方 seq + 1(这个是字节数,如果增加2字节,则为 对方seq+2)
关于 MSS
最大传输单位,这个数字规定了第一个 RTT 之后,拥塞窗口大小。
2023年11月25日 星期六 5:14AM
【2009】主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300B 和500B 的有效载荷,第一个段的序列号为 200,主机乙正确接收到这两个数据段后,发送给主机甲的确认序列号是()。
A.500 | B.700 | C.800 | D.1000
答案:D
解析:
1.第一个 ACK seq=200+300=500
2.第二个 ACK seq=500+500=1000
【2009】一个TCP 连接总以1KB 的最大段长发送TCP 段,发送方有足够多的数据要发送,当拥塞窗口为 16KB 时发生了超时,如果接下来的 4个RTT 时间内的TCP段的传输都是成功的,那么当第4个RTT 时间内发送的所有 TCP段都得到肯定应答时,拥塞窗口大小是 ()。
A.7KB | B.8KB | C.9KB | D.16KB
答案:C
解析:
这里没涉及接收窗口, 4RTT的时候,也没有 hit 到阈值。
因此,拥塞窗口大小为 9 KB。
【2010】主机甲贺主机乙之间已建立一个 TCP 连接、TCP 最大段长为 1000B。若主机甲的当前拥塞窗口为 4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为 2000B,则此时主机甲还可以向主机乙发送的最大字节数是()。
A.1000 | B.2000 | C.3000 | D.4000
答案:A
解析:
注意,图中的注释,A收到第一个 ACK 的时候,因为最近发出报文的 ACK 未收到,因此,自己的窗口不作调整。再次发送的时候,仍然为 1000B。
进一步地, 由于最近一帧的 ACK 很可能改变接收方的接收窗口,所以“不急着确认”。
【2011】主机甲向主机乙发送一个(SYN =1,seq = 11220)的TCP段,期望与主机乙建立 TCP 连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的 TCP 段可能是()。
A.(SYN=0,ACK=0,seq=11221,ack = 11221)
B.(SYN=1,ACK=1,seq=11220,ack = 11220)
C.(SYN=1,ACK=1,seq=11221,ack = 11221)
D.(SYN=0,ACK=0,seq=11220,ack= 11220)
答案:C
解析:
1.seq = 对方ack, ack = 对方 seq + 1
因此 ack = seq+1 = 11220 + 1 = 11221
2.这里 seq 不知道为什么。针对 SYN=1的应答,只要连接不出问题,SYN=1,ACK=1
【2011】主机甲与主机乙之间已建立一个TCP 连接,主机甲向主机乙发送了3个连续的 TCP段,分别包含300B、400B 和 500B 的有效载荷,第3个段的序号为 900。若主机乙仅正确接收到第 1个段和第 3 个段,则主机乙发送给主机甲的确认序号是 ( )。
A.300 | B.500 | C.1200 | D.1400
答案:B
解析:
1. 依据第三个段的序号为 900 反推,于是,第二个段序号 400,第一个段序号 200
2. 乙只收到1和3,发送 1 的ACK,因此,确认序号 500
【】主机甲与主机乙之间已建立一个 TCP 连接,双方持续有数据传输,且数据无差错与丢失。若甲受到一个来自乙的 TCP 段,该段的序号为 1913、确认序号为 2046、有效载荷为 100B,则甲立即发送给乙的 TCP 段的序号和确认序号分别是()。
A.2046、2012
B.2046、2013
C.2047、2012
D.2047、2013
答案:B
解析:
1.记住公式 seq = 对方ack, ack = 对方 seq + 1
2.因此确认序号为 1913 + 100,这里注意,确认序号和序号是独立的。
序号 = 对方ack = 2046
3, 确认序号,是希望对方发送的(收到帧的序号+1)。序号即发送帧的序号。
【2015】主机甲和主机乙新建一个 TCP 连接,甲的拥塞控制初始阈值为 32KB,甲向乙始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙为该连接分片 16KB 接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未出现发送超时的情况下,经过4个 RTT 后,甲的发送窗口是()。
A.1KB | B.8KB | C,16KB | D.32KB
答案:A
解析:
【2017】若甲向乙发起一个TCP 连接,最大段长MSS=1KB,RTT=5ms,乙开辟的接收缓存为 64 KB,则甲从连接建立成功至发送窗口达到 32 KB,需经过的时间至少是()。
A.25ms | B.30ms | C.160ms | D.165ms
答案:A
解析:
上午 8:58 分 最近效率什么还是不太够。
一方面是阅读速度好像本来就不快(可能急功近利的我一边听A课,一遍看B书),未来尝试听音乐看书试试。
关于学习,不用怀疑,不学习是没出路的。什么时候被淘汰了,一定是综合素质是赶不上的,主流的伙伴一定如火如荼每天思索着怎么改变世界。
如果你我,实力还不济,那么,我们就再努力努力。工技贸,一起往上提一提 。
【2012】主机 H 通过快速以太网连接 Internet, IP 地址为 192.168.0.8,服务器 S 的 IP 地址为 211.68.71.80 。H 与 S 使用 TCP 通信时,在 H 上捕获的其中 5 个 IP分组如表1所示。
回答问题:
(1)表 1 中的IP分组中,哪几个是由 H 发送的?哪几个完成了 TCP 连接建立过程?哪几个在通过快速以太网传输时进行了填充?
(2)根据表 1 中的 IP 分组,分析 S 已经收到的应用层数据字节数是多少/
(3)若表 1 中的某个 IP 分组在 S 发出时的前 40B 如表2所示,则该 IP分组到达 H 时经过了多少个路由器?
IP分组头和 TCP段头结构分别如图1 和如图2所示。
答案:
(1)分几个自问题。
(A)H设备作为源IP, 192.168.0.8 对应 十六进制 c0a80008H 由图1知,1、3、4号由 H 发送;
(B)TCP连接,要看TCP Header 状态位,依据报文格式,文中红色下划线为状态位
1 0111 0000 00 00 0010 ack=0, syn=1 第一、四号位
2 0111 0000 00 01 0010 ack=1, syn=1
3 0101 0000 11 11 0000 ack=1, syn=0
4 0101 0000 00 01 1000 ack=1, syn=0
5 0101 0000 00 01 0000 ack=1, syn=0
1、2、3 是 TCP 建立连接
(C)哪些报文有填充?
第一,关于填充。当 Header 总长度不满足 64B 的时候,要填充。因为,以太网最小帧长 64B,快速以太网有效载荷最小长度 46B。
第二,总长度,单位 1B:
1 0030 - 0000 0000 0011 0000 48 B
2 0030 - 0000 0000 0011 0000 48 B
3 0028 - 0000 0000 0010 1000 40 B
4 0038 - 0000 0000 0011 1000 48 B
5 0028 - 0000 0000 0010 1000 48 B
其中,3、5号帧是不足 46B,需要字符填充的。这里快速以太网最小帧长 46 B,以太网 64 B。
本题最后再复习字节填充,即“帧长不够字节填”。8比特一填。
(2)S已经收到的字节数,思路,用 seq 序号相减得出。
由于前三帧是用来建立连接的,因此,4号和5号帧,是相互发送数据。
发送字节数 = 确认序号 - 上一次序号
4号帧 序号(第二行第二段) 84 6b 41 c6
5号帧 确认(第二行第三段) 84 6b 41 d6
5号确认 - 4号序号 = 10H = 1*16+0*1 = 16 B
答曰,发送了 16 个字节。
【2016】假设下图中的 H3 访问 Web 服务器 S 时,S 为新建的 TCP 连接分配 了 20KB (K=1024) 的接收缓存,最大段长 MSS=1KB,平均往返时间 RTT=200ms。H3 建立连接时的初始序号为100,且持续以 MSS 大小的段向 S发送数据,拥塞窗口初始阙值为 32KB,S 对收到的每个段进行确认,并通告新的接收窗口。假定 TCP 连接建立完成后,S 端的 TCP 接收缓存仅有数据存入而无数据取出。请回答下列问题:
回答问题:
(1)在 TCP 连接建立过程中,H3 收到的 S 发送过来的第二次握手 TCP 段的 SYN 和 ACK 标志位的值分别是多少?确认序号是多少?
(2)H3 收到的第 8 个确认段所通告的接收窗口是多少?此时 H3 的拥塞窗口变为多少?H3 的发送窗口变为多少?
(3)H3 的发送窗口等于 0 时,下一个待发送的数据段序号是多少? H3 从发送第 i 个数据段到发送窗口等于 0 时刻未知,平均数据传输速率是多少?(忽略段的传输延时)
(4)若 H3 与 S 之间通信已经结束,在 t 时刻 H3 请求断开该连接,则从 t 时刻起,S 释放该连接的最短时间是多少?
答案:
(1)第二次握手,建立连接不出意外iain,SYN=1,ACK=1,ack=101(初始序号 + 1)
(2)第 8 个 RTT 时候,发送窗口 12 KB,拥塞窗口 9 KB,接收窗口 9KB。
(3)由第二小题可知,首次用完接收缓存,是 RTT=5 的时候,这个时候已经接收的数据 20KB
于是 平均传输率 = 8*20KB / (5*200*0.001) = 20.48 kb/s
发送窗口=0的时候,已接受的数据 20 KB,初始序号 101,于是
下一个待发送序号 = 20*1024 + 101 = 20581
(4)已知断开连接是 3 次握手,时间是 RTT 的 1.5倍,单程传播时延的 3倍。
故 放开连接的最短时间 = 1.5 * 0.2s = 0.3 s
(2)解析:
这道题答案没看懂。
那么我们先解决一个问题:发送窗口多久变动一次?
在 TCP协议保持可靠传输的大前提下,发送窗口和接收窗口都是每次传输的时候依据网络情况、双方缓冲情况,动态变化的。
因此,发送窗口每发送数据都会改变。
参考:https://www.cnblogs.com/hongdada/p/11171068.html
参考别人的实验结果
因此,我认为第二小题,拥塞窗口确定就是线性增加的,如果是 2-fold 凑不出答案……
在 RTT=6, RTT=8 的时候,事实上是有报文段占据 slots。
ShoelessCai.com, 值得您的关注!!!