当前位置: 首页 > article >正文

网络原理 | 广域网数据传输流程(DNS、NAPT、路由)

目录

DNS

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接受数据并分用

 

 

 

 

http://www.lryc.cn/news/2417928.html

相关文章:

  • 探索前沿科技:12306 系统克隆与学习项目
  • 盘点那些不为人知却堪称神器的8款系统管理软件
  • iPhone史上最全的使用教程
  • Apache配置
  • Windows Phone 8应用开发工具特性详解
  • SetWindowsHookEx实现过程
  • 美拍解析去水印原理,sign签名算法,获得无水印播放地址
  • Win10/11系统修复不求人,FixWin11.1系统修复小工具。
  • 龙将加速浏览器_《命运2》“凌光之刻”各版本内容介绍,迅游加速流畅开玩全新DLC...
  • BUUCTF 每日打卡 2021-7-18
  • 巨丝滑 —— 自己动手撸一个图片编辑器(支持长图)
  • 2020年有寓意的领证日期_2020有寓意的领证日期 2020热门领证日期
  • 8小时理解go - 基本语法
  • PC端分享至QQ空间、新浪、微信
  • PHP实现Trim函数功能(附完整源码)
  • .net core 请求外部接口;ABP HttpClientFactory的使用
  • vuex结合mixin在实际项目中的使用(超详细)
  • 前端缓存详解
  • 学习记录333@MySQL问题之server name is already exists解决方案
  • kernel panic 分析解决方法
  • 基于Java游戏论坛平台设计和实现(源码+LW+调试文档+讲解等)
  • Picasa生成图片幻灯片页面图文教程
  • Java集合详解(超详细)
  • 什么是CSharp
  • c语言常量详细解释及简单应用
  • 入门MySQL--0基础,操作详图,简单易懂
  • CDB(ContainerDatabase)与PDB(PluggableDatabase)
  • 【EVPN】EVPN名词简介
  • java环境变量详解_JAVA环境变量配置详解
  • php中file_get_contents如何读取大容量文件