当输入一个 URL,实际会发生什么? (6)

但不能每次通信之前都去经历一次请求-应答过程,在成功地接收到应答之后,IP和MAC地址的映射关系就会缓存在ARP缓存表中,有效期一般为20分钟,便于网络层下次直接进行封装,所以,完整的过程应该是:
IP层接收到TCP分组后,发送或者封装之前,通过查询路由表:

当目标IP和自己在同一个网段时,先去ARP缓存表里找有没有目标IP对应的MAC地址,有的话交给链路层进行封装发送出去。如果缓存表内没有,进行广播,获得MAC地址后缓存起来,IP层再对TCP进行封装,然后交给链路层再封装发送出去。

当目标IP和自己不在同一个网段,需要将报文发给默认的网关。如果ARP缓存表中有网关IP对应的MAC地址,那么交给链路层进行封装发送出去。如果没有,进行广播,获得地址后缓存起来,IP层再对TCP进行封装,然后交给链路层再封装发送出去。

以太网数据帧

上面所有东西都准备好了,封装发送的其实是以太网数据帧。以太网目的地址、以太网源地址、帧类型这三者组成了帧首部。在首部之前还会插入前同步码和帧开始定界符,告知接收端做一些准备工作。帧检验序列 FCS被添加进尾部,用来检测帧是否出错。

结构

在这里插入图片描述


前同步码:协调终端接收适配器的时钟频率,让它与发送端频率相同。

帧开始定界符:帧开始的标志,表示帧信息要来了,准备接收。

目的地址:接收帧的网络适配器的MAC地址,接收端收到帧时,会首先检查目的地址与本机地址是否相符,不是的话就会丢弃。

源地址:发送端设备的MAC地址。

类型:决定接收到帧之后将数据交由那种协议处理。

数据:交给上层的数据。在本文的场景中指IP数据报。

帧检验序列:检测这一帧是否出错,发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算 CRC,与 FCS 字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧。
传输和接收

接收到上层传过来的数据报之后,根据MTU以及数据报大小来决定是否分割成小块,也就是IP数据报被分片的过程。

把数据报(块)封装成一帧,传给底层组件,底层组件将帧转换为比特流,并发送出去。

以太网上的设备接收到帧,检查帧里边的目标地址,如果与本机地址匹配,帧就会被处理,一层一层向上传递(分用过程)。

最后

一个网络请求从源端一层层封装,再到终端一层层拆分,最后的所有过程基本梳理清楚,文章只是简单梳理了一下大概流程,并且只以HTTP报文通过TCP协议经过IP传送这一过程为例,实际还有很多概念没有覆盖,比如链路层的尾部封装、 IP的动态选路、逆地址解析协议RARP、UDP协议相关的概念,建议大家可以阅读下面列出的参考资料,相信会有更多收获。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdfff.html