网络前三层(物理,数据链路层,网络)数据包传输过程

2023-10-28

起始

起始:我就是一台电脑A

在这里插入图片描述

有一天,突然另一台电脑B想和我进行通话·,于是我们各自开了个网口,用一根网线连接起来,这样就可以进行通信了,至于为什么可以,还要研究io,中断…,反正现在可以进行通信了

在这里插入图片描述

第一层:物理层(hub)

有一天又来了一位C,每个人开两个端口就可以通信了

在这里插入图片描述

随着越来越多的人加入,网口开的太多了,太乱,理论可行,实际不可行。

在这里插入图片描述

于是,发明了一个中间设备,将网线都插在这个设备上,由这个设备进行转发,和原来本质上是一样的

这个设备取名集线器,仅仅是将信号转发到所有的出口(广播转发),不用做任何处理,作用就这一点,所以放在了物理层。

在这里插入图片描述

那么BCDE怎么知道A是想发给谁的呢?

这就引入了MAC地址(公民身份证)

  • A:aa-aa-aa-aa-aa-aa
  • B: bb-bb-bb-bb-bb-bb
  • C: cc-cc-cc-cc-cc-cc
  • D: dd-dd-dd-dd-dd-dd
  • E: ee-ee-ee-ee-ee-ee

现在A发数据给B:

在这里插入图片描述

B收到的数据包后,根据MAC地址判断出,这个包确实是给我的,CDE收到后,判断MAC地址和自身MAC不同,于是丢弃数据包

在这里插入图片描述

第二层:数据链路层(交换机)

上述的集线器是广播转发,可不可以单播呢?

在这里插入图片描述

交换机就出现了!!!!!!!比集线器智能一些,所以放在了数据链路层

在这里插入图片描述

  1. 交换机的内部维护者一张MAC地址表,记录每个MAC设备连接在哪个端口上
  2. 现在A想发送数据给B

在这里插入图片描述

数据包到达交换机时,查询MAC地址表,发现要从端口1发送,直接发送数据,结束。通过上述传输方式而组成的网络叫以太网

  1. 最开始的时候,MAC地址表是空的,A给B发送数据,由上图可以看出,A是从端口4发送数据的,所以MAC地址表就记录了这个信息,交换机发现地址表中没有bb-bb-bb-bb-bb-bb这个地址,于是广播发送,B做出响应,所以地址表又记录了一段数据bb-bb-bb-bb-bb-bb端口1

过程如下:

在这里插入图片描述

随着机器数量的增加,交换机的端口也不够用了,这个时候就想到,将多个交换机连接起来就可以了吧

在这里插入图片描述

最终,两个交换机将分别记录 A ~ H 所有机器的映射记录

  • 左面的交换机

    在这里插入图片描述

  • 右面的交换机

    在这里插入图片描述

但是随着时间的推移,电脑的数量在逐渐增多。

第三层:网络层(路由器)

  1. 问题的根本在于,连出去的那根红色的网线,后面不知道有多少个设备不断地连接进来,从而使得地址表越来越大。那我可不可以让那根红色的网线,接入一个新的设备,这个设备就跟电脑一样有自己独立的 MAC 地址,而且同时还能帮我把数据包做一次转发呢?这个设备就是路由器,作为一台独立的拥有 MAC 地址的设备,并且可以帮我把数据包做一次转发,因为它比交换机更智能一些,所以定义在网络层。

在这里插入图片描述

路由器的每一个端口,都有独立的 MAC 地址

交换机的 MAC 地址表中,只需要多出一条 MAC 地址 ABAB 与其端口的映射关系,就可以成功把数据包转交给路由器了

  1. 怎么把发送给 C 和 D,甚至是把发送给 DEFGH… 的数据包,统统先发送给路由器呢?

    • 假如电脑 C 和 D 的 MAC 地址拥有共同的前缀,比如分别是FFFF-FFFF-CCCC , FFFF-FFFF-DDD,那么可以将目标mac地址开头为FFFF-FFFF的全部发送给路由器,这样是不可行的,mac地址不好统一

    • 于是有聪明的人发明了新的地址(IP地址),如:

      11000000.10101000.00000000.00000001,即192.168.0.1

  2. 现在每台电脑有了两个地址(MAC,ip)

    在这里插入图片描述

