ARP&路由

来源:互联网 发布:网络打印机维修 编辑:程序博客网 时间:2024/06/16 04:33

主机A———— >路由器1———>路由器2————>主机B

前提:主机A和主机B不在同一个网段上,但是主机A需要和主机B进行通信;
交互过程如下:
1.首先主机A将本地的ip和B的ip封装到网络包中,然后再检查B的ip地址和本机的ip地址是否在同一个网段上,如果不在同一个网段上,就将该网络包的源MAC地址设置成本机A的MAC地址,将目标MAC地址设置成FF-FF-FF-FF,并发送一个ARP的请求,”我的ip是AXXX,谁的ip是BXXX ?告诉我一下你的MAC地址,我想与你进行通信。”(交互的主机和本机不在同一个网段,只能将数据包发送给网关。)
2.路由器接收到A发送出去的请求后,发现A要与B进行通信,必须将网络包发送给我,然后由我进行中转,于是给A发送一个响应包,响应包里面的内容带有路由器1的MAC地址。
3.主机A收到路由器1返回的响应包后,将目标的MAC地址设置为路由器1的MAC地址,并将网络包送给路由器1。
4.路由器1收到网络包后,剥离MAC层,得到源ip和目标ip,并根据目标ip查找路由表,发现要将网络包送给主机B,必须要先将网络包(将源MAC地址设置为路由器1的MAC地址,目标MAC地址设置为路由器2的MAC地址)转发给路由器2。
5.同理,路由器剥离MAC层,得到源ip和目标ip,根据目标ip查找路由表,发现目标ip和我的某某端口在同一个网段上,于是发送arp请求,”谁的ip是BXXX,告诉我一下你的MAC地址,我想与你通信。”
6.主机B收到请求包后,发现找的就是我,于是返回一个响应包,里面包含主机B的MAC地址。
7.路由器2收到该响应包后,将源MAC地址设置成路由器2的MAC地址,目标MAC地址设置成主机B的MAC地址,然后将网路包发送给主机B
8.至此,主机A已将网络包发送给了主机B

关键:
1.路由表记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的
2.IP地址和MAC虽然能为一标识某一台主机,但是两者地址缺一不可。
只知道MAC地址,人们无法知道这台机器所处的位置。
3.网络层:区分不同的计算机是否属于同一个子网路
4.端口:其实通过上面交互只能确定两个主机,但是不知道对应的应用程序(哦,来了一个网络包,是给QQ的还是给迅雷的呢?),如是伟大的科学家发明了端口号用来唯一标识应用程序的。 端口它其实是每一个使用网卡的程序的编号。 关于端口,上次有一个同事问我,是不是每一个进程都占有一个端口,哈哈,当然不是,只是那些需要进行网络通信的才会占用端口号,简答点说,就是我这个进程有数据包要通过网卡发送出去(或者接受)才会占有端口号。 再比如说:我现在有一个程序,里面就一句hello,world打印,那么请问他占用的是哪个端口号啊?呵呵。。。
5.传输层的功能:建立”端口到端口”的通信。
6.网络层的功能:建立”主机到主机”的通信。

1 0