1、为什么我们已经讨论的所有 I n t e r n e t协议(I P, ICMP, IGMP, UDP, TCP)收到有检验和错 的分组都仅作丢弃处理?
当分组的checksum与接收方的计算结果不一致的时候,有三种处理方案:一是立即通知发送方重传;二是直接丢弃分组,等待发送方定时器超时后重传;三是尝试纠错,比如数据链路层中的CRC。但是,因为不一致的一般是有两种情况导致的:1)checksum部分出错,2)分组中其他字段出错。所以,接收方是无法是哪里出错,尤其是如果分组中出错的字段就是发送方的地址(比如IP分组中源地址字段错了),那么根本无法将重传请求回馈给发送方。所以处理方法就是直接丢弃分组等待超时重传。
还有,为什么CRC只用在数据链路层呢?因为CRC需要的额外比特位还是比较多的,加上因为数据链路层已经有了检测能力高的CRC,传输的准确率已经得到保证,所以上层协议就没有必要再使用CRC了。
还有,为什么CRC只用在数据链路层呢?因为CRC需要的额外比特位还是比较多的,加上因为数据链路层已经有了检测能力高的CRC,传输的准确率已经得到保证,所以上层协议就没有必要再使用CRC了。
链接:https://www.zhihu.com/question/26997887/answer/34880234
来源:知乎
2、tcp提供了一种字节流服务,而收发双方都不保持记录的边界
这是通过端口号来实现的,每个端口号对应于一个应用程序,可以通过端口号来区分数据是哪个应用程序的
3、为什么在 T C P首部的开始便是源和目的的端口号?
简单来说,ICMP 差错报文包含了 IP 首部和 IP 数据报文的前8个字节,而 ICMP 需要需要确定哪一条链接出了问题,那怎么确定链接呢?就是通过源端口号和目的端口号进行的。所以 IP 数据报的前 8 个字节一定包含了相关端口号,也就是说 TCP 首部前 8 个字节一定包含了源端口和目的端口号。至于为什么一定是前 4 个字节?我猜测 ICMP 的相关实现中,就是通过 IP 数据报文的前 8 个字节中的前 4 个字节获取的端口号,所以反向推断,TCP 首部的前 4 个字节一定是端口号信息。同理,UDP 的前 4 个字节也是端口号信息。
链接:https://www.zhihu.com/question/20708671/answer/129449027
来源:知乎