推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

探究!一个数据包在网络中的心路历程

   2023-08-29 网络整理佚名1920
核心提示:交换机的设计是将网络包原样转发到目的地。号端口上,然后就可以通过交换电路将包发送到相应的端口了。这种情况下,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。的服务器发送一个包,这个包先到达图中的路由器。地址就是下一个路由器的地址,所以交换机会根据这一地址将包传输到下一个路由器。地址在以太网内进行两个设备之间的包传输。

假设客户端有多个网卡,就会有多个IP地址,那么IP头的源地址应该选择哪个IP呢?

当有多个网卡时,在填写源地址IP时,需要确定应该填写哪个地址。这个判断相当于在多个网卡中判断应该使用哪个网卡来发送数据包。

这时就需要根据路由表的规则来确定使用哪个网卡作为源地址IP。

在Linux操作系统中,我们可以使用route -n命令来查看当前系统的路由表。

路由表

例如,根据上面的路由表,我们假设 Web 服务器的目标地址是 192.168.10.200。

路由规则的判断

首先与第一个表项的子网掩码()进行AND运算,结果是192.168.10.0,但第一个表项是192.168.3.0,两者不一致,所以匹配失败。

并与第二个条目的子网掩码进行运算,结果为192.168.10.0,与第二个条目的192.168.10.0匹配成功,因此将使用eth1网卡的IP地址作为IP的源地址数据包头。

那么假设Web服务器的目标地址是10.100.20.100,仍然按照上面的路由表规则进行判断,判断的结果是与第三条条目匹配。

第三个条目很特别。 其目标地址和子网掩码都是0.0.0.0,即默认网关。 如果所有其他条目都无法匹配,则该行将自动匹配。 然后将数据包发送到路由器,即路由器的IP地址。

IP数据包生成

至此,网络数据包的报文如下图所示。

IP层报文

这时,加了IP头的数据包说道:“IP老大给我指路了,感谢IP层给我加了IP头,让我有了远程定位的能力!我不会害怕了。”我在网上一头雾水!可是目的地那么远,下一步该去哪里呢?

06 两点传输-MAC

IP头生成后,下一个网络数据包需要在IP头前面添加MAC头。

MAC头格式

MAC头是以太网使用的头,包含接收方和发送方的MAC地址等信息。

MAC头格式

在MAC头中,两点之间的传输需要发送者的MAC地址和接收者的目的MAC地址。

一般在TCP/IP通信中,只使用MAC包头的协议类型:

MAC发送方和接收方如何确认?

获取发送方的MAC地址相对简单。 MAC地址在网卡生产时就被写入ROM中。 只需读取该值并将其写入 MAC 标头即可。

接收方的MAC地址有点复杂。 只要告诉以太网对方的MAC地址,以太网就会帮我们把数据包发到那里,所以很明显这里应该填写对方的MAC地址。

因此,首先您必须弄清楚应该将包裹发送给谁。 您只需要检查路由表即可。 在路由表中查找匹配的条目,然后将数据包发送到列出的 IP 地址。

既然知道了要发给谁,那么如何获取对方的MAC地址呢?

不知道对方的MAC地址? 如果你不知道,就喊吧。

这时候就需要ARP协议来帮助我们找到路由器的MAC地址。

ARP广播

ARP协议会在以太网中向以太网上的所有设备广播:“这是谁的IP地址?请告诉我你的MAC地址。”

然后就会有人回答:“这个IP地址是我的,我的MAC地址是XXXX”。

如果对方与自己在同一个子网,那么通过上述操作就可以获取对方的MAC地址。 然后我们把这个MAC地址写入到MAC头中,这样MAC头就完成了。

看来每次都要广播,是不是很麻烦?

不用担心,后续的操作系统会将查询结果放到一个叫做ARP缓存的内存空间中以备将来使用,但缓存时间只有几分钟。

即发送包裹时:

查看ARP缓存内容

在Linux系统中,我们可以使用arp -a命令来查看ARP缓存的内容。

ARP缓存内容

MAC消息生成

至此,网络数据包的报文如下图所示。

MAC层消息

这时,加了MAC头的数据包非常感激,说道:“谢谢MAC老大,我知道我下一步要去哪里了!我现在有很多头兄弟了,我相信我能到达最终的目的地!” ” 带着众多团长兄弟的数据包,我终于准备出门了。

