网络二层与三层数据包转发过程

二层主机通信与三层主机通信        今天记一下二层主机通信过程,三层主机通信过程。         1、二层主机通信 (1)PC0向PC1通信,首先会查看自己的arp缓存。如果没有,pc0就会广播arp请求,pc1收到请求之后就会单播回复mac地址,同时pc1自己也会把pc0的mac地址存储在arp缓存中,pc0收到pc1的arp回复后,把pc1的mac地址写入到自己的arp缓存中,并封装 阅读详情

  对于搞IT的同行而言,大部分人都不会直接和网络打交道,因此除非从事网络开发,否则对网络内部机制也不会太关心,但是明白网络数据是怎么走的,这对每个IT工程师应该是很重要的基础知识。网络数据包如何在网络上游荡,长久以来也困扰了我很长时间,现在把这部分内容总结分享一下。

  说起网络,大家不约而同会想起大学课本上那个臭名昭著的ISO七层模型,但是ISO模型只是提供了一个参考,并不是具体实现,目前我们使用最多的实现其实是TCP/IP协议族。但是对于TCP/IP,除了表示层和会话层没有体现,其它几层和ISO基本是对应的,从这个角度讲ISO模型还是有参考意义的。

  不扯那么多,我们落地一点:

  • 对于物理层而言打交道的基本都是电信号和光信号,例如网卡、光纤、双绞线等都被归到物理层考虑;
  • 对于链路层,数据在离散电/光信号的基础之上,被逻辑划分成一帧一帧(Frame)来管理,这一层是数据交换的主要层面,交换的依据主要是网卡MAC地址,以太网(定义了一种帧格式)、交换机、集线器都划归这一层;
  • 网络层是比链路层更高一级的逻辑层,在这一层主要工作的是路由器,路由器基于IP地址进行跨网链路的计算;
  • 传输层顾名思义是用来控制网络层传输的,因为网络层只是一个“尽力而为”的层,其传输不是完全可靠的,如果将超时重传等可靠性保障机制都交给程序员来做,估计大部分程序员都要疯了,幸好有了传输层提供了TCP和UDP两种机制给我们,才让我们可以高枕无忧的传输数据,而我们在代码里要做的只是打开一个传输层的套接字(即Socket)就可以了;
  • 至于表示层和会话层我们就不多做理解了,这两层基本只是摆设;
  • 应用层是最高层的协议,Web HTTP协议、远程登录SSH协议等都被划归这一层,确切来说这一层已经不属于基础网络了,基本都是软件自定义协议。


  理解了网络各层的概念后,我们再回过头来看,在这七层中网络层、链路层、物理层属于低三层,其余属于高四层,从字面上可以看出传输层以下才是真正通过网络传输数据的层面。对于物理层,主要定义的是各种传输介质的信号传输方式,比如时钟频率、电平高低、信道编码等,这一层只是机械的传输,不涉及数据包选路逻辑,链路层(L2层)和网络层(L3层)才是我们要理解的地方。

  首先看L2链路层,这一层以帧(Frame)为单位组织物理信号,每个帧都需要有一个源地址和目的地址,绝大多数情况下使用的都是网卡MAC地址。这一层主要的数据转发设备是集线器和交换机,对于集线器,由于每一个数据帧都会被复制到各个端口,使每个连接主机收到很多跟自己无关的数据帧,这直接导致主机和集线器之间信道冲突剧烈(冲突域属于物理层概念),因此现在基本不用该设备。而交换机则具有MAC地址学习功能,能够向各个端口准确投放数据帧,这样就大大提高了数据传输效率。对于L2层,交换机只能转发一个子网内的数据帧(子网是通过IP地址划分的),如果要将一个数据帧跨网转发,则需要借助于L3层的路径规划功能,这个一会再说。

  现在假设有如下网络拓扑结构,ABCD四台主机属于10.0.0.0子网,网关都指向路由器的10.0.0.1端口,EFGH属于10.0.1.0子网,网关指向路由器的10.0.1.1端口。


   先看同一子网内的通信的情况(A向C发送数据,这种情况下都是通过IP地址指定的),假如所有的主机、交换机和路由器都刚刚加电,内部没有缓存任何MAC映射表和路由表。A在发送之前,发现C和A在同一个子网内,于是A试图先在物理子网内找一下C,但是在同一物理子网内是通过硬件MAC地址来寻址的,而A此时并不知道C的MAC地址,于是A通过ARP广播来试图获取,发出的广播包包括如下类似内容:(注:广播时用的MAC地址是ff:ff:ff:ff:ff:ff)


  交换机1在收到这个ARP广播包后,首先学习到了主机A原来是和1口连接的,然后在缓存中查找C的MAC地址,但是最终没有找到,于是交换机1将这个包从所有端口(连接A的1口除外)发出去,交换机2收到后也会继续广播出去。当主机B和D收到这个广播包之后,发现和自己无关,于是便直接丢弃这个包,不做任何处理;C收到这个广播包后,发现原来是找自己的,于是它发出如下类似格式的回应内容,来告知A自己的身份。


  这个过程对于所有参与的交换机也是个学习的过程,因此交换机1和交换机2也学习到了A和C的位置。至此AC相互找到对方后,便可以在同一物理子网之间直接通过指定MAC地址通信了,他们发送数据帧的类似格式如下:


  下面再来看跨物理网络通信的情况(A向E发送数据),同样假设设备都刚刚加电,缓存为空。A发现E的IP也是同一网段的,于是又开始广播,但是这次BCD都没有回应。我们此时把视线转到路由器1上,当路由器1收到这个ARP广播包后,为了避免广播风暴的产生,路由器1不会继续广播这个ARP包,但是路由器1会把自己的MAC告诉A,回发如下类似格式的内容:


  A在等待超时后,发现当前物理子网内找不到E,但是A已经知道了网关路由器的MAC地址,于是便会将发给E的数据包扔给网关(也就是路由器1的1口),路由器1收到这个包后,发现E的IP在自己内部也没有缓存,于是路由器1也开始了寻找E的过程。相比交换机的子网内“广播找人”,路由器的选路范围更大也更复杂,很多情况下是整个Internet,并且要夸多个运营商,所以在L3层面路由器的路径计算协议较多,包括:RIP、OSPF、IS-IS、BGP、IGRP等协议。路由器之间计算路径时,任何一台路由器都是无法窥探整个网络的,因此每台路由器都只是通过选路算法找到下一跳的最优路径,这些最优路径连接起来便形成了一条完整的路径。换句话说,路由器的转发路径不是一个路由器选择出来的,而是一群路由器共同选择出来的下一跳地址序列。具体的路由选路无法一一讲解,大家感兴趣可以自己调查一下,这里假设路由器1直接找到了路由器2。

  我们继续往下探索,当路由器2接到寻找主机E的广播包后,发现E位于自己的网络中(当然也提前需要一个广播学习的过程才能知道),便向前一跳路由器(即路由器1)反馈自己离主机E最近,最终经过这样一个“A→网关路由器→路由器间选路→找到主机E所在子网”的过程A终于可以与E进行通信了,由于A和E之间经历了多个物理子网,因此需要多次的L2转发才能实现数据包的到达,这个过程中L3层IP包外包帧的MAC地址会不断变换。A→B→A这个过程中,数据帧和IP包的地址经历过程如下(假设A使用的是本机的88端口,B使用的是本机的99端口):


  在这个过程中,数据包在路由器1和2的1<-->4口之间传递时,由于是在一个设备内部,因此可以直接转发,而不用变换帧头,从而提高转发效率。如果A要与其它子网的FGH主机通信,过程基本是一样的,只不过刚开始不会先在当前子网内“广播找人”,而是直接将数据包投递给出口网关。

  本文旨在向大家展示L2交换机和L3路由器在转发网络数据时的一个主要流程,希望能给大家带来帮助。由于3层跨子网计算IP包投送路径协议比较多,先请大家自己参考其它资料。

