首页 > 其他分享 >网络数据转发的过程

网络数据转发的过程

时间:2023-04-20 18:01:18浏览次数:30  
标签:封装 IP 网络 MAC 转发 地址 数据 路由器

前言

TCP/IP协议簇和底层协议配合,保证了数据能够实现端到端的传输。数据传输过程是一个非常复杂的过程,例如数据在转发的过程中会进行一系列的封装和解封装。只有深入地理解了数据在各种不同设备上的转发过程,才能够对网络进行正确的分析和检测。 

OK,下面我们进入数据转发的开始。现在你想要在你电脑(主机A)访问百度网站,你首先会打开浏览器输入网址,网址的开头都是http或者https开头的。因此你访问的是http服务器(服务器A)。使用的是http协议。

网络数据转发的过程_数据帧

TCP封装

网络数据转发的过程_封装_02

主机A把待发送的应用数据首先进行加密和压缩等操作,之后就交给传输层。因为使用的是Http协议来传输数据的。所以在传输层采取的是TCP协议来封装数据段的头部。封装时,必须填充源端口为高位随机选择的端口1027,目的端口为知名端口80,初始序列号和确认序列号字段,标识位,窗口字段以及校验和字段。然后将封装好的数据段交给网络层处理。

IP封装

网络数据转发的过程_IP_03

现在来到网络层,进行IP头部的封装。由于上层传输层使用的是TCP协议封装,所以网络层在进行IP头部封装时显示的上层协议类型是TCP协议(Protocol字段:0X06),源IP地址:10.1.1.1,目的IP地址:172.16.10.1。

如果IP报文的大小大于网络的最大传输单元(MTU),则该报文在传输中被分片处理。

Time to Live 生存时间TTL字段用来减少网络环路造成的影响。默认TTL值为255。路由器转发一个数据包时,该值会被减1,如果路由器发现该值被减为0,就会丢弃该数据包。这样,即使网络中存在环路,数据包也不会在网络上一直被转发。 

以太网封装

网络数据转发的过程_封装_04

由于源IP和目的IP不在同一个网段,所以将触发路由功能。那么在封装数据链路层的帧头时源MAC地址是源IP10.1.1.1所对应的MAC地址,目的MAC是主机A网关10.1.1.254所对应的MAC地址。

如果直接查找到对应的MAC地址,则直接进行数据链路层帧头的封装。如果未查到对应的MAC地址,就先暂停数据帧的封装,开始启动ARP广播请求网关的MAC地址,再通过ARP请求后,获取到网关的MAC地址后,就继续开始数据链路层帧头和帧尾的封装,并标准上层封装协议为IP协议。

网络数据转发的过程_数据帧_05

网络数据转发的过程_数据帧_06

数据帧转发过程

网络数据转发的过程_封装_07

网络数据转发的过程_数据帧_08

接下来就把数据帧交给物理层转化成比特流。通过传输介质将电信号发送到路由器A的0/0接口。该接口在收到电信号后,在数据连路层重新转化成数据帧,转换完成后会根据数据帧的FCS校验功能先校验该数据帧的传输完整性。如不完整,将丢弃该数据。如完整将进行下一步处理。

现在路由器先查看该数据帧中的二层头部中的目的MAC地址,由于路由器A的0/0接口MAC地址就是主机A封装的数据帧的网关10.1.1.254所对应的MAC地址,所以路由器将进一步处理,拆掉帧头帧尾,显示出数据帧中的数据包的内容,根据数据帧中标注的上层封装的IP协议来查看数据包内容,发现数据包中的目的IP地址172.16.10.1不是自己的IP地址。

网络数据转发的过程_封装_09

现在路由器就根据目的地址来查看路有表来确定转发的路径。在路由表中查到去往172.16.10.1的网段需要从E0/1口发出。所以,路由器就重新对该数据帧进行封装。帧头中的源MAC地址就是路由器出接口E0/1对应的MAC地址,目的MAC就是路由下一跳的IP地址所对应的MAC地址。通过路由器的ARP表查询获得下一跳接口即为目的IP地址所对应的MAC地址,此时路由器就重新为数据包添加一个新的帧头和帧尾,并继续转发。

数据帧解封装

网络数据转发的过程_IP_10

封装完的数据帧再次被转成比特流,通过传输介质来到路由器B的E0/1口,该接口在接到数据后重复路由器A接到数据后一系列的操作,验证数据帧的完整性,确认二层头部中的MAC地址是不是自己的,发现目的MAC地址就是自身的E0/1接口所对应的MAC地址。

网络数据转发的过程_数据帧_11

拆掉帧头帧尾,查验数据包中IP协议封装的内容,发现目的IP地址也是自身的IP地址,就再拆掉IP头部,根据标注的上层协议为TCP协议来继续处理数据段。

网络数据转发的过程_封装_12

通过TCP协议处理数据段,发现TCP头部的目的端口号是80,就把该数据交给了上层应用层的HTTP协议来处理。

数据处理完成后,响应的数据将由HTTP服务器A沿原路发出,重复以上步骤直至响应数据发送到主机A。

标签:封装,IP,网络,MAC,转发,地址,数据,路由器
From: https://blog.51cto.com/garrett/6210109

相关文章

  • Python操作Neo4j数据库使用案例
    Python操作Neo4j数据库使用案例一、数据结构二、上传数据三、清空数据库项目数据和代码  Neo4j是一个世界领先的开源的基于图的数据库。其语言操作简单直观,本文假设你已经安装好Neo4j数据库,并对知识图谱有一定的了解。Neo4j数据库的查询语言为CQL,其代表Cypher查询语言。像Orac......
  • 网络技术_第二章第一次学习
    中小型网络系统总体规划与设计基于网络的信息系统基本结构包括:网络运行环境、网络系统、网络操作系统、以及基于网络操作系统的网络数据库管理系统、网络开发工具、网络应用系统保证系统安全的网络安全系统、保证正常运行的网络管理系统网络运行环境机房和设备间、配线间电源供电网......
  • 数据中心厂商超云加入龙蜥社区,多款服务器完成与龙蜥操作系统适配
    近日,长城超云(北京)科技有限公司(以下简称“超云”)签署了CLA(ContributorLicenseAgreement,贡献者许可协议),正式加入龙蜥社区(OpenAnolis)。超云是由CEC中国电子、云基地产业基金联合注资成立的国家高新技术企业,其专注于云基础架构、云系统、云服务三大产业布局,现已形成了覆盖X86服......
  • day 09 9.1 数据解析之正则
    第三章.数据解析之正则RegularExpression,译作正则表达式或正规表示法,表示有规则的表达式,意思是说,描述一段文本排列规则的表达式。正则表达式并不是Python的一部分。而是一套独立于编程语言,用于处理复杂文本信息的强大的高级文本操作工具。正则表达式拥有自己独特的规则语法以......
  • DB2数据库安装
    DB2V10.5版本下载链接:https://pan.baidu.com/s/1OD08ozJN0melZAEIu-OD_w?pwd=g9qw提取码:g9qw《《《此版本仅用自学使用非商业版本出现问题本人不负责!!!》》》一、db2prereqcheck预检查首先进入到压缩包所在的目录,执行tar命令对.tar.gz压缩文件进行解压#解压到当前目录tar......
  • Python中保存字典类型数据到文件
    三种方法:1、在Python中使用pickle模块的dump函数将字典保存到文件中importpicklemy_dict={'Apple':4,'Banana':2,'Orange':6,'Grapes':11}#保存文件withopen("myDictionary.pkl","wb")astf:pickle.dump(my_dict,tf......
  • Request通用方式获取请求数据
    请求参数获取方式:方法一:>Get方式:>POST方式: 思考:GET请求方式和POST请求方式区别主要是在于获取请求参数的方式不一样,是否可以提供一种统一获取请求参数的方式,从而统一doGet和doPost方法内的代码。  ......
  • ViewPager2+Fragment+FragmentStateAdapter遇到系统主题更换时Fragment数据丢失
    1.问题描述:在ViewPager设置壁纸,导致Activity获取Fragment数据丢失2.解决方案:设置 vp.isSaveEnabled=false  ,设置不保存,在适配器中销毁item 引发问题:vp重建之后,会丢失之前所在的位置解决方案:Activity onSaveInstanceState中保存数据,在 o......
  • day 03 3.1 Python重要数据类型
    重要数据类型5.1、列表5.1.1、列表声明在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。列表就是这样的一个数据结构。列表会将所有元素都放在一对中括号[]里面,相邻元素之间用逗号,分隔,如下所示:[element1,element2,element3,...,elementn......
  • 数据驱动测试
    数据驱动测试老话题了,最近让同时写单接口自动化校验。但是结果不是我预期的,这里再普及一下数据驱动测试数据驱动的特点:数据驱动是指在脚本固定的情况下,根据数据的条数来决定脚本的运行次数,即有几组数据,脚本就会运行几遍。也具有将测试数据和测试用例分离特点数据驱动的优点:......