如上图所示,假如我想要发送数据包给 ABCD 其中一台设备,不论哪一台,我都可以这样描述,“将 IP 地址为 192.168.0 开头的全部发送给到路由器。

在这里插入图片描述

假如A发送数据给B,由于他们直接通过交换机相连,所以直接发送,没体现网络层(交换机)的作用

在这里插入图片描述

但是如果给C发送数据,A就需要先转交给路由器,再由路由器转发给C

  1. A——>路由器

在这里插入图片描述

  1. 路由器——>C

    在这里插入图片描述

  2. A给C发送数据,怎么知道要先发给路由器呢?

    ------------------------》子网

  3. 将源 IP 与目的 IP 分别同子网掩码进行与运算,相等则是在一个子网,不相等就是在不同子网

    • A电脑:192.168.0.1 & 255.255.255.0 = 192.168.0.0
      B电脑:192.168.0.2 & 255.255.255.0 = 192.168.0.0
      C电脑:192.168.1.1 & 255.255.255.0 = 192.168.1.0
      D电脑:192.168.1.2 & 255.255.255.0 = 192.168.1.0
      那么 A 与 B 在同一个子网,C 与 D 在同一个子网,但是 A 与 C 就不在同一个子网,与 D 也不在同一个子网,以此类推。

      在这里插入图片描述

      所以如果 A 给 C 发消息,A 和 C 的 IP 地址分别 & A 机器配置的子网掩码,发现不相等,则 A 认为 C 和自己不在同一个子网,于是把包发给路由器

  4. 问题又来了,A怎么知道哪个设备是路由器呢?

    • A上面要设置默认网关,其实说数据发给路由器不够准确,应该是默认网关,对 A 来说,A 只能直接把包发给同处于一个子网下的某个 IP 上,所以发给路由器还是发给某个电脑,对 A 来说也不关心,只要这个设备有个 IP 地址就行。
在这里插入图片描述
  1. 问题继续,路由器是怎么知道C在哪里呢

    • ------------->路由表

    • 经过上述的过程A给C发送数据已经可以发送到路由器上面了,目前问题就是,路由器怎么知道的数据要从哪个端口发送出去呢?

    • 路由器收到的数据包有目的 IP 也就是 C 的 IP 地址,需要转化成从自己的哪个端口出去。这里引入了路由表

      在这里插入图片描述

      路由表就表示,192.168.0.xxx 这个子网下的,都转发到 0 号端口,192.168.1.xxx 这个子网下的,都转发到 1 号端口。

    • 路由器------>C,这里要经过交换机,发送数据需要知道MAC地址(数据链路层),这时又引入了arp(其实一开始就有)

      A不知道 B 的 MAC 地址,只知道它的 IP 地址,该怎么把数据包准确传给 B 呢?

      当A需要向B发送数据时,首先检查B主机的IP地址是否在同一子网上。如果在同一子网上,A会使用ARP协议发送一个ARP请求广播,询问B的MAC地址。B收到广播后,会通过ARP协议回复一个包含自己MAC地址的ARP响应。A接收到响应后,就可以将数据帧封装并发送到A的MAC地址。找到 192.168.0.2 对应的 MAC 地址 BBBB。这种方式就是arp协议,同时电脑 A 和 B 里面也会有一张 arp 缓存表,表中记录着 IP 与 MAC 地址的对应关系。

      在这里插入图片描述

  2. 对A来说:

    • 要知道AD的ip,c的ip
    • 通过子网掩码判断是否在同一子网
    • 在同一子网就通过arp获取对方的mac地址,直接发送出去
    • **不在同一子网,通过arp获取默认网关的mac地址直接发出去
  3. ** 对交换机来说:

    • 收到的数据必须有MAC地址
    • 通过查询MAC地址表,找到发送端口,发送数据,查不到,就通过广播的方式发送
  4. 对路由器来说:

    • 收到的数据必须有目的ip地址
    • 查询路由表,查到了就按照映射关系从指定端口发出去
    • 查不到则返回一个路由不可达的数据包
  5. 三张表:

    • 交换机中的MAC地址映射表(以太网中各节点之间通过交换机通信)
    • 路由器中有路由表,用于映射IP地址和端口(路由算法)
    • A和路由器都有Arp缓存表,表示ip与MAC地址的映射关系(arp请求)
  6. 网络拓扑图在这里插入图片描述

