Created
September 16, 2016 01:40
-
-
Save chenchun/80b5df795650ec4282be570e9e13ee96 to your computer and use it in GitHub Desktop.
route.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
主机1--路由器1--网络--路由器2--主机2 | |
这样的组网模型中,从主机1 ping 主机2,网络通信的基本原理是怎样的? | |
2、路由基本原理 | |
将整个ping包过程进行分解,步骤如下: | |
1)主机1发送ping包前,需要先进行arp相关操作,具体包括: | |
(1)检查dst ip和local ip,如果不是在同一个网段(本例就不是一个网段),则查看本地arp缓存,确认是否有网关(路由器1)IP对应的mac地址,如果没有,则向网关发送arp请求包。 | |
(2)本地网关收到其arp包后,回复相应的mac地址。 | |
(3)主机1收到arp回复,得到网关mac,更新相应的arp缓存。 | |
2)主机向路由器1发送ping数据包,数据包的dst IP仍为主机2的IP,但dst MAC为路由器1的MAC。 | |
3)路由器1收到该ping包后,进行如下处理: | |
(1)网卡硬件发现dst MAC就是自己,于是硬件将包收上来,并在链路层拆包后,将包上交到IP层处理。 | |
(2)IP层发现该包的dst IP不是自己,于是检查是否开启了转发(路由器肯定都开了),然后在路由表中查找相关路由。 | |
(3)找到相关路由(本案例中为到路由器2的路由)后,将数据包中的dst MAC地址修改为下一条路由(路由器2)的MAC地址(IP仍不动),然后将数据包转发到路由器2. | |
4)路由器2在收到该数据包后,进行如下处理: | |
(1)网卡硬件发现dst MAC就是自己,于是硬件将包收上来,并在链路层拆包后,将包上交到IP层处理。 | |
(2)IP层发现该包的dst IP不是自己,于是检查是否开启了转发(路由器肯定都开了),然后在路由表中查找相关路由。 | |
(3)找到相关路由(本案例中就是直连网络(或局域网))后,将数据包中的dst MAC地址修改为目的主机2的MAC地址(IP仍不动),然后通过连接局域网的网卡将数据包转发到主机2. | |
5)主机2在收到该数据包后,进行如下处理: | |
(1)网卡硬件发现dst MAC就是自己,于是硬件将包收上来,并在链路层拆包后,将包上交到IP层处理。 | |
(2)IP层发现该包的dst IP就是自己,说明包就是发给自己的,于是进一步拆包,发现是ICMP协议。将包上交到ICMP协议进行处理。。 | |
(3)ICMP协议发现该数据为echo(回应请求数据),就产生一个响应包:echo-reply,封装好后交给IP层。 | |
(4)IP层确定原来数据包的src IP为响应的dst IP,并将src IP填为自己的IP,同时dst mac填为上层网关(路由器2)的MAC(事先已经缓存,如果没有,还得先走arp请求流程),并封装成IP包交到链路层,最终通过网卡发送出去。 | |
6)路由器2会接收到响应包,然后按相同的流程将包传回到主机1. | |
注意: | |
1)网卡收包只检查MAC地址,不检查IP,因为IP是IP层的数据,网卡在链路层,IP对网卡是不可见的,网卡只能依据网络包的目的mac地址是否是自己来判断是否接收此包。 | |
2)网卡对MAC地址的检查,以及决定是否接收包,都是由网卡硬件(或固件)自己做的,跟软件无关。 | |
3)当网卡处于非混杂模式时,当网络包的dst mac不是自己时,网卡硬件会直接将包丢弃,网卡硬件只接收MAC地址是自己或广播包(这里指的是链路层的广播,mac地址为全F,如arp广播包),广播包收上来后在上层进行判断和处理;当网卡处于混杂模式时,网卡硬件会接收所有包。 | |
4)局域网内(或直连),当给网卡配置网内IP地址时,会自动添加一条相应的路由,路由的设备为连接局域网的网卡。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment