计算机网络学习中易混淆知识点梳理
目录
学习计算机网络时对几个概念有些不清楚,在此梳理一下,作者也是学生小白,欢迎指正。
一、分组、分段、分片
1、分析:
分组应用于网络核心的分组交换中,分段,分片是分组的表现形式。
由于数据链路层最大传输单元MTU和传输层最大报文段长度MSS的存在等原因,较大数据往往不能作为一个整体传输,需要分组。
(1)如果传输层采用TCP协议,会对较大的报文进行分段,每段长度不超过最大报文段长度MSS(说是报文段长度其实是数据部分长度,典型MSS为1460B,1500BMTU-20BIP首部-20BTCP首部),每一报文段加上TCP首部之后传递给网络层。采用TCP协议每个报文段长度较小,一般在网络层就不用进行分片。
所以分片一般都是对UDP协议报文进行的。
(2)如果传输层采用UDP协议,则不会对数据进行分段,整个报文加上UDP头部之后直接传递给网络层,由于数据链路层最大传输单元MTU的存在,采用UDP协议的数据较大时无法直接发给数据链路层,还要进行分片。
例如,在以太网中,MTU为1500B,IP数据报首部占20B,UDP头部占8B,数据部分占1472B,所以当数据部分大于1472B时就要进行分片,每一片加上IP数据报头部之后传递给链路层。
正是因为UDP不分段,所以“报文段”这个传输层传输单位放在UDP上并不严谨,有时称采用UDP传输的是“用户数据报”。请与网络层“IP数据报”区别开。
2、图示:
在下图中,TCP报文段首部的“序号”标识了分段的报文段序号,而UDP中没有分段,也就没有“序号”。
IP数据报首部以“标志”和“片偏移”来标识分片信息。
3、详解:
(1)分组
在通信过程中,通信双方以分组为单位、使用存储-转发机制实现数据交互的通信方式,被称为分组交换(packet switching)。其他网络核心交换方式有报文交换、电路交换。
分组交换也称为包交换,它将用户通信的数据划分成多个更小的等长数据段,在每个数据段的前面加上必要的控制信息作为数据段的首部,每个带有首部的数据段就构成了一个分组。
每个分组通过通信链路和分组交换机(packet switch)传送,分组交换机主要有两类:路由器和链路层交换机。
刚好可以看出,如果要利用分组交换,在网络层利用路由器传送可能需要上层先分段,在数据链路层利用交换机传送需要上层先分片。
(2)TCP分段
(1)序号(seq)
由于TCP存在分段,传输时无法保证每一段都按顺序到达,需要对每一段进行编号,接收时重组。TCP首部存在的序号字段便是对每段的一个标号。
TCP序号分为字节序号和报文段序号,字节序号是对传输中每个字节进行的编号,报文段序号采用报文段首部第一个字节的字节序号作为标号。
例如报文长度为50,000B,字节从0开始编号的话字节序号就是0~49,999,若MSS为1000B,就分为每段1000B,一共分了50个报文段,每段采用段中首字节的字节序号作为段序号,第一段序号就是0,第二段是1000,第三段是2000,以此类推。
实际上字节往往不是从0开始编号的,而是从一个初始序号 ISN(Initial Sequence Number)开始的。ISN可以理解为随机分配的(不固定为0或1可以避免黑客攻击或者之前相同端口号迟到的数据混淆),它告诉对端,自己的第一个报文段是谁!而三次握手的目的,就是为了确认彼此的初始序号。
(2)确认号(ack)
TCP首部还有确认号。
在 TCP 协议中,一般采用累积确认的方式,即每传送多个连续 TCP 段,可以只对最后一个 TCP 段进行确认。对方通过回复一个确认号,来表示确认已经接收到了哪个 TCP 段。
比如发送方发送了一个报文段序号为 301 的 TCP 段,这个段携带了 100 字节数据,则接收方应当回复的确认号是 401,它表示接收方已经收到了字节序号为 [0, 400] 的数据,现在期望你发送字节序号为 401 以及以后的数据。
参考文章:https://blog.****.net/q1007729991/article/details/69261780
(3)IP数据报分片
把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机。
图中第二行的标志、片偏移代表分片信息,除了这些信息以及影响到的检验和等信息之外,其他信息每一片都相同。
(1)标志:在IP数据报头部有一个叫“标志”的字段,用3位二进制数表示:
未使用是保留位;
不分片DF(Do not Fragment)标志如果被置1,则数据报在传输过程中不能被分片;
片未完MF(More Fragment)标志如果被置1,说明该数据报不是分片后的最后一个数据报,最后一个数据报的该位被置0。
(2)片偏移:IP数据报被分片后,各片数据区在原来IP数据区中的位置用13位片偏移来表示。上图中分片1的偏移为0;分片2的偏移为600;分片3的偏移为1200实际在IP地址中,由于偏移是以8个字节为单位进行计算的,因而在IP数据报中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。
参考文章:https://blog.****.net/wangzhen209/article/details/74453548
二、可靠传输
1、可靠传输位于哪一层的问题?
有些书把可靠传输放在传输层,有些放在数据链路层。经查给出的一种解释是:
早期链路质量过差,为保证数据链路层的传输质量,在数据链路层上加上可靠传输。之后链路质量较好,便将此功能放在传输层。两种说法都可以。
2、可靠传输与差错检验
可靠传输就像寄快递时有人代收,此人先检查数据是否是无误的,无误时交付给收件人,收件人收到的绝对就是正确的,可以完全接受。
差错检验是收件人直接收到了快递,不保证绝对正确,收件人是有可能发现有错误的,不一定对收到的东西进行接收。
3、下层协议是不可靠的,如何保证可靠传输?
TCP协议是可靠的,UDP协议是不可靠的,IP协议是不可靠的。所以可靠传输都要由TCP来保证。TCP有:
1)面向字节流和缓存机制,2)超时重发和确认机制,3)检验和机制,4)字节编号机制,5)自动丢弃重复机制,6)流量控制
来保证可靠传输。
传输层保证了两个进程之间的通信,保证交付给应用层的数据无错,下层出现问题也没有关系,自下而上传回传输层还要校验。
举个例子,就像两个秘书把文件交给BOSS之前先电话通气检查有没有错,这样底下跑腿邮递的人即使出错了也不至于BOSS会收到错误文件,即BOSS收到的是可靠的,完全无错的。
这样也可以从另一个方面理解可靠传输与差错检验:
差错检验是每一个跑腿邮递的人收到文件后都与上一个人手里的备份进行比对,看是不是出现错误。
可靠传输是在交付之前两个秘书直接通话比对文件是否有误。
即可靠传输是端到端的,差错检验是点到点的。
参考文章:https://www.zhihu.com/question/39324847
。。。。。。