很多时候我们会发现,有时候学习过程中,大家对于整体的数据包流程没有一个明确的思路,今天我们来好好聊一聊数据在网络中,是如何传递的。

PC1 地址192.168.1.100/24,网关地址192.168.1.1----也就是路由器f0/0口的地址;

PC2地址172.16.1.100/24,网关地址172.16.1.1----也就是路由器f1/0口的地址。

下面从OSI七层模型对数据包进行封装,封装完毕通过物理线路发送出去,结合路由器交换机工作原理进行描述:

1、PC1在应用层发起个目标IP为172.16.1.100的Https请求。

2、传输层(TCP层)接到上层请求的数据,将数据分段并加上传输层报头(也就是TCP包头,目的端口号为443)。下传到网络层。

3、网络层接收来处上层的数据后,根据IP协议(三层)进行封装,添加PC1的IP为源IP为和PC2的IP为目标IP后封装成数据包,同时协议号位6(TCP的协议号,标识包头里面是TCP的内容)。下传到数据链路层(二层),因PC1 IP与PC2 IP不在同一网段,所以数据包将发往网关路由条目的下一跳,也就是路由器G0/0/0/口。

4、数据链路层接收网络层封装好的数据包后,继续进行封装帧头,添加源MAC地址为PC1的MAC地址,目标MAC地址则查询自己的ARP缓存表以获取网关MAC地址(路由器G0/0/0口的MAC)。如果PC1 ARP缓存表中没有网关对应的MAC地址,则PC1发出一个ARP广播报文。ARP报文中源MAC地址为PC1 MAC地址,所要请求的是网关IP对应的MAC地址.

5、交换机SW1从G0/0/1接收到ARP广播帧后,检查自己ARP缓存表中是否有与G0/0/1口相对应PC1的MAC地址。没有,则将PC1MAC地址与G0/0/1接口对应起来,存储到交换机SW1的ARP缓存表中。然后将该ARP请求报文进行除G0/0/0口以外的其他所有端口进行泛洪。

6、Router收到ARP广播后,进行解封装,发现所要请求的MAC地址是自己的。则Router将PC1的MAC地址写入ARP缓存表中。然后向 PC1发送一个ARP单播回应。该单播消息包括目标IP为PC1 IP,目标MAC为PC1 MAC地址,源IP为Router的G0/0/0口IP,源MAC为 Router的G0/0/0的MAC。

7、交换机通过G0/0/2口收到ARP单播帧,交换机同样检查MAC表,然后将G0/0/2口与Router的G0/0/0(ARP单播包里面的源MAC)的MAC地址对应起来,存入MAC缓存表中,然后转发该帧。

8、PC1接收到Router的ARP应答帧后,将Router的G0/0/0的MAC地址存入ARP缓存中(缓存默认4个小时超时),并将Router的G0/0/0的MAC地址作为目标地址封装到数据帧中。发给下层(物理层)进行网络传输。

9、Router的G0/0/0接收这个帧后,看目标mac地址是否指向自己。是,则将帧头去掉,然后检查目标IP地址,发现这个目标IP不是自己,刚不再进行解封装。

10、Router在自己的路由表中检查自己的是否有去往目标地址的路由,没有则丢弃该帧。有,路由器经检查发现是去往与G0/0/1口直连的网段。则路由器对数据包进行二层封装成帧,源IP为PC1的IP,源mac地址为Router G0/0/1口的MAC地址,目标IP为PC2的IP,目标MAC地址则检查自己的ARP缓存表获取。如果没有,则发送ARP请求报文(这里就不再描述ARP请求过程了)。

11.Router把二层帧封装完毕,完后把数据帧发给SW2,SW2查看MAC地址表,根据之前ARP的映射缓存表项通过G0/0/1口转发数据帧。

12.PC2收到数据帧拆开最外面的帧头,一看目的MAC是自己,他继续拆IP包头

15、PC2拆开IP包头,发现目标IP和自己匹配,则继续拆封装,发现IP里面协议号是6,代表是TCP的数据,将数据向上层传输。

16、传输层(TCP)接收来自下层的Https请求TCP报文,则去掉TCP报头,向应用层传送。

17、应用层收到Https请求后,发送一个Https回应报文给PC1

回来的时候同理,这里就不再赘述了。

这就是数据在整体的数据中的传递,欢迎关注我,看最新的技术文章更新。

