面试题答案
一键面试- 序列号机制
- 在每个UDP报文头部添加一个序列号字段。发送方按照顺序依次递增该序列号,从0开始,每发送一个报文,序列号加1。这样接收方可以根据序列号判断报文是否乱序,并对乱序到达的报文进行正确排序。
- 窗口机制
- 接收方维护一个接收窗口。窗口大小根据网络状况和系统资源动态调整。例如,初始窗口大小可以设置为10个报文。接收方只接收序列号在窗口范围内的报文。如果接收到窗口外的报文,先缓存起来,等待窗口滑动。
- 发送方也维护一个发送窗口,限制未确认报文的数量。当发送窗口内的报文都已发送且未收到确认时,停止发送新的报文,避免网络拥塞导致丢包。
- 确认机制
- 接收方收到报文后,发送一个确认报文给发送方。确认报文中包含已成功接收的最大序列号。发送方根据确认报文,从发送窗口中移除已确认的报文,并滑动窗口,继续发送新的报文。
- 超时重传机制
- 发送方为每个发送的报文设置一个超时定时器。如果在超时时间内没有收到确认报文,就重传该报文。超时时间需要根据网络的往返时间(RTT)动态调整,例如,可以使用Jacobson算法来估算RTT,并设置合适的超时时间。
- 报文缓存与重组
- 接收方设置一个缓存区,用于缓存乱序到达的报文。当接收到一个报文时,首先检查序列号。如果序列号在窗口内且是期望接收的下一个序列号,直接处理该报文;如果序列号大于期望接收的下一个序列号,将其存入缓存区;如果序列号小于期望接收的下一个序列号,丢弃该报文(因为已经处理过)。
- 当接收方处理完当前窗口内的所有报文后,检查缓存区,将缓存区内序列号连续的报文按顺序取出进行处理,完成报文的重组。