路由器 1 连接了路由器 2,所以其路由表有了下一条地址这一个概念,所以它的路由表就变成了这个样子。如果匹配到了有下一跳地址的一项,则需要再次匹配,找到其端口,并找到下一跳 IP 的 MAC 地址

在这里插入图片描述

如果 A 给 F 发送一个数据包在这里插入图片描述,能不能通呢?如果通的话整个过程是怎样的?

  1. 首先 A(192.168.0.1)通过子网掩码(255.255.255.0)计算出自己与 F(192.168.2.2)并不在同一个子网内,于是决定发送给默认网关(192.168.0.254)
  2. A 通过 ARP 找到 默认网关 192.168.0.254 的 MAC 地址。
  3. A 将源 MAC 地址(AAAA)与网关 MAC 地址(ABAB)封装在数据链路层头部,又将源 IP 地址(192.168.0.1)和目的 IP 地址(192.168.2.2)(注意这里千万不要以为填写的是默认网关的 IP 地址,从始至终这个数据包的两个 IP 地址都是不变的,只有 MAC 地址在不断变化)封装在网络层头部,然后发包

在这里插入图片描述

  1. 交换机 1 收到数据包后,发现目标 MAC 地址是 ABAB,转发给路由器1
  2. 数据包来到了路由器 1,发现其目标 IP 地址是 192.168.2.2,查看其路由表,发现了下一跳的地址是 192.168.100.5
  3. 所以此时路由器 1 需要做两件事,第一件是再次匹配路由表,发现匹配到了端口为 2,于是将其封装到数据链路层,最后把包从 2 号口发出去。
  4. 此时路由器 2 收到了数据包,看到其目的地址是 192.168.2.2,查询其路由表,匹配到端口号为 1,准备从 1 号口把数据包送出去。
  5. 但此时路由器 2 需要知道 192.168.2.2 的 MAC 地址了,于是查看其 arp 缓存,找到其 MAC 地址为 FFFF,将其封装在数据链路层头部,并从 1 号端口把包发出去。
  6. 交换机 3 收到了数据包,发现目的 MAC 地址为 FFFF,查询其 MAC 地址表,发现应该从其 6 号端口出去,于是从 6 号端口把数据包发出去。
  7. F 最终收到了数据包!并且发现目的 MAC 地址就是自己,于是收下了这个包