07 退出-网卡

IP产生的网络数据包只是存储在内存中的一串二进制数字信息,没有办法直接发送给对方。 因此,我们需要将数字信息转换为电信号,然后才能在网线上传输,也就是说,这才是真正的数据发送过程。

负责执行这个操作的是网卡,需要网卡驱动程序来控制网卡。

网卡驱动程序从IP模块获取数据包后,将其复制到网卡中的缓冲区中,然后在开头添加头部和起始帧定界符,并在末尾添加用于检测错误的帧校验序列。结尾。

物理层数据包

最后网卡会将数据包转换成电信号并通过网线发送出去。

唉,确实不容易。 寄包裹真的是一件很辛苦的事。 为此,一份多头数据终于踏上了寻找目的地的旅程!

08 告别-开关

我们来看看数据包是如何通过交换机的。 交换机旨在将网络数据包按原样转发到目的地。 交换机工作在MAC层,也称为二层网络设备。

交换机的收包操作

首先,电信号到达网线接口,交换机内的模块接收到,然后交换机内的模块将电信号转换为数字信号。

然后通过数据包末尾的FCS检查错误,如果没有问题则放入缓冲区。 这部分操作与计算机的网卡基本相同,但交换机的工作方式与网卡不同。

计算机的网卡本身有一个MAC地址,通过检查接收到的数据包的接收方MAC地址来判断是否是发送给自己的,如果不是发送给自己的则丢弃; 相对而言,交换机的端口不会检查接收者的MAC地址,而是直接接收所有数据包并将其存储在缓冲区中。 因此,与网卡不同,交换机上的端口没有 MAC 地址。

报文存入缓冲区后,需要检查MAC地址表中是否记录了报文接收者的MAC地址。

交换机的MAC地址表主要包含两部分信息:

交换机MAC地址表

例如,如果接收到的数据包的接收者的MAC地址是00-02-B3-1C-9C-F9,则与图中表格中的第三行匹配。 根据端口栏的信息可以知道该地址位于3端口,然后可以通过交换电路将数据包发送到相应的端口。

于是,交换机根据MAC地址表查找MAC地址,然后将信号发送到相应的端口。

当MAC地址表找不到指定的MAC地址时会发生什么情况?

在地址表中未找到指定的 MAC 地址。 这可能是因为该地址的设备还没有向交换机发送数据包,或者该设备已经有一段时间没有工作并且该地址已从地址表中删除。

在这种情况下,交换机无法确定数据包应该转发到哪个端口,而只能将数据包转发到除源端口之外的所有端口,无论设备连接到哪个端口都可以接收到数据包。

这样做没有问题,因为以太网被设计为通过网络发送数据包,然后只有适当的接收者接收该数据包,而其他设备则忽略该数据包。

有人会说:“这样会发送冗余数据包,会不会造成网络拥塞?”

其实不用太担心,因为目标设备发送数据包后就会做出响应。 只要返回响应数据包,交换机就可以将其地址写入MAC地址表中,下次就不需要将数据包发送到所有端口。

在局域网中每秒可以传输数千个数据包,多一两个数据包也没什么大不了的。

此外,如果接收方 MAC 地址是广播地址,则交换机会将数据包发送到除源端口之外的所有端口。

下面两个是广播地址:

数据包由交换机转发并到达路由器,准备离开本机子网。 这时,当数据包和交换机分开时,他们说:“谢谢交换机兄弟帮我转发到出口门口,我要去远方旅行了!”

09 出口门 - 路由器

路由器和交换机的区别

通过交换机后,网络数据包现在到达路由器,并转发到下一个路由器或目标设备。

这一步转发的工作原理和交换机类似,也是通过查表来判断报文转发的目的地。

但在具体的操作过程中,路由器和交换机是有区别的。

路由器基础知识

路由器上的端口有一个MAC地址,因此它可以作为以太网的发送方和接收方; 它也有一个IP地址,从这个意义上来说它与计算机的网卡相同。

在转发报文时,路由器端口首先会收到发送给自己的以太网报文,然后在路由表中查询转发目标,然后将以太网报文由相应的端口作为发送方发送出去。

路由器的收包操作