原文地址:https://blog.youkuaiyun.com/duhf_think/article/details/41483153



网络三层架构总结 企业网三层架构模式: 一个简单的企业网三层架构: 在网络结构中,有二层网络和三层网络两种选择。 在这里的二层、三层是按照逻辑拓扑结构进行的分类,并不是说ISO七层模型中的数据链路层和网络层,而是指核心层,汇聚层和接入层,这三层都部署的就是三层网络结构,二层网络结构没有汇聚层。 与二层网络结构不同的是,三层网络结构可以组建大型的网络。 核心层:是整个网络的支撑脊梁和数据传输通道,重要性不言而喻,因此在整个三层网络结构中,核心层的设备要求是最高的,必须配备高性能的数据冗余转接设备和防止负载过剩的均衡负载的 阅读详情

相关推荐

交换机二层三层的转发原理

网络工程师必学:华为HCIAHCIPHCIE 思科CCNACCNPCCIE 为什么使用6500做核心而不是3550? CAM表的大小,太小会flood影响交换机性能、接入网络带宽、主机终端性能需要处理大量无用报文; 预留mac地址的数目,预留太少会导致交换机一些特殊功能无法实施(例如vlan数目、tunnel等等) 交换机接口mac地址有什么用? 区分二层转发和三层转发的问题 用于交换机与交换机之间数据的发送与接收...

