04 - 两个ip如何通信?

1 两个ip如何通信?


1)如果,目标IP地址是本地地址(本机),就送回本地上层处理,根本不会发到网卡去。

2)如果,目标IP地址是同一网段中的其它地址,查ARP表,找到目标IP对应的MAC地址,如果ARP缓存里没有,发ARP请求去获取,把MAC地址填写到报文里发送出去,如果找不到对应的ARP项,就会发送失败。注意:报文是要靠MAC地址才能找到目标主机的。

3)如果,目标IP地址不在同一网段,将路由器上gateway的MAC地址作为目标MAC地址发送



注意下:

  • 获取目标设备的MAC地址时,使用的是二层广播,和IP地址是否为同一个网段并没有任何关系, 一旦得到了目标设备的MAC地址,有可能就在本地的arp缓存中,就能进行数据链路层之间的通信了,因此,网关和目标IP地址不在同一个网段下是没有问题的。
  • ip层是第三层,mac层是第二层,低层为高层服务,数据包的传送过程就一个"打包-拆包"的过程。
  • 主机进行通信传送数据时,网络层将应用数据封装成IP包,数据链路层封装成帧,根据MAC地址,发送数据。


主机通信示意图:
04 - 两个ip如何通信?_第1张图片

根据上面的网络架构图,我们来分析下面两种场景的主机通信过程:

  • 同一广播域内,两台主机通信过程(二层)
  • 跨路由的数据传输过程(三层)

1.1 同一广播域内,两台主机通信过程(二层)

1)N0与N1进行通信,N0知道N1的IP地址,不知MAC地址,N0发送ARP广播(目标MAC: ff:ff:ff:ff:ff:ff)请求给同一广播域中的所有成员

2)当SW0从主机的接口上接收到这个广播包,读取帧源的MAC地址和目标MAC地址,将N0的MAC地址与之相对应的接口放入MAC地址表,从别的接口广播这个数据帧,当别的主机收到这个广播时,查看目标IP不是自己的,就会丢弃此包。如果,N1接收到这个数据帧,它检查目标IP和这个的IP是一样的,就会回应这个ARP请求,把自己的IP和MAC封装成源IP和源MAC,N0的IP和N0的MAC地址为目标IP与目标MAC,并记录N0的MAC与IP,放进自己的ARP缓存表中。

3)这个应答包经过交换机SW0时,它又会检查源MAC、目标MAC,把N1的MAC和自己接口2放进MAC地址表中,再查看自己的MAC地址表,发现存在目标MAC与自己的接口1对应(由于刚开始有记录过N0的MAC),那它就会直接把这个应答包从接口1送出去了。

4)主机N0收到这个包后发现目标MAC是自己,就会处理这个包。并把N1的MAC与IP放进自己的ARP缓存表中。这时主机N0就知道N1的MAC地址了,以后要发送数据,就直接把N1的IP与MAC封装进帧中进行点对点的发送。

5)同一广播域中,包的源IP、目标IP,源MAC、目标MAC是真实的两台主机上的IP与MAC地址。


1.2 跨路由的数据传输过程(三层)

1)当N0要和N2通信时,此时N0会检查N2的IP地址跟自己是否处在同一网段,发现N2和自己处在不同网段,所以,N0会把数据包发给它的网关,也就是R0这个路由器上的F0/0接口,源IP和源MAC地址是N0自己的,目标IP是N2的,目标MAC是R0上接口F0/0的(注意这里,源ip、目标ip没变,源MAC没变,目标mac变成R0的F0/0接口的MAC了)(另外,如果N0不知道F0/0的MAC,就会跟情景一相似,发个ARP广播来得到F0/0的MAC地址)。

2)当这个数据包到达R0时,检查MAC地址,发现目标MAC地址是自己的,于是拆除二层报头,分析ip报头,路由器R0会查看目标IP是不是自己,由于目标不是自己,就会查看自己的ip路由表,找出到达N2网段的路由,如果没有相关条目,就直接丢弃(不会像二层那样进行广播吗?要知道,广播只有二层的,而且,路由器等三层设备之所以能够隔离广播风暴,就是因为路由器通过判断目的IP与自己端口的IP是否一致,不一致就丢掉这个包,)。当查看路由表后发现到达N2网段的出接口是F0/1,下一跳IP是R1的F0/1接口,于是把数据包转到R0的F0/1接口上,再由R0的F0/1接口传给R1的F0/1接口。这个过程,数据包的源IP是N0,源MAC是F0/1,目标IP是N2,目标MAC是R1的F0/1的MAC。(注意这里,源ip、目标ip没变,源MAC变成R0的F0/1接口的MAC了,目标MAC变成R1的F0/1的MAC了)。

3)当R1收到这个数据包后,检查MAC地址,发现目标MAC地址是自己的,于是拆除二层报头,分析ip报头,同样也要检查包的目标IP是否是自己,由于目标不是自己,它会主动查找自己的路由表,发现目标IP跟自己F0/0接口处在同一网段,于是就把包传到F0/0接口上去发给N2,假如R1上的ARP缓存表中没有N2的MAC,则R1的接口F0/0会发送一个ARP广播给跟它相连的广播域中,这个ARP广播包的源IP是接口F0/0的IP,源MAC也是F0/0的MAC,目标IP是N2,目标MAC为N2;假如N2的MAC地址已经在R1的ARP缓存中了,那就会直接把数据包封装成:源IP为N0,源MAC为R1的F0/0,目标IP为N2,目标MAC为N2。(注意这里,源ip、目标ip没变,源MAC变成R1的F0/0接口的MAC了,目标MAC又变回N2的MAC了)主机N2收到这个包后发现目标MAC是自己,于是拆除二层报头,分析ip报头,发现ip是自己,就会处理这个包,处理完成后,将源ip变为目标ip,目标ip变为源ip进行封包,然后根据主机的路由进行回包。


注意:

  • 跨路由中(或者说跨网段),包的源IP、目标IP始终不会发生变化,源MAC、目标MAC根据所经过的路由接口不同而发生相应变化。因此,我们说:二层为三层提供传输服务,二层数据帧,三层数据包。
  • 路由表存储的信息:目的网段 下一跳ip 出端口

你可能感兴趣的:(基础网络知识,tcp/ip,网络,网络协议,运维)