转载自https://blog.csdn.net/weixin_40734514/article/details/117201221?ops_request_misc=&request_id=577c6685734e439a92fb3ab37b365e8d&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2blogkoosearch~default-2-117201221-null-null.268v1control&utm_term=%E7%BD%91%E7%BB%9C&spm=1018.2226.3001.4450

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络前三层(物理,数据链路层,网络)数据包传输过程 的相关文章

  • Linux 软件安装以及管理

    本篇主要记录常用的软件安装和管理方式 主要是 yum rpm dnf apt pip 大致都是一样的 主要是部分软件提供了解决依赖的功能 内容不包括源码安装 源码安装情况相对比较复杂 后续有时间再补充 约定 案例所用模板软件均为 pytho
  • 自定义编写zabbix_agent脚本

    vi usr lib systemd system zabbix agent servicce Unit Description Zabbix Agent After syslog target After network target S
  • 掌握内网渗透之道,成为实战高手,看《内网渗透实战攻略》就够了

    文末送书 文末送书 今天推荐一本网络安全领域优质书籍 内网渗透实战攻略 文章目录 前言 如何阅读本书 目录 文末送书 前言 当今 网络系统面临着越来越严峻的安全挑战 在众多的安全挑战中 一种有组织 有特定目标 长时间持续的新型网络攻击日益猖
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 如何利用CHAT做简单的总结体会?

    问CHAT 在测试过程中使用appium python自动化的优点和体会 CHAT回复 使用 Appium 配合 Python 进行自动化测试主要有以下几点优点 1 跨平台性 Appium 支持 iOS 和 Android 平台的应用自动化
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制_raylink todesk

    目录 一 前言 二 远程控制中的安全威胁 三 国内外远控软件安全机制 ToDesk RayLink Teamviewer Splashtop 四 安全远控预防 一 前言 近期 远程控制话题再一次引起关注 据相关新闻报道 不少不法分子利用远程
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 国外拨号VPS指南:开启你的全球网络之旅

    在当今数字化时代 互联网已经成为了我们生活的一部分 而要在全球范围内畅通无阻地访问互联网 拥有一个可靠的国外拨号VPS是非常重要的 无论您是为了工作 学习还是娱乐 国外拨号VPS都可以为您提供更广泛的网络体验 本文将为您提供国外拨号VPS的
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 高防服务器什么意思

    高防服务器什么意思 为什么要用高防服务器 小编为您整理发布高防服务器什么意思的解读 高防服务器是指具备较高防御能力的服务器 能够抵御DDoS CC等网络攻击 高防服务器通常用于保护游戏 APP 金融 电商等业务 这些领域因为其业务特性 容易
  • 光波导结构

    摘要 增强现实和混合现实 AR MR 领域的新应用引起了人们对带有光栅区域的光波导系统的越来越多的关注 这些光波导系统用于输入和输出耦合以及扩瞳目的 VirtualLab Fusion为这类系统的仿真和设计提供了几个强大的工具 其中一个是具
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全

