1、网络通信原理在当今的以太网络通信中,在 IP 数据包中有两个必不可少的地址,那就是IP 地址和网卡地址(即 MAC 地址),在数据包中,无论是 IP 地址还是 MAC地址,都有源地址和目标地址,因为通信是双方的,所以就必须同时拥有双方的地址!在同一 IP 网络中通信,将会发生以下事件:主机 A 与主机 B 通信,这时主机 A 肯定首先要封装这些需要发给主机 B的数据包,那么对于主机 A 来说,自己的 IP 地址和 MAC 自己肯定能够轻易得到,对于主机 B 的 IP 地址这时主机 A 也应该知道,要不然它就不清楚自己将要和谁通信,当有了自己的 IP 地址,MAC 地址以及主机 B 的 IP 地
2、址后,主机A 在数据包中可以正确地写上源 IP 地址,目标 IP 地址,接下来的工作就是写入自己的 MAC 地址(即源 MAC),最后还必须正确写入目标主机 B 的 MAC地址,可这时主机 A 才发现自己根本没有目标主机 B 的 MAC 地址,那该怎么办呢?这时主机 A 就通过比较上面已经封装好的源 IP 和目标 IP,通过子网掩码计算一下,发现源 IP 和目标 IP 恰好在同一个 IP 网络内,那么它想要得到目标主机 B 的 MAC 地址就有办法了,首先主机 A 就向本网段发过一个 ARP 请求,这个 ARP 请求包中包括主机 A 的源 IP 地址,源 MAC 地址,目标主机 B的 IP 地
3、址,而目标 MAC 地址为广播 MAC 地址(全部为 F),因为我们要找的就是目标 MAC,所以这里用广播 MAC 地址,又因为是以太网,所以整个局域网的所有主机都能收到这个请求 MAC 地址的数据包,当然主机 B 也能收到,因此在主机 B 收到此 ARP 请求后,立即构建一个包括自己的 MAC 地址的 ARP回应包,回应给主机 A,当主机 A 收到这个 ARP 回应后,终于完成了找寻目标 MAC 的重大任务,从而把目标主机 B 的 MAC 地址正确封装进上面还未封装结束的正准备发给主机 B 的数据包,在这时,源 IP 和源 MAC 以及目标 IP和目标 MAC 都已正确存在于数据包中,那么这
4、里主机 A 向网络内发出这些数据包,因为目标地址在本网段,所以本网段所有主机都能收到这个数据包(这是以太网的特性),最后只有真正的目标主机 B 能够打开这些数据包,在此,同网段两台主机之间的通信就此圆满结束!在这里应该注意另外一个问题,因为主机 A 要寻找的目标主机 B 在同一网络,所以主机 A 能够通过 ARP 得到目标主机 B 的 MAC 地址,从而完成通信,当主机 A 在封装数据包时检测到目标主机并不在本网段,在这时,数据包不能把目标主机的 MAC 地址顺利封装进去,那么就用到另一种方法,那就是网关,主机 A 在准备发向主机 B 的数据中,封装好自己的 IP 地址和 MAC 地址,同时也
5、封装好目标主机 B 的 IP 地址,数据包封装到这里,主机 A 就利用上面得到同网段目标主机 B 的方法去请求得到网关的 MAC 地址,同样也是用 ARP 去广播,因为网关必须和本机在同一网段,理所当然,网关能够收到这个 ARP 请求并能正确回应给主机 A,这时主机 A在数据包中封装好自己的 IP 地址和 MAC 地址,同时也封装好目标主机 B 的 IP地址和网关的 MAC 地址,把数据包从网卡发出去,因为目标 MAC 是网关的,所以网关收到这个数据包后,发现目标 MAC 是自己,而目标 IP 却是别人,所以它不可以再往上打开这个数据包,它要做的工作就是把这些数据包发给下一跳路由器(如果网关自
6、身就是一台路由器的话),如果网关是一台普通 PC,那么它就发给路由器,让路由器把这些数据包正确传输到远程目标网络,到达远程网络后,它们的网关再将数据包发给数据包中的目标 IP,即源主机 A 苦苦寻找的目标主机 B,从而真正结束不同网络之间的通信,回应的数据包也是用同样的方法到达目的地,在这里,还需要注意的是,当网关把数据包发给下一跳路由器时,这个数据包必须由网关把目标 MAC 改成下一跳路由器的 MAC 地址(通过 ARP 得到),否则下一跳路由器收到目标 MAC 不是自己的数据包,会丢弃不予理睬,下一跳路由器再发给下一跳路由器同样要把目标 MAC 地址改为下一跳路由器的 MAC 地址再发出去!最后还可以总结出:在网段通信时,数据包中的地址就是源 IP,目标 IP,源 MAC,目标 MAC,根本用不到网关,而当检测到需要把数据包发到远程网络时,这时,目标 MAC 就必须改变了,在还没有出内网时,目标 MAC 必须写成网关的 MAC 地址发出去,当网关收到时,再把目标 MAC 地址改成下一跳的MAC 地址发出去,而源 IP 和源 MAC 以及目标 IP 不曾改变,就算到达了公网上,目标 MAC 仍然在不断改变着,直到最后,这个数据包到达目标 IP 的网络,最终通信结束!