uni-app网络请求封装_网络工程师必懂篇·数据的传输流程相关推荐

  1. python 大量网络请求失败_网络请求异常拦截优化

    public class ExceptionUtils { /* * 在使用Retrofit+RxJava时,我们访问接口,获取数据的流程一般是这样的:订阅->访问接口->解析数据-> ...

  2. uniapp网络请求封装;小程序请求接口封装;uni.request接口封装

    另一篇全面封装文章 资源文章下载地址 1.正常使用uni.request()发送请求(未封装) get() {uni.request({url: 'http://192.168.1.191/abc// ...

  3. 网络工程师必懂的网络基础

    网络工程师必懂的网络基础 目录 1 ip地址 1.1 ip 地址的作用?ip 地址分类? 1.2. 子网掩码的作用?默认 A B C 类子网掩码? 1.3. 网关的作用? 1.4. 公有地址与私有地址 ...

  4. vue-resource网络请求模块(安装教程) - cmd篇

    vue-resource网络请求模块(安装教程) - cmd篇 安装vue-resource 网络请求模块,用于依赖后端服务器的vuejs项目进行对服务器端数据的请求或跨域请求. cmd安装步骤: 先 ...

  5. Android OkHttp+Retrofit+Rxjava+Hilt 的网络请求封装

    今天给大家简单的封装一个现在比较流行的网络请求框架 第一步是导入我们所需要的依赖还需要在android {}闭包下添加一个 buildFeatures{viewBinding true } imple ...

  6. xUtils3.x的网络请求封装和请求https之单向SSL验证

    很久没写博客了, 自己定的路已经走歪,菜鸟的进阶之路上我只是走了一步,自从发了一篇博客之后在没有来过这里,已经有一年了吧,今天再次回到这里. 言归正传,今天要写的是xUtils3.x网络请求的封装和请 ...

  7. ios 请求失败封装_iOS重构-轻量级的网络请求封装实践

    前言 在十分钟搭建主流框架_简单的网络部分(OC)中,我们使用AFN框架顺利的发送网络请求并返回了有用数据,但对AFN框架的依赖十分严重,下面我们重构一下. 初步 很多时候,我们涉及到网络请求这块,都 ...

  8. (iOS-框架封装)AFN3.x 网络请求封装

    AFNetworking 我项目里面的网络请求是一外包大牛基于AFN2.x封装的基本网络请求,感觉其封装的贼好,对服务端返回的错误码统一处理,对返回的 json 数据下发给每个继承自基本网络请求的子网 ...

  9. Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置

    前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议使用 vue-resources ,这个 ...

最新文章

  1. Linux下关闭和开启IPv6的方法
  2. 计算机视觉开源库OpenCV之边缘检测cv2.canny()函数
  3. c# 学习笔记 (1) 类型转换
  4. Java程序员必须掌握的常用Linux命令
  5. Failed to instantiate [org.springframework.test.context.web.ServletTestExecute
  6. 突发!百度CEO李彦宏被当中泼了一瓶水,肇事者网名:直男上树
  7. 3、AngularJS2 架构
  8. air写文件 SecurityError: fileWriteResource 时报错的解决方法
  9. unity android 版本,Unity2019与Android混合开发
  10. oracle服务端导出/导入方式expdp/impdp
  11. 视频编解码发展历程(从AVC到HEVC再到VVC)(一)
  12. Oracle多层ifend嵌套,Excel IF函数以及IF多层嵌套如何使用,看完你就知道了
  13. HTML文件mhl,比HDMI更强!MHL与HDMI技术解析
  14. 一文说清MySQL索引数据结构
  15. 通过手机型号查找相应UA信息
  16. 客户端访问https时应无浏览器(含终端)安全警告信息;_(多图)老弟,你连HTTPS 原理都不懂,还给我讲“中间人攻击”,逗我吗......
  17. 照片墙------逗女孩儿开心
  18. Linux常用命令-1
  19. 为自己的snap应用添加变量
  20. Windows XP 加速

热门文章

  1. Js完美验证15/18身份证
  2. C# 结构体与类区别
  3. 第二组骆阳洋通信工程三班抓包分析
  4. nginx前言 - 负载均衡
  5. 有几款荣耀的手机支持鸿蒙,荣耀手机基本确定支持鸿蒙2.0,这些机型将可升级...
  6. 毕业论文开题报告---范文---基于Android的学生考勤管理系统的设计与实现
  7. java计算机毕业设计企业运营管理系统的设计与实现源程序+mysql+系统+lw文档+远程调试
  8. android开发常用的组件,7款Android开发者常用的Android UI组件
  9. USB 3.0 / SATA 3 速度对比
  10. 计算机键盘上除在哪里,计算机键盘上的主页按钮在哪里?主页按钮的功能