网络原理 | 广域网数据传输流程(DNS、NAPT、路由)
目录
NAPT
广域网数据传输流程
广域网的数据传输流程涉及到DNS、NAPT以及路由.
DNS
DNS即域名系统,它是一整套从域名映射到IP的系统.它提供了全球域名服务器(根域名+子域名服务器)和各级DNS缓存,构成了多个根节点的树形结构
域名是一个字符串,例如www.baidu.com
网络通信在发送数据时,如果使用目的主机的域名,需要先通过域名解析查找对应的IP地址:
· 域名解析的过程,可以理解为:发送端主机作为域名系统树形结构的一个子节点,通过域名信息,从下到上查找对应IP地址的过程.如果到根节点(根域名服务器)还找不到,就找不到该主机
· 域名解析使用DNS协议来传输数据,DNS协议是应用层协议,基于传输层的UDP/TCP协议来实现
域名系统提供域名转IP的服务,发送的数据是DNS协议的数据,域名系统接收到后就返回对应域名的IP
NAPT
NAPT协议的作用是将内网IP+port转换为公网IP+port
例如局域网内的主机1对百度服务器发送数据,在这个数据传输流程中:
①主机1的下一跳设备是网关(路由器),此时路由器接收到的数据报为:协议号、源IP、源port、目的IP、目的port,这里的源ip和源port即主机1局域网的ip和port.由于目的主机需要返回响应数据,因此在经过路由器时需要将源IP和源port转换为公网IP和公网port,否则返回响应数据时,找不到对应的主机.
②上一跳是主机1到路由器,下一跳为路由器到下一跳设备,路由器再次发送数据,就会将局域网内主机ip和port修改为路由器公网ip和port.
路由,即路径规划
广域网数据传输流程
例如下图主机1发送http请求到百度服务器:www.baidu.com
根据DNS协议,将域名转换为IP,目的IP为110.242.68.3,目的端口为80
①从上到下对请求进行封装,经过应用层时对其加上http协议首部、经过传输层时对其加上TCP协议首部(包含源端口和目的端口)、经过网络层对其加上IP协议首部(包含源IP和目的IP)、经过数据链路层时将其封装成以太网帧
②判断目的主机是否和本主机在同一个网段,如果在同一网段,就和局域网数据传输一样,如果不在同一网段就交给网关设备来处理.
· 找到与本机相连的网关设备IP,根据ARP协议,主机1查询本机ARP缓存表,根据网关IP来查找对应的MAC地址
· ARP缓存表找到网关MAC就直接发送真实http数据报给网关(源IP、源port、目的IP、目的port、源MAC、目的MAC)
· ARP缓存表找不到网关MAC,就广播发送数据报,让网关返回自己的MAC地址给主机1,然后再封装数据发送给网关
③主机1封装好的数据报发送给网关设备先经过交换机,再由交换机转发给路由器,交换机在接收到数据报后,在MAC地址转换表中根据目的MAC查找对应的端口,找到对应端口相连的设备并发送数据.交换机接收到数据后只是简单的转发,没有涉及封装和分用.
④路由器接收到数据后对数据报进行分用、修改、封装
· 从下到上对数据包进行分用
· 根据NAPT协议,将源IP(局域网IP)转换为路由器公网IP,将源port(主机1局域网的端口)转换为路由器公网的端口
· 基于路由技术,通过路由表计算路线获取正确方向的下一个设备IP
· 通过ARP寻址,找到下一个设备的MAC地址
· 重新封装数据报并发送给下一设备
⑤之后在经过传输途中的其他设备,通过每一个设备时都需要分用解析数据报
· 从下到上分用
· 基于路由技术,通过路由表计算路线,获取正确方向的下一跳设备的IP地址
· 通过ARP寻址,找到下一跳设备的MAC地址
· 封装数据报并发送给下一跳设备(封装后的数据报源MAC为当前设备MAC,目的MAC为下一跳设备MAC)
⑥数据报到达百度服务器后,百度服务器对其接收、分用
· 数据链路层:目的MAC是我,接收
· 网络层:目的IP是我,要处理
· 传输层:根据端口找到对应的进程
· 应用层:把数据交给应用层,由应用程序根据应用协议解析
⑦返回响应数据报和请求流程一样,只是源IP和目的IP更换、源port和目的port更换
返回的过程与请求的过程基本一致,在返回响应过程中经过路由器后对数据分用、修改、封装如下图所示
NAPT反向映射:公网IP和公网端口映射局域网IP和局域网端口
之后主机1接受数据并分用
2301_79421634: 这个页面是啥呀
Li_yizYa: 首先,我刚接触,我记录下自己遇到很多报错后成功配好环境的步骤方便自己日后用。其次,和您有关系嘛
idealmu: 简直是误人企图,一句指令就完事搞得这么复杂
颠了吧你: getminecount函数那里返回值为什么还要-(8*‘0’)呢不明白,可以解答一下吗?谢谢你哦
Liuxindjd: 为什么方法2实参不能是数组啊