数据路由过程

2013/05/31 posted in  远古知识
  1. 如果一个mac上对应有多个ip地址,那么数据按照协议栈向下封装时,怎么确定封装ip头的时候使用哪个ip地址呢?
    这个是靠数据目的ip决定的,首先系统会根据设备的其他网段的ip和掩码确定目的ip是否是内网的,如果是则用相应的内网ip封装ip头,如果不是,就说明这个数据包时发送到外网的,这个时候就封装外网ip。并将该数据包发送给网关进行转发。
    如果把一个网段掩码改了,让这个内网变小,那么本来是用内网ip封的数据包,就会改用外网ip封装。

  2. 路由器怎么区分外网传进来的数据是给内网哪台设备的?

    通信过程要考虑传输层,传输层有端口号。比如用的TCP协议。外网C获得主机AB的IP地址都是路由器的地址说明做了nat的。你a和b同时访问C的时候 经过你内网路由器的时候是做了nat的,a的数据包出去的时候目标是C的ip和C的端口,c收到的数据包源ip会是路由的 但是源端口是XXXX ,b同时出去访问c的时候目标是C的ip和C的同一个端口,c收到的数据包源ip也是路由的,但是源端口不会是XXXX而是另外一个YYYY, 路由器做nat的时候端口不会出现重复的,并且会做对照记录,然后c在回复时候会分别回复给相同ip,但是端口是路由器的两个不同端口,然后路由两个收到两个端口数据后会比照刚才那个对照表 然后分别转发给A和B。

  3. 路由器怎么区分这个数据包是内网的还是外网的?

    这个是靠封装数据包中链路层的目的mac地址决定的,当封装的mac地址是内网mac时就说明这个数据包是发送给内网的某一台设备的,从而路由器或交换机会根据自己的mac端口映射表和背部总线,将数据包发送给对应端口。如果这个目的mac封装的是网关的mac就说明这个数据包是要发送到外网的,路由器将会根据自己的路由表将这个据包发送到下一跳。

  4. 路由器在公网下的转发数据时怎么完成的?

    内网的设备发送数据包的时候,首先要经过网关做NAT转换,即将内网ip替换成网关的ip。之后数据包在路由器之间交换的时候只需要替换目的mac即可,数据包回来的时候也可以看成是一次反向的发送,然后仍然是根据路由表替换目的mac即可。