首先,电信号到达网线的接口,路由器中的模块会将电信号转换为数字信号,然后通过数据包末尾的FCS进行错误检查。

如果没有问题,检查MAC头中接收方的MAC地址,看看是否是发给自己的数据包。 如果是,则放入接收缓冲区,否则丢弃该数据包。

一般来说,路由器的端口都有MAC地址,只接收与自己地址匹配的报文,丢弃不匹配的报文。

查询路由表确定输出端口

完成数据包接收操作后,路由器将删除数据包开头的 MAC 头。

MAC头的作用是将数据包传递给路由器,接收者的MAC地址就是路由器端口的MAC地址。 因此,当数据包到达路由器时,MAC头的任务就完成了,MAC头就被丢弃了。

接下来,路由器将根据MAC头后面的IP头中的内容转发数据包。

转发操作分为几个阶段。 首先是查询路由表以确定转发目标。

路由器转发

具体工作流程以上图为例。

假设地址为10.10.1.101的计算机想要向地址为192.168.1.100的服务器发送一个数据包,这个数据包首先到达图中的路由器。

判断转发目标的第一步是根据数据包接收者的IP地址在路由表中查询目标地址列,找到匹配的记录。

路由匹配与上面提到的相同。 将每个表项的子网掩码与192.168.1.100 IP进行&AND运算后,将结果与对应表项的目标地址进行匹配。 如果匹配,则将其作为候选转发目标。 如果不匹配的话,继续与下一个条目进行路由匹配。

例如,第二个表项的子网掩码255.255.255.0与IP 192.168.1.100执行后,结果为192.168.1.0,与第二个表项的目标地址192.168.1.0匹配,与第二个表项的记录匹配条目将被用作转发目标。

当找不到匹配的路由时,将选择默认路由,路由表中子网掩码为0.0.0.0的记录表示“默认路由”。

路由器的发送操作

接下来就进入包裹的发送操作了。

首先,我们需要根据路由表的网关栏判断对方的地址。

知道对方的IP地址后,下一步就是根据IP地址通过ARP协议查询MAC地址,并将查询结果作为接收方的MAC地址。

路由器也有ARP缓存,所以它会首先在ARP缓存中查找,如果找不到,就会发送ARP查询请求。

接下来是发送方MAC地址字段,这里填写输出端口的MAC地址。 还有一个ether type字段,填写0080(十六进制)表示IP协议。

网络数据包完成后,会转换为电信号并通过端口发送出去。 该步骤的工作过程也与计算机相同。

发出来的网络数据包将通过交换机到达下一个路由器。 由于接收者的MAC地址是下一个路由器的地址,交换机就会根据这个地址将数据包转发到下一个路由器。

接下来,下一个路由器会将数据包转发到下一个路由器。 经过层层转发,网络报文到达最终目的地。

不知道大家有没有发现,在网络数据包传输的过程中,源IP和目的IP永远不会改变,但是MAC地址却永远会改变,因为MAC地址是网络中两个设备之间数据包传输所需要的。以太网。

在多个路由器的帮助下,数据包在网络世界中走过了许多距离,终于到达了目的地的大门! 城门口值班的路由器发现小哥的数据包本来是发给城里某人的,于是它把数据包发送到城里,并在城里交换机的帮助下,最终转发到了城里的人。目的地。 数据包感慨道:“感谢一路走来的各界英雄的帮助!”

10 相互剥离——服务器和客户端

当数据包到达服务器时,服务器一定是高兴的。 俗话说,有朋自远方来,不亦乐乎?

服务器很高兴,于是开始给数据包剥皮! 就像你收到了一份快递,你能不兴奋吗?

蒙皮模型

数据包到达服务器后,服务器会首先剥离数据包的MAC头,检查是否与服务器自身的MAC地址相匹配,如果匹配,则将数据包收集起来。

然后继续剥开数据包的IP头,发现IP地址匹配。 根据IP头中的协议项,我们知道上层是TCP协议。

所以,我剥掉了TCP头,里面有一个序列号,我需要看看这个序列包是不是我想要的,如果是,就把它放入缓存中并返回ACK,如果不是,就丢弃它。 TCP头中还有一个端口号,HTTP服务器正在监听这个端口号。

因此,服务器自然知道HTTP进程想要这个包,于是就把这个包发送给HTTP进程。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON