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, 值得您的关注!!!

 

posted on 2023-11-20 23:56  Mira_2019  阅读(47)  评论(0编辑  收藏  举报