VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > python爬虫 >
  • 以太网传输

 本站原创,未经许可禁止转载


在TCP head里包含了发送消息的应用的端口号以及接收方应用的端口号

IP头部里包含本地IP以及接收方IP等信息传递

以太网头部包含双方的MAC地址

ARP同个网段下的工作原理
每台主机均有ARP缓冲区,缓冲区中有一个ARP列表,以表示IP地址和MAC地址的对应关系。
当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机IP地址对应的MAC地址。

此ARP请求数据包里包括源主机的IP地址、MAC地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中;如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

例如: 

A的地址为:IP:192.168.10.1 MAC: AA-AA-AA-AA-AA-AA 
B的地址为:IP:192.168.10.2 MAC: BB-BB-BB-BB-BB-BB 


根据上面的所讲的原理,我们简单说明这个过程:A要和B通讯,A就需要知道B的以太网地址,于是A发送一个ARP请求广播(谁是192.168.10.2 ,请告诉192.168.10.1),当B收到该广播,就检查自己,结果发现和自己的一致,然后就向A发送一个ARP单播应答(192.168.10.2 在BB-BB-BB-BB-BB-BB)。

网络中的通信,可以作快递转发作为演示
1、同网段主机间通信
主机A与主机B通信,即主机A封装要发给主机B的数据包具体操作:
首先主机A就向本网段发过一个ARP请求,这个ARP请求包中包括
A  IP和Mac地址
B IP和Mac广播地址(全是F)
过程 中局域网中所有主机均收到消息,当指定IP的主机收到数据包后会返回一个包含自身Mac地址的应答数据包,主机A收到这个ARP回应后;从而把目标主机B的MAC地址正确封装进上面还未封装结束的正准备发给主机B的数据包主机A向网络内发出这些数据包,因为目标地址在本网段,所以本网段所有主机都能收到这个数据包(这是以太网的特性),最后只有真正的目标主机B能够打开这些数据包。

注意:不管是发送数据包,还是接收数据包,都是检查一下本主机列表(ARP列表);
ARP列表,又称之为ARP缓存表,用于存放IP到MAC地址之间的对应关系;就像是一个班级的点名表,如果找一个同学,在点名表上找不到,就是到另一个班级去找,各个班级会在自己的ARP表中查找,直到找到为止

ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。


局域网中跨网段主机间通讯
        不同网段的主机通信时,主机会封装网关(通常是路由器)的mac地址,然后主机将数据发送给路由器,后续路由进行路由转发,通过arp解析目标地址的mac地址,然后将数据包送达目的地。具体过程分析如下:


主机A在封装数据包时检测到目标主机并不在本网段,就需要引入一个新的概念网关;主机A请求得到网关的MAC地址封装好目标主机B的IP地址和网关的MAC地址;当网关收到数据包之后,发现封装的Mac虽然是自己,但IP不是自己的,从而读取数据,而是将数据包转发给下一个路由器(如果网关自身就是一台路由器的话),如果网关是一台普通PC,那么它就发给路由器,路由器将这些数据包正确传输到远程目标网络,到达远程网络后,网关再将数据包发给数据包中的目标IP,即源主机A找的目标主机B,回应的数据包也是用同样的方法到达目的地

注意:数据包中的地址就是源IP,目标IP,源MAC,目标MAC,同网段根本用不到网关,而当检测到需要把数据包发到远程网络时;目标MAC在还没有出内网时,目标MAC必须写成网关的MAC地址发出去;当网关收到时,再把目标MAC地址改成下一路由器MAC地址发出去,同时源MAC地址要始终保持为发出端口的MAC地址(回应报文可以依靠它路由回去),而源IP及目标IP不曾改变,用于判断收到数据包的本机IP和数据包IP是否一致,若一致不转发



相关教程