Skip to content

Latest commit

 

History

History
31 lines (21 loc) · 5.36 KB

File metadata and controls

31 lines (21 loc) · 5.36 KB

P17. 考虑两个网络实体 A 和 B,它们由一条完善的双向信道所连接(即任何发送的报文将正确地收到;信道将不会损坏、丢失或重排序分组)。A 和 B 将以交互的方式彼此交付报文:首先,A 必须向 B 交付一个报文,B 然后必须向 A 交付一个报文,接下来 A 必须向 B 交付一个报文,等等。如果一个实体处于它不试图向另一侧交付报文的状态,将存在一个来自上层的类似于 rdt_send(data) 调用的事件,它试图向下传递数据以向另一侧传输,来自上层的该调用能够直接忽略对于 rdt_unable_to_send(data) 调用,这通知较高层当前不能够发送数据。【注意:做出这种简化的假设,使你不必担心缓存数据。】

对该协议画出 FSM 说明(一个 FSM 用于 A, 一个 FSM 用于 B)。注意你不必担心这里的可靠性机制,该问题的要点在于创建反映这两个实体的同步行为的 FSM 说明。应当使用与图 3-9 中协议 rdt 1.0 有相同含义的下列事件和动作:rdt_send(data), packet = make_pkt(data), udt_send(data), rdt_rct(packet), extract(packet, data), deliver_data(data)。保证你的协议反映了 A 和 B 之间发送的严格交替。还要保证你的 FSM 描述中指出 A 和 B 的初始状态。

P18. 在 3.4.4. 节我们学习的一般性 SR 协议中,只要报文可用(如果报文在窗口中),发送方就会不等待确认而传输报文。假设现在我们要求一个 SR 协议,一次发出一对报文,而且只有在知道第一对报文中的两个报文都正确到达后才发送第二对报文。

假设该信道中可能会丢失报文,但报文不会发生损坏和失序。试为报文的单向可靠传输而设计一个差错控制协议。画出发送方和接送方的 FSM 描述。描述在发送方和接收方之间两个方向发送的报文格式。如果你使用了不同于 3.4 节(例如 udt_send()start_timer()rdt_rcv() 等)中的任何其他过程调用,详细地阐述这些动作。举例说明(用于发送方和接收方的时序踪迹图)你的协议是如何恢复报文丢失的。

下图是一般性的 SR 协议:

下图是按照题目要求重新设计的 SR 协议:

P19. 考虑一种情况,主机 A 想同时向主机 B 和主机 C 发送分组。A 与 B 和 C 是经过广播信道连接的,即由 A 发送的分组通过该信道传送到 B 和 C。假设连接 A、B 和 C 的广播信道具有独立的报文丢失和损坏特性(例如,从 A 发出的报文可能被 B 正确接收,但没有被 C 正确接收)。设计一个类似于停等协议的差错控制协议,用于从 A 可靠地传输分组到 B 和 C。该协议使得 A 直到得知 B 和 C 已经正确接收到当前报文,才获取上层交付的新数据。给出 A 和 C 的 FSM 描述。(提示:B 的 FSM 大体上应当与 C 相同。),同时,给出所使用的报文格式的描述。

P20.考虑一种主机 A 和主机 B 要向主机 C 发送报文的情况。主机 A 和 C 通过一条报文能够丢失和损坏(但不重排序)的信道相连接。主机 B 和 C 由另一条(与连接 A 和 C 的信道独立)具有相同性质的信道连接。在主机 C 上的运输层,在向上层交付来自主机 A 和 B 的报文时应当交替进行(即它应当首先交付来自 A 的分组中的数据,然后是来自 B 的分组中的数据,等等)。设计一个类似于停等协议的差错控制协议,以可靠地向 C 传输来自 A 和 B 的分组,同时以前面描述的方式在 C 处交替地交付。给出 A 和 C 的 FSM 描述。(提示:B 的 FSM 大体上应当与 A 的相同。),同时,给出所使用的报文格式的描述。

P21. 假定我们有两个网络实体 A 和 B。B 有一些数据报文要通过下列规则传给 A。当 A 从其上层得到一个请求,就从 B 获取下一个数据(D)报文。A 必须通过 A--B 信道向 B 发送一个请求(R)报文。仅当 B 收到一个 R 报文后,它才会通过 B--A 信道向 A 发送一个数据(D)报文。A 应当准确地将每份 D 报文的副本交付给上层。R 报文可能会在 A--B 信道中丢失(但不会损坏),D 报文一旦发出总是能够正确交付。两个信道的时延未知且是变化的。设计一个协议(给出 FSM 描述),它能够综合适当的机制,以补偿会丢包的 A--B 信道,并且实现在 A 实体中向上层传递报文。只采用绝对必要的机制。