【网络是怎么连接的】第二章(中):一个网络包的发出

本文详细介绍了网络包的构成,包括头部和数据部分,以及它们在网络中的传输过程。从TCP/IP协议的角度出发,阐述了IP头部和MAC头部的作用,以及地址解析协议ARP在确定MAC地址中的角色。此外,还讲解了网卡如何处理数据包,包括添加报头、起始帧分节符和错误检测的FCS。整个过程涉及路由表、ARP缓存表以及网络设备如路由器和集线器的工作原理。
摘要由CSDN通过智能技术生成

1. 关于网络包的基本知识

一个网络包是由头部和数据两部分组成的。头部里放着目的地址等控制信息,数据则就是我们要传送的东西。如图所示
在这里插入图片描述
控制信息(头部)用来在传输过程中告诉转发设备们,我要去往哪里。这就类似于快递包裹上的快递单一样。

2. 网络包传输的过程

对于一个TCP/IP协议产生的网络包,结构也是如此,具体长这样在这里插入图片描述

其中TCP头部我们在上一节讲过了,是由协议栈中的TCP模块加上去的。图中的IP头部和MAC头部则是由TCP下层的IP协议模块加上去的。

IP协议在在添加头部的过程中,会将要访问的服务器的IP地址写入IP头部中,这样IP协议(路由器)就可以根据这个知道包的传输方向;IP协议也会将下一个路由器的以太网地址(MAC地址)写入MAC头部中,这样以太网协议(集线器)也就知道要把包发到哪个路由器上了。

网络中的转发设备有路由器和集线器这两种,路由器是按照IP协议传输包的设备,集线器是按照以太网协议传输包的设备。路由器会根据目标地址判断下一个路由器的位置,集线器则会在子网中将网络包传输到下一个路由。

所以网络包传输的大致过程就是,包往MAC头部记载的路由器地址方向传输,到达目标路由器后,由路由器查看IP头部,对照子自己的IP表修改MAC头部中下一个路由器的地址然后将包转发出去。而集线器则通过查看MAC头部,对照自己的以太网表,将包往目标路由器传输。如此反复,直到到达最终目标服务器。

在这里插入图片描述

3. IP头部

IP头部的格式长这样

在这里插入图片描述

其中IP模块最重要的就是接收方的IP地址,这个地址由TCP模块告知IP模块,而TCP模块又是由应用程序告知的IP地址。

除此之外,还有发送方的IP地址需要填写在IP头部。对于多网卡计算机来说,IP模块需要查一下路由表,看看目标IP地址对应哪个网卡,将那个网卡的IP地址填写上去就好了。路由器里也有这张表格,原理和这里一样。

路由表可以用route print命令来查看,如图

在这里插入图片描述

图中第一列Network Destination就是目的IP地址对应的表,最后一列Interface为当前计算机所对应的网卡的IP地址。IP头部的接受方和发送方就填这俩就行。如果目的地址IP没有匹配到,默认使用第一行10.10.1.16所在的网卡发送数据。

顺带一提,Gateway表示下一个路由器的IP地址,将包发给这个IP,该地址对应的路由器就会将包转发到目标地址。MAC头部里会将Gateway的IP地址转成到对应的MAC地址存在里边。

4. MAC头部

MAC头部长这样
在这里插入图片描述

可以看出IP模块生成MAC头部的时候,要填写发送方的MAC地址和接收方的MAC地址。

发送方MAC地址还好办,直接查发送的那个网卡的ROM就知道了。接收方的IP地址就有点棘手了。

IP模块会根据路由表中的Gateway那一列的内容判断将包发给哪个转发路由器,发给谁就要找到这个IP地址对应的MAC地址。

那这个MAC地址谁知道呢?肯定是目标路由器才会知道自己的MAC地址是多少呀。所以我们需要广播一次,向同一以太网的所有设备都发一个包,这个包就是问“XXX.XXX.XX.XX这个IP地址是谁的?告诉我你的MAC地址”,然后目标路由器就会回答说“嗷,这是我的IP,我的MAC地址是……”然后IP模块收到了这个MAC地址,将这个地址填写到MAC模块中。大功告成。

这个广播的方法就是ARP,Address Resolution Protocol,地址解析协议。

当然不可能每次发包都得广播一遍,那不得累死,计算机在查询后会保存一个表叫做ARP缓存表,类似于DNS解析的缓存表,用于更快地查询到MAC地址。
想看这个表,输入arp -a。

在这里插入图片描述
至此,IP模块已经完成了它的包封装任务,现在是时候将数据交给网卡了。

5. 网卡所做的工作

网卡将协议栈处理好的数据包从内存复制到自己的网卡内缓冲区中,然后向网卡内部的MAC模块发送发送包的命令,然后MAC模块就要开始工作了。

MAC模块会将包的开头加上报头和起始帧分节符,然后在末尾加上用于检测错误的FCS(桢校验序列),加上后,网络包如图

在这里插入图片描述

报头里是用于同步波形的时钟,有了它,接收方才知道如何正确读取接下来的数据。而起始帧分节符则用于提醒接收方,这里之后就是数据本体了,你要注意接收。大致内容如图,意会即可
在这里插入图片描述

结尾的FCS是用来检查包传输过程中数据有没有损坏的,FCS里边有一个很复杂的公式,类似于CRC错误校验。如果数据包有出错,计算出来的东西就会不一样。这样接收方就可以判断传输的数据有没有错误。

加完这些头部后,MAC模块就将数据包转换成通用电信号,然后由PHY(MAU)模块转换成可在网线中传输的形式,然后通过网线发出去。至此,一个网络包终于发出去了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值