在任何一台机器上,当要访问另一个IP地址时,都会先判断,这个目标IP地址,和当前机器的IP地址,是否在同一网段,怎么判断同一网段?需要CIDR和子网掩码。
如果在同一网段,那就没网关什么事了,直接将源地址和目标地址放入IP头,然后通过ARP获MAC目的地址,将源MAC和目的MAC地址放入MAC头中,发出去就可以了
如果不在同一网段,这就需要发往默认网关。网关的地址一定和源IP地址时一个网段的。往往不是第一个就是第二个,列如192.168.1.0/24这个网段,网关往往是192.168.1.1/24或者192.168.1.2/24
如何发往网关呢?网关和源IP地址时一个网段,这个过程就和发往同一个网段的机器是一样的,将源IP和目标IP地址放入IP头,通过ARP获取网关的MAC地址,然后将源MAC地址和目标的MAC地址都放入MAC头中,发送出去。接下来怎么做就看网关了
网关往往是一个路由器,一个三层转发设备,就是把MAC头和IP头都取下来,然后根据里面的内容,看看接下来把包网哪里转发的设备
路由是一台网络设备,他有多张网卡,其中一个网卡和源IP是同一个网段。当入口的网络包送到路由器时,他会根据本地的转发信息库,来决定如何正确的转发流量,这个转发信息库,通常被称为路由表
一张路由表会有多条路由规则。每一条规则至少包含三个信息
1,目的网络:这个包要去哪
2,出口设备:将包从哪个口丢出去
3,下一跳网关:下一个路由器地址
静态路由
在路由器上配置一条一条的规则,条到哪个网站,要从哪个出口出。
IP头和MAC头哪些变、哪些不变?
MAC地址
MAC地址值在一个局域网内才有效,所以MAC地址只要过了网关,就必定会改变
主要区别就是IP地址是否改变
IP地址不变,称为NAT网关
服务器A要访问服务器B。首先,服务器A会思考,192.168.4.101和我不是同一个网段,因而需要先发给网关,那网关是谁呢?已经静态配置好了,网关是192.168.1.1。网关的MAC地址是多少呢?发送ARP获取网关的MAC地址,然后发送包,包的内容是
源MAC 服务器A的MAC地址
目标MAC 192.168.1.1这个网口的MAC
源IP 192.168.1.101
目标IP 192.168.4.101
包到达192.168.1.1这个网口,发现MAC地址一致,将包收进来,开始思考网哪里转发?
在路由器A中配置了静态路由之后,要想访问192.168.4.0/24,要从192.168.56.1这个口出去,下一跳为192.168.56.2
于是,路由器A思考的时候,匹配上了这条路由,要从192.168.56.1这个口发出去,发给192.168.56.2,那192.168.56.2的MAC地址是多少呢?路由器A发送ARP获取192.168.56.2的MAC地址,然后发送包
源MAC 192.168.56.1的MAC地址
目标MAC 192.168.56.2的MAC
源IP 192.168.1.101
目标IP 192.168.4.101
包到达192.168.56.2这个网口。发现MAC一致,将包收进来,开始思考往哪里转发
在由路由器B中配置了静态路由,要想访问192.168.4.0/24,要从192.168.4.1这个口出去,没有下一跳
于是,路由B思考的时候,匹配上了这条路由,要从192.168.4.1这个口发出去,发给192.168.4.101.那192.168.4.101的MAC地址时多少?路由B发送ARP获取192.168.4.101的MAC地址,然后发包
源MAC 192.168.4.1的MAC地址
目标MAC 192.168.4.101的MAC
源IP 192.168.1.101
目标IP 192.168.4.101
包到达服务器B,MAC地址匹配,将包收进来
通过这个过程可以看出,每到一个新的局域网MAC都是要变的IP地址都不变,在IP头里面不会保存任何关于IP地址,所谓下一跳是某个IP要将这个IP地址转换为MAC放入MAC头
IP地址改变,称为转发网关
IP段冲突怎么办?
A地址192.168.1.101,B地址192.168.1.101
在目标服务器B在国际上要有一个国际身份,192.168.56.2对应国内身份192.168.1.101,凡是要访问192.168.56.2,都转成192.168.1.101
于是,源服务器A要访问目标服务器B,要指定目标地址为192.168.56.2,这是他的国际身份。服务器A想,192.168.56.2和我不是一个网段,因而需要发给网关,网关是谁?已经静态配置好了,网关是192.168.1.1,网关MAC地址是多少?发送ARP获取网关地址,发送包
源MAC 服务器A的MAC地址
目标MAC 192.168.1.1的MAC
源IP 192.168.1.101
目标IP 192.168.56.2
包到达192.168.1.1这个网口,发现MAC一只,将包收进来,开始思考往哪里转发
在路由A中配置了静态路由:要想访问192.168.56.2/24,要从192.168.56.1这个出口出。没有下一跳,
路由A思考的时候,匹配上了这条路由,要从192.168.56.1这个口发出去,发给192.168.56.2。那192.168.56.2的MAC地址是多少?路由A发送ARP获取192.168.56.2的MAC地址
当网络包发送到中间局域网的时候,服务器A也需要国际身份,因而在国际上,源IP地址也不能用192.168.1.101,需要改成192.168.56.1发送包
源MAC 192.168.56.1的MAC地址
目标MAC 192.168.56.2的MAC
源IP 192.168.56.1
目标IP 192.168.56.2
包到达192.168.56.2这个网口,发现MAC一致,将包收进来,开始思考转发
路由B是一个NAT网关,他上面配置了要访问国际身份192.168.56.2对应国内身份192.168.1.101,于是改为访问192.168.1.101,在路由B中配置了静态路由:要想访问192.168.1.0/24,要从192.168.1.1这个出口去,没有下一跳
于是路由B思考的时候,匹配上了这条路由要从192.168.1.1这个口发出去,发给192.168.1.101,那192.168.1.101的MAC地址是多少呢?路由器B发送ARP获取192.168.1.101的MAC地址,然后发送包
源MAC 192.168.1.1的MAC地址
目标MAC 192.168.1.101的MAC
源IP 192.168.56.1
目标IP 192.168.1.101
包到达服务器B,MAC地址匹配将包收起来