面试题答案
一键面试- 确认与重传机制
- 原理:发送方发送数据后,等待接收方的确认消息(ACK)。若在指定时间(超时时间)内未收到ACK,就认为数据传输失败,并重传该数据。这样可以确保数据最终能成功到达接收方,避免因网络丢包等原因导致数据丢失。例如,在简单的UDP通信代码中,可以通过设置定时器和维护待确认数据列表来实现此机制。
- 序列号机制
- 原理:给每个发送的数据包分配一个唯一的序列号。接收方根据序列号对数据包进行排序,以确保数据包按顺序处理,解决因网络乱序导致的数据处理错误。同时,通过序列号还能检测出重复的数据包并丢弃,防止重复处理带来的错误。在Python代码实现中,可以在数据包的头部添加序列号字段。
- 校验和机制
- 原理:发送方在发送数据前,根据数据包内容计算一个校验和值,并将其附加在数据包中。接收方收到数据后,按照相同的算法重新计算校验和,并与接收到的校验和进行比较。若两者一致,则认为数据在传输过程中未被损坏;若不一致,则说明数据可能出现错误,可要求重传。在Python中,可以使用
hashlib
等库来计算校验和。
- 原理:发送方在发送数据前,根据数据包内容计算一个校验和值,并将其附加在数据包中。接收方收到数据后,按照相同的算法重新计算校验和,并与接收到的校验和进行比较。若两者一致,则认为数据在传输过程中未被损坏;若不一致,则说明数据可能出现错误,可要求重传。在Python中,可以使用
- 窗口机制
- 原理:发送方维护一个发送窗口,窗口内包含可以连续发送的多个数据包。接收方维护一个接收窗口,用来接收并缓存按序到达的数据包。发送方在收到部分确认消息后,可以继续发送窗口内后续的数据包,提高传输效率。同时,接收方根据自身处理能力和网络状况,通过调整窗口大小来告知发送方合适的发送速率,避免接收方因处理不过来而丢包。在Python实现中,需要用数据结构来模拟窗口,并通过协议消息来交互窗口大小信息。