XMWS-IT 3625

什么是三层网络?

网络接入层是最外层的网络层,它通常是由交换机、路由器等设备组成的。网络接入层主要负责将用户设备,如PC、服务器等设备接入网络,并将网络流量聚合到下一层的汇聚层。该层设备通常具有较低的成本和较小的处理能力,主要使用层2交换技术如VLAN、STP等技术。三层网络指的是将网络架构划分为三个层次:网络接入层、汇聚层和核心层。这种层次结构的网络设计常常用于中大型企业或机构的局域网设计中,能够通过优化网络流量控制、提高冗余备份、提高网络安全性等方面来提升网络效率和可靠性。它是一个常用的企业级局域网设计架构。

学亮编程手记 4873

【二层网络和三层网络是什么?有什么区别?】

二层网络和三层网络是什么?有什么区别?

王明的博客 1万+

二层网络和三层网络的区别

假设设备A和设备C属于不同的路由器下的终端,设备A向设备C发送数据,此时设备A试图通过ARP协议当路由器1收到设备A发送到广播报文后,会将自己的MAC地址回复给设备A。核心层是整个网络的数据传输通道,因此三层网络中,核心层的设备要求较高。但是频繁的网络风暴(网络上过多的广播数据帧,几乎占满了网络的整个带宽从而导致网速极慢)会限制二层网络的规模,导致其不能过于庞大,一般用作小型局域网。广播是一种信息传播方式,表示网络中的一个设备向该网络中的所有设备发送数据,这个数据的传播范围即为广播域。

Wanggj的博客 4452

A Mathematical Framework for Transformer Circuits—(一)

transformer数学理解理论

qq_42208244的博客 2665

【Coze 扣子案例】第 23 期・商业篇:一键获取精准商机,自动化招标信息查询与分析

通过地区和项目类型等多维度组合查询全国招标信息网数据,实现招标公告的快速定位。自动解析招标公告内容,提取关键信息,并生成结构化摘要。帮助企业高效获取精准商机,提升市场竞争力,降低人工成本,解决 “信息过载” 与 “精准匹配难” 的双重问题。

weixin_72689845的博客 1928

二三层转发原理介绍

二三层转发原理介绍

里晓山的博客 1万+

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.youkuaiyun.com/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1124

二三层转发原理

二三层网络交换基础

乖,摸摸头 5596

Frida Stalker实战:如何用指令级追踪破解OLLVM混淆的AES算法

本文深入探讨了如何使用Frida Stalker进行指令级追踪,破解经过OLLVM混淆的AES算法。通过动态分析技术,逆向工程师可以精准识别控制流平坦化等混淆手段,还原算法逻辑,特别适用于移动安全领域的加密算法分析。文章提供了详细的配置指南、核心机制解析和实战案例,帮助读者掌握对抗高级代码混淆的有效方法。

weixin_29325955的博客 475

基于PCL、Open3d、Easy3d 、VTK等常见开源库的QT开发

PCL+QT开发

阁楼 2万+

三层转发基本原理

1.网络层的定义 网络层(network layer ):它位于OSI模型中的第三层,介于运输层与数据链路层之间,提供发信端到目标端之间的信息传输服务。网络层的数据以IP数据报的形式传输。 2.IP协议 IP提供了不可靠,无连接的数据报传送服务。它定义了在互联网上传输数据的具体格式。IP实现两个基本功能:寻址及分片。 IP地址由网络号和主机号两部分组成,网络号标识互联网中的一个特定网络

baidu_24553027的专栏 3万+

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1947

网络(2): 二三层转发-2-数据包封装

一.二层转发数据包封装 前提条件: 1.源端与目的端在同一局域网内 2.源端没有目的端任何信息 源端:192.168.1.1 目的端:192.168.1.2 开始:192.168.1.1 ping 192.168.1.2 封装数据包:ip层 二.三层转发数据包封装 ...

Python开发分享的博客 2603

手把手教你学Simulink——基于Simulink的隔离型DC-DC全桥变换器移相控制建模示例