随机推荐

  • k8s 以statefulset方式部署zookeeper集群

    k8s 以statefulset方式部署zookeeper集群 参考 k8s官网zookeeper集群的部署 数据挂着方式改成通过本地方式创建的pv https kubernetes io docs tutorials stateful a
  • [深度解剖C语言] --关键字 static

    static 最名不副实的关键字 目录 1 static修饰全局变量 2 static修饰函数 3 static修饰局部变量 static的作用 1 static修饰全局变量 我们创建两个源文件 一个test c 一个main c 现在我们
  • 【日常问题记录】visual studio 出现 E0266 “data“ 不明确 错误

    解决方法 定义的变量和内部变量冲突 将变量的把名字改成其他名字即可
  • 【Kubernetes】mac 安装minikube

    1 一 官网安装 官网 https minikube sigs k8s io 搜了下网上如何通过Mac 安装看网上文章很多 但是受限于国内网络环境 很多都不行 各种下载失败 如果你有VPN 那么官方的步骤就容易走通 brew install
  • 小酌Django3——HTTP/URL/ORM简述

    小酌Django3 HTTP URL ORM简述 HTTP Hyper Text Transfer Protocol 超文本传输协议 是客户端与服务端请求和应答的标准 TCP 封装了Web服务的整个过程 通常 由客户端发起 建立到服务器指定
  • 矩阵基本知识

    1 identity matrix 单位矩阵 除了正对角线上是1 其它地方都是0 2 square matrix 方阵 行数和列数都相等的矩阵 3 diagonal matrix 对角矩阵 只在正对角线上有值 其它地方为0 4 matrix
  • js获取昨天,今天,明天,上周,本周,下周,上月,本月,下月,去年,本年,明年,上季度,本季度,下季度,向前推日期等

    配合的elementul的日期选择器使用的 参数是这样的 1代表 上 0代表 本 1代表 下 本月 1号到今天 意思就是比如今天是10月27号 那点击这个获取的是10月1号到10月27号得 效果如图 按顺序点了一遍 从左到右 上代码
  • 双十一前4小时,CentOS 6.5server启动错误排查

    11月10日晚上8点多 眼看要到双十一了 但我要说的这段经历却和双十一毫无关系 哈哈 这天准备向CentOS6 5server的svn上传一些文件 结果开机启动时 却出现了以下的界面 这是肿么回事 依据屏幕的提示 先使用root账号登录到系
  • JSP page指令errorPage属性起什么作用呢?

    转自 JSP page指令errorPage属性起什么作用呢 下文讲述JSP中page指令的errorPage功能简介说明 如下所示 errorPage功能 errorPage 属性用于设置JSP页面 当出现异常时的跳转页面 注意事项 er
  • STM32G431控制窗帘电机-窗帘电机拆机

    前言 最近做了一个电动窗帘的控制工程 简单点说就是实现电动窗帘的校准模式 窗帘移动到任意位置 说明 本文档为原创 转载请注明出处 要进行商业合作请联系本人1151313194 qq com 一 电机爆炸图拆解 窗帘电机主要时由三部分构成 电
  • Docker的隔离机制

    Docker的隔离性主要运用Namespace 技术 传统上Linux中的PID是唯一且独立的 在正常情况下 用户不会看见重复的PID 然而在Docker采用了Namespace 从而令相同的PID可于不同的Namespace中独立存在 如
  • 自动生成GFM目录

    自动生成GFM目录 自动生成GFM目录 参考文献 引言 使用方法 对于本地文档 对于远程文档 对于多个文档 本地与远程结合 自动插入和更新目录 输出目录文件 工作流程 目前工作流程注意事项及问题 参考文献 https github com
  • Go语言--Nohup后台启动

    linux的nohup命令用法 在应用Unix Linux时 我们一般想让某个程序在后台运行 于是我们将常会用 在程序结尾来让程序自动运行 nohup命令格式 nohup root start sh 在shell中回车后提示 appendi
  • HTML5(六)preserve and recover

    HTML5 六 preserve and recover 1 save the state of canvas context 2 So we have two method to save and restore the state of
  • run nerf

    install cuda install cudnn install anoconda 2022 08 18 wget https repo anaconda com archive Anaconda3 2022 05 Linux x86
  • 接口自动化get请求一些小知识点

    get 请求 requests get get请求的参数可以写在url里 写在url里时 参数和url之间需要加 get 请求的参数可以不写在url里 可以组织为字典传给参数param get 请求可以不传参数 获取响应信息 r reque
  • React之Hook(四)——使用 Effect Hook

    Effect Hook 可以让你在函数组件中执行副作用操作 import React useState useEffect from react function Example const count setCount useState
  • Doris数据划分

    数据划分 基本概念 Row Column 一张表包含行 Row 和列 Column Column可以分为两大类 Key和Value Tablet Partition 在Doris的存储引擎中 用户数据被水平划分为若干个数据分片 Tablet
  • Android面试题(32)-android编译过程和安装流程

    android app的编译过程 从网上拷了一张图 这张图很好的讲述了android的编译打包过程 接下来就具体的分析分析 大致分为7步 1 aapt Android Asset Packaging Tool android构建工具 在an
  • 网络前三层(物理,数据链路层,网络)数据包传输过程

    前三层 起始 第一层 物理层 hub 第二层 数据链路层 交换机 第三层 网络层 路由器 起始 起始 我就是一台电脑A 有一天 突然另一台电脑B想和我进行通话 于是我们各自开了个网口 用一根网线连接起来 这样就可以进行通信了 至于为什么可以