12-网关及数据转发过程
1.网关:Gateway
-
位于不同网络之间的主机需要通信,必须将数据包交给网关 (默认路由)
-
网关是一台具备路由功能的设备(路由器、三层交换机、防火墙、服务器)
-
网关地址与设备的接口地址是处于同个网络
主机经过与计算得出目的地址是否在同个网段:
同一个网段直接封装目的的MAC转发
不同网段封装网关的MAC,网关帮忙转发
数据包转发的过程中IP地址和MAC地址:
在同一个网段内的源MAC地址是不会变化,非同一个网段的源MAC地址会变化
IP地址一般不会变化,除使用NAT技术
上图中A-R4-R2-B
假设有数据帧X,传输过程中:
A到R4:MAC地址(存在的话)源地址是A,目的地址是R4;
R4到R2:MAC地址(存在的话)源地址是R4,目的地址是R2;
R2到B:MAC地址(存在的话)源地址是R2,目的地址是B;
在没有经过NAT情况下,源IP地址和目的IP地址在整个传输过程是不能改变的。
A到R4:IP地址 源地址是A,目的地址是R4;
R4到R2:IP地址 源地址是A,目的地址是R4;
R2到B:IP地址 源地址是A,目的地址是R4;
网关其实就是一条缺省默认路由;
如果要去的目标ip地址不在同一个网段,那就要先找到网关
2.数据转发过程
主机A的网关是路由器A,需要通过Http访问服务器A;服务器A的网关是路由器B;
1)传输层封装
应用层通过http协议封装,然后到下一层的传输层;
传输层使用TCP协议封装数据;
TCP协议封装需要知道:源端口号、目标端口号;
源端口号由系统随机分配,目标端口号(http服务器的端口号默认是80);
TCP协议在建立连接前需要经过三次握手:
1】客户端给服务端发同步请求,随机的序列号seqA,标识同步位SYN置1;
2】服务端收到消息后,给服务端回应,同时给客户端发送同步请求:随机的序列号seqB,确认号arkB=seqA+1,标识位ARK和SYN置1;
3】客户端给服务端发送确认请求:seqA=arkB相当于seqA加了1,确认号arkA=seqB+1,标识位ARK置1;
2)网络层
数据经过传输层的TCP协议封装后,到网络层,需要通过ip协议封装;
ip协议需要知道:源ip地址(自己的ip),目标ip地址;
如果是通过域名访问,首先要通过dns服务器拿到目标ip;
封装源IP目的IP地址,并进行与计算
3)网关
因为主机A和主机B的ip地址不在同一个网段,需要使用网关;
主机A如果配了网关,会将数据包发送给网关;
就像寄快递时将包裹交给当地的快递员;
不在同一网段,交给网关
4)网关的MAC
数据发送给网关,需要知道网关的MAC地址(数据链路层的以太网协议封装时需要目标mac)
如果主机A的缓存中没有网关的mac地址,就会发arp请求得到;
5)数据链路层封装
数据链路层使用以太网协议;
以太网协议需要知道:源mac(主机A的mac)、目标mac(网关的mac)
6)物理层
最终以光信号、电信号发送出去
7)网关对数据帧转发
网关收到数据后需要进行FCS帧校验检测,看数据是否有误;
还要检测数据目的MAC地址,看是否是网关自己,(目标mac封装在以太网头中)
数据链路层(二层)的校验通过后,开始需解封装,去掉二层的头部;
发现目的IP地址不是网关自身的地址,就是说不是给网关的,查找路由表看有没有到达目标ip的路由;
发现有路由,则需要重新打包,因为二层前面的数据都被解封装剥离掉了;
封装新的二层帧头和帧尾,并进行转发;
重新添加的以太网包头的源mac就是网关的mac;
路由器以服务器A的MAC地址作为目的MAC地址继续转发
服务器A收到,进行FCS检测,通过检测目的MAC是我的MAC,继续交给上层处理(网络层解封装)
检测目的IP地址是我,检测协议号为TCP,交给TCP
TCP检测目的端口交给HTTP
逐层解封装得到数据;
3.http请求实例
打开 浏览器,输入www.baidu.com ,回车将会发生什么事情,哪些协议,顺序如何?
封装:
HTTP->TCP->ip (目的MAC地址未知,需要DNS解析)
DNS->UDP->ip (目标DNS服务器IP地址不同网段,寻找网关) ->Ethernet II (查看ARP缓存,不存在网关MAC)
ARP->Ethernet II(请求网关MAC)
网关经过路由找到DNS服务器
HTTP->TCP->ip(需要网关)->Ethernet
4.总结
-
数据在进行二层和三层封装之前,主机需要了解那哪些信息?
A:源MAC 目的MAC 源IP 目的IP
-
当数据帧发送到非目的主机时,非目的主机将会进行什么处理?
A:检测FCS,通过检测MAC发现不是我的MAC丢弃
-
传输层如何准确的将数据交给特定的应用?
A:根据目的端口
-
当两台主机同时访问服务器的HTTP服务,该服务器如何区分数据属于哪个会话?
A: 不同网络时,检测目的IP地址和MAC地址
同一网络时,检测目的端口号