两台PC机网线直连通信,对于初学者来说可能会很疑惑为什么能通信,或者为什么不能通信;其实主要是对主机通信原理不了解;刚好前几天遇到个网线直连的问题,顺便就写个blog,属于扫盲帖,老司机可以直接跳过...
我们知道一般主机都有三个参数: IP, 子网掩码, 网关;平时应用层通信的时候好像只用到了IP,其他两个并不怎么涉及,下面就会讲到这子网掩码和网关到底有什么用,和本文的主题有什么关系;
上图是两台主机的一般通信流程图,简要说明下:
1. 同网段的情况:
如流程图上左边的分支,因为是同网段的,所以可以通过ARP广播获取到主机B的MAC地址,获取到主机B的MAC地址后就可以直接通信了( 同一子网有对端的MAC地址就可以通信);
2. 不同网段的情况:
如流程图上右边的分支,因为是不同网段,主机A认定需要通过路由才能找到主机B,所以先找网关MAC,把arp广播包发给网关,再由网关去转发...(以下省略1000字);
再来讲一下直连主机通信的情况(其实是一样的):
同网段情况:主机A发现主机B是同网段后,直接发送ARP广播,由于没有路由器,只有一根网线连接主机B,所以ARP广播包只能发给主机B,主机B分析ARP广播包后,发现ARP包中的IP与自己的IP一致,所以就返回自己的MAC地址,这样主机A知道了主机B的MAC地址,当然就可以通信了;
不同网段的情况:主机A发现主机B是不同网段后,直接发送ARP广播给网关,但是由于只有一根网线连到主机B,主机B收到这个ARP广播包后, 发现ARP包中的IP(这个IP是主机A的网关的地址) 与自己(主机B)不一致,直接丢弃;主机A就无法知道主机B的MAC地址,当然就无法通信了。
想让直连的不同网段的AB主机通信也很简单,让主机B不丢弃主机A发的广播包就行,所以只要主机A发送的ARP包里的IP刚好是主机B的IP,而此时ARP包里的IP就是主机A的网关IP,因此只要把主机AB的网关互填对方的IP地址,双方就可以通信了。
PS: 以上流程忽略了arp表