本文详细介绍了基于Simulink的全桥移相变换器(PSFB)建模与控制方法。首先分析了全桥移相拓扑在大功率应用中的优势,包括ZVS实现、高频化和小型化特点。随后给出了具体设计参数和移相控制策略,采用电压外环+移相角内环的双闭环控制架构。文章重点演示了Simulink建模步骤,包括主电路搭建、移相PWM生成和PI控制器设计,并通过满载稳态、负载阶跃和轻载测试三种场景验证了系统性能。最后总结了工程实践要点,提出自适应控制等扩展方向,强调移相控制通过精准时间管理实现高效能量转换的核心价值。

MHD0815的博客 261

UNet 改进(22):结合Transformer结构

保留了UNet的经典编码器-解码器结构在瓶颈层使用Transformer替代传统的卷积层采用跳跃连接保持空间细节信息使用双卷积块(DoubleConv)作为基础构建模块。

2401_82355416的博客 775

网络二三层转发

二层转发具体过程 转载至https://blog.youkuaiyun.com/hjq129520/article/details/60956536 根据路由表项的掩码和目的IP相与,判断主机A和主机B处于同一网段,采用二层转发。 1.      主机A向全网段的其他主机发送ARP广播报文,其SMAC为主机A 的MAC地址,SIP为主机A的IP地址192.168.1.1,DMAC为全零的广播地址,DI...

hubinbin595959的专栏 1053

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

二层、三层网络基本原理

从上面可以看到,初始情况,ns1要通过arp广播(地址是ff:ff:ff:ff:ff:ff)解析192.168.1.3对应的mac地址,相当于到一个微信群里面@所有人 谁的ip是192.168.1.3。所以ns2和ns3都收到了同样的广播报文,但是只有ns3通过单播(相当于微信的私聊)做了回复,目标mac是ns1的mac地址。但是每个ns并不知道其他ns的mac地址,应用程序还是用的ip进行通信。这个时候vm1和vm2各自的ns1和ns2是通的,同时,ns各自到主机的网络也是通的。

Neo 1567

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

三层交换技术,eNSP实验讲解

三层交换技术=二层交换技术+三层转发技术三层交换是一种网络技术,它结合了传统交换机的快速数据转发能力和路由器的网络层(第三层,即IP层)路由功能。三层交换机是一种多端口的网络设备,它工作在OSI模型的第三层,即网络层。它能够识别IP地址,并根据IP地址进行数据包的转发。

weixin_52916289的博客 2687

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

网络(1): 二三层转发-1-流程详解

1.必备基础:网络7层模型,arp,icmp,routing,ip,vlan等基础网络原理 2.二三层转发流程: 2.1 二层转发: pc1 ping pc2流程: 2.1.1 pc1根据pc2的ip与自己的掩码计算是否属于同一子网===》属于同一子网走二层,不属于走三层 2.1.2 属于:pc1查询本机arp表是否含有pc2对应的mac ==>无对应mac发送arp;有则直接...

Python开发分享的博客 4316

二三层转发区别

二层转发 先根据源MAC更新MAC表表项; 再根据目的MAC转发初去; 未找到目的MAC,则在同一vlan下除入接口外广播出去。 三层转发 1.如果查找到的目的MAC是网关MAC则走三层转发 2.提取目标IP,查找下一跳。如果不知到目的IP的MAC地址,则可以ARP请求获得。 3.在交换机/路由器重新封装这个报文目的地。 ARP请求过程可参考上篇: https://blog.youkuaiyun.com/qq_38902271/article/details/110213222 表项区别 ...

qq_38902271的博客 3209

二三层原理介绍及拓扑搭建(主要是自己学习总结)

二三层转发原理及拓扑模型搭建

hghjjj的博客 2751

三层/二层转发基础(1)

三层/二层转发基础前言:基于OSI参考模型,这里三层指的是网络层,二层指的是数据链路层;同时,当前二层链路环境为以太网链路;步骤 1、 源主机想要要向一个目的IP地址的远端主机发送数据报文;首先本地资源有了想要发送目的主机的IP地址; 2、 查看目的IP地址是否和本地主机在同一个网段内,这个可以使用主机配置的子网掩码进行校验; 3、 如果是,那么这个可以认为就是介入了二层转发的范畴,对于一个数

墨夜风名的专栏 3276
上一篇: DHCPv6解析
下一篇: 堆与栈
just_run丶
博客等级 码龄10年 51粉丝 7原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值