课后习题

R3.假设 A 到 B 的 TCP 报文段具有源端口号 X 和目的端口号 Y,则对于从 B 到 A 的报文段源
端口号和目的端口号分别是多少?
答: 源端口号 Y 和目的端口号 X。
R4.描述应用程序开发者为什么可能选择在 UDP 上运行应用程序而不是在 TCP 上运行的原因。
答: 应用程序开发人员可能不希望其应用程序使用 TCP 的拥塞控制,拥塞控制会在拥塞发生时
抑制应用程序的发送速率。 通常, IP 电话和 IP 视频会议应用程序的设计者选择在 UDP 上运行
他们的应用程序,因为他们希望避免 TCP 的拥塞控制。 此外,一些应用程序不需要 TCP 提供
的可靠数据传输。【如果视频会议采用拥塞控制,则网络拥堵时接收方会看到停止的页面,然后
在网络恢复后会看到视频中的对象以极快速度完成一系列播放直到跟上当前时间点,若落后过
多则需要消耗大量时间播放一系列无意义的内容,导致观众丢失更多内容, 如果用 UDP 则网络
恢复后会直接从当前时间点开始进行】
R5.在今天的因特网中,为什么语音和图像流量常常是经过 TCP 而不是 UDP 发送?提示:与拥
塞控制无关。
答: 由于大多数防火墙被配置为阻止 UDP 通信,因此使用 TCP 进行视频和语音通信可以通过
防火墙进行通信。
R7.若主机 C 上有一个进程具有端口号 6789 的 UDP 套接字。假定主机 A 和主机 B 都用目的端
口号 6789 对主机 C 发送一个 UDP 报文段。这两台主机的这些报文段在主机 C 都被描述为相同
的套接字吗?如果这样的话, C 的该进程将怎样知道源于两台不同主机的这两个报文段?
答: 是的,两个报文段都将指向同一个套接字。 对于每个接收到的报文段,在套接字接口处,
操作系统将向进程提供 IP 地址,以确定单个报文段的源主机。
R8.若主机 C 端口 80 上运行一个 Web 服务器,假设这个 Web 服务器使用持续链接,并且正在
接收来自两台不同主机 A 和 B 的请求,被发送的所有请求都通过位于主机 C 的相同套接字吗?
如果他们通过不同的套接字传递,这两个套接字都具有端口 80 吗?
答: 对于每个持续连接, Web 服务器创建一个单独的“连接套接字”。 每个连接套接字用四个元
组标识: (源 IP 地址,源端口号,目的 IP 地址,目的端口号)。 当主机 C 接收 IP 数据报时,它
检查数据报/段中的这四个字段,以确定它应该将 TCP 段的有效负载传递给哪个套接字。 因此,
来自 A 和 B 的请求通过不同的套接字。 这两个套接字的目的端口都是 80;但是,这些套接字
有不同的源 IP 地址。 与 UDP 不同,当传输层将 TCP 段的有效负载传递给应用程序进程时,
它不指定源 IP 地址,因为这是由套接字标识隐式指定的。【如下图】

image-20211228191722908

R9.在我们的 rdt 协议中,为什么需要引入序号?
答: 接收主机需要序列号来确定到达的数据报是否包含新数据或重新传输。
R10.在我们的 rdt 协议中,为什么需要引入定时器?
答:用来处理传输链路上的丢失情况。 如果在该分组的定时器持续时间内没有接收到传输分组
的 ACK,则假定该分组(或 ACK 又或 NACK)已丢失。 于是,数据包被重传。【rdt 总结】

rdt1.0:只考虑信道理想,不存在差错,发送方只管发、接收方只管收。
rdt2.0: 信道可能出现差错但不会丢包,因此发送方引入等待机制,发完消息后等接收方送
一个 ACK(接收方已成功收到)或 NAK(也写作 NACK,表示接收方发现分组有误需要重
传),发送方收到 ACK 则发下一个分组,收到 NAK 则退回之前的状态,发送有问题的分组。
注意 NAK 是表示接收方经过校验和之类手段发现分组有问题时由接收方发送的,而不是超
时信号。由于 rdt2.0 发送方只有两个状态,这样的协议被称为“停等协议”,但注意 rdt2.0 可
能因为 ACK 或 NAK 损坏而导致发送方不清楚接收方意图,因而无论是重发还是发送下一分
组都可能导致传输崩溃,因此 rdt2.0 是不可运行的。如接收方已收到分组并发送 ACK,在信
道上损坏而导致发送方不可读,若重发则接收方会收到一个重复分组而导致收发两端错乱。
rdt2.1: 引入序号,分次调用。这样 rdt2.0 的收发两端错乱问题就解决了,接收方可以发现
并报告收到了重复分组(因为可以比对序号了,而比对分组内容是否一致是不可行的)。
rdt2.2:不再使用 NAK,一旦发现收到的分组损坏则报告上一次正确接收序号的确认。如分
组 0 正常收到,分组 1 损坏,则在发现分组 1 损坏后给发送方发送一个 ACK0 而不发送 ACK1。
rdt3.0:在此协议中考虑比特受损的情况和信道丢包的情况, 引入定时器,发送消息后启动
倒计时,超过时间了还未收到 ACK 则认为丢包,直接重传,超时后收到该分组的确认则立刻
发送下一分组,同时接收方收到重复的分组则仍发送该分组的确认 ACK,发送方收到以前分
组的确认则什么也不做。 rdt3.0 有时也称为“比特交替协议”。