局域网同一个网段通信过程

article/2025/9/16 19:00:04

局域网内同网段通信的过程

这个时候就需要用到ENSP模拟器了,之前已经安装好了,我们通过ENSP来搭建实验环境,这样可以看到实验的效果以及通过抓包来分享整个过程,先看同网段内的通信过程。

1、准备工作

图片

2、开始测试

图片

我们先用PC1访问一下PC4,先看下结果,测试的使用ICMP协议里面的ping工具,这个协议还没讲解,并且呢,这个协议也是后续排错的重要协议。

图片

简单的测试下来有回显,表示通信正常,这个就是Ping工具,能够探测网络的质量、稳定性怎么样,回到正题,PC1到PC4是已经通了,从IP地址通信规则来看,是在同一个网段,能通很正常,那么它通信的过程中发生了什么呢?

图片

图片

开启抓包,PC1访问PC2,抓取PC2的数据,来看看通信过程中发生了什么事情!因为ping它只回显结果,中间发生了什么并不知道,但这个才是要弄懂的关键。

图片

结果显然还是通的,我们关注的点放在抓包了什么内容。

图片

12个数据包,protocol总共两种类型,一种是ARP、一种是ICMP,ICMP上面介绍过,就是我们在命令行输入的Ping,icmp总共10个包(来回各5个),那ARP是干嘛用的呢?这个就需要从我们之前学到的内容综合起来了,这样才能够把这个过程理解透彻。

(1)IP通信规则

PC1(192.168.100.1/24)访问PC2(192.168.100.2)的时候,PC1会用自己的子网掩码计算出自己的网络号是多少,然后根据目的地址来判断是否在一个网段,判断的依据是两边的网络号是否一致,那这里就有一个疑问了,PC1不可能去知道PC2的掩码是多少,PC1只能知晓自己的,因为可以读取网卡的参数,所以PC1判断的依旧是以自己的子网掩码来计算的PC2的地址的网络号是多少,然后做对比,显然是同一个网点号,PC1会直接发送数据到PC2。(源地址192.168.100.1,目的地址192.168.100.2)

图片

(2)数据封装

现在通过掩码的计算得到了对方跟自己在同一个网段,PC1会开始进行封装,最上层为ICMP协议的数据,中间是网络层,包含IP头部(源地址为 192.168.100.1,目的地址是PC2的地址 192.168.100.2),这个都是知道的。(这里说明下,PC2的地址,如果单纯从PC1来说是不知道的,是我们发送指令调用ICMP的ping功能发往的192.168.100.2,ICMP调用网络层,告诉它目的地址是多少,很多新手会迷糊,所以这里多解释下)

图片

现在的问题就在二层封装上面,源MAC,那自然是PC1的MAC地址(54-89-98-FB-22-1B),但是PC2的MAC多少,PC1是并不知道的,不知道的话,那就没法完成封装,所以这个时候就必须有一个协议出来解决这个问题,让PC1能够获取目标的MAC地址,完成封装,这个协议就是ARP。

(3)从抓包来了解ARP的报文结构

在了解ARP的报文结构之前,我们先来了解下ARP的工作原理,然后在结合抓包的内容,就能够更深入的掌握ARP了。

ARP分为两种报文,ARP请求以及ARP响应

PC1在发送数据包给PC2的时候,发现不知道PC2的MAC是多少,于是PC1会发送一个广播ARP的请求,这个请求包中的内容是请求PC2主机IP地址对应的MAC地址是多少

图片

先看前面2个,怎么看数据包呢,可以双击第一个,会单独显示出来,这也是我们能够去深入学习协议的重要工具,能够实实在在的看到整个过程与内容。

图片

上面提到了ARP有两个报文,第一个包势必就是请求了,那它在ARP中结构就是如上图。

Hardware Type:通常值显示为以太网(0x0001)

Protocol Type:这个类型是不是很熟悉,在IP协议中也有,在ARP中表明为谁提供服务,通常值为IP(0x0800)

硬件地址与协议地址长度:这个表示的是MAC地址与IP地址的字节长度

Opcode:requeset(0x0001):这个用于标识这个ARP包到底是请求包还是响应包,当操作值为1的时候,表示是ARP请求

Sender MAC Address(发送方MAC):表明发送方的MAC地址(这里为PC1的MAC 54-89-98-FB-22-1B)

Sender IP Address(发送方的IP):表明发送方的IP地址(这里PC1的IP是192.168.100.1)

Target MAC address(目标的MAC):目标的MAC地址,你会发些这里是一个特殊的MAC地址,模拟器里面有一个错误的,是全F,表示广播,但是标准的格式是全0,表示未知

图片

Target IP address(目标的IP):表明目标的IP地址是多少,也是要请求该IP的MAC

需要掌握的有用信息

这里红色部分表示关键的地方,要掌握,首先来一个比较特殊的,目标MAC那个字段,用的全F的表示,在上面提到过,ARP请求包是以广播的形式发送的,那广播在以太网头部中,目的MAC地址中表示就是为全F

在这里插入图片描述

那为什么要广播呢?这就又回到以太网的网络特点了,它是一个典型的多路访问这样的一个结构,从拓扑里面来看,交换机上面接了多个PC,PC1并不知道192.168.10.2具体在哪个PC上面,所以它要想知道这个MAC地址是多少,就只能通过广播的方式来进行请求获取,这个包以广播形式发送出去后,所有人都会收到,那么收到以后,谁来回应呢?这就是在ARP请求报文中目标IP存在的意义了,它表明了请求的就是这个IP的MAC地址,那源MAC与IP的作用是什么呢?这是让对应的目标能够正确的回包,不然你发一个请求包,不告诉别人是谁在请求,那对方想回应都找不到谁来请求的。

看了ARP的报文结构内容后,结合我们做的测试,是不是就很容易看懂了,PC1不知道PC2的MAC地址是多少,于是发送了ARP请求报文,报文中源IP与MAC是PC1,请求的目标IP是192.168.100.2,目标MAC未知,所以以广播的形式全F,发送给同一个链路区域的所有终端设备,其他设备收到以后会拆开这个ARP请求包的内容,如果发现请求包中的目标IP地址与自己的IP地址一致,那么这个设备就会回应这个请求,如果不一致则丢弃(发现找的不是自己)

所以PC2发现这个请求包是询问的自己,于是使用ARP响应来回应这个请求。(在来看回应报文字段内容)

在这里插入图片描述

图片大部分字段都是一样的,我们来看看变化的

Opcode:reply(0x0002):这里变成了响应,类型是2

Sender MAC Address(发送方MAC):这个就是PC2收到请求后,在响应包里面把自己的MAC地址包含在源MAC里面

Sender IP Address(发送方的IP):响应方的IP地址,这里为192.168.100.2(PC2的)

Target MAC address(目标的MAC):请求者的目标MAC(PC1,是它请求)

Target IP address(目标的IP):请求者的IP地址(PC1,192.168.100.1)

这样PC1就知道了PC2的MAC地址是多少了,那就可以完成封装了,把数据包发送给PC2了,另外可以发现回应的时候使用的是单播(因为PC2知道了PC1的MAC是多少)

那现在有一个问题,PC1每次发送数据给PC2,都需要ARP请求吗?ARP请求包是广播报文,其余无关终端也需要去查看这个包的内容,如果每次发送数据包都要发送ARP请求,一旦这个网络规模比较大的时候,那岂不是白白的消耗了链路带宽,为了解决这个问题,在终端设备以及网络设备上面都有一个表项,叫做ARP表,用于缓存自己通过ARP协议获取到的IP与MAC的对应信息,在一定时间内,只要ARP表项存在这个IP对应MAC的条目,不需要在去ARP请求。

图片

通过命令arp -a,就可以查看到了,192.168.100.2对应的MAC地址是多少,并且Type是动态的,动态的意思是这条记录是有时间的,时间一过,那么就会消失。像Windows系统默认是2分钟(arp -a的意思是查看arp缓存,Windows CMD里面的指令)

(4)解封装

PC1发送ICMP数据包出来后,交换机会根据MAC表查询到PC2的位置(MAC表记录了PC2的MAC地址是多少),交换机的工作原理,在第三篇链路层简单提到了,回头在开始进入交换篇后在详细了解,PC2收到这个数据包,会进行解封装,那PC2怎么知道这个数据包就是给自己的呢?这个时候就需要来看下以太网的头部。

图片

从抓包来看,以太网头部就显示三个字段

Destination(目的MAC):这里MAC地址为PC2,如果为全F则表示广播(该链路区域内的所有主机都会进行接受处理)

Source(源MAC):这里MAC地址为PC1

Type(类型):表示上层的内容,在如今的网络中,这个值为0x0800(表示IP),如果为0x86DD(表示IPV6)

抓包是看不到前导码跟FCS的,因为这个抓取的数据包是网卡已经处理完毕后的结果。

PC2通过读取以太网头部中的目的MAC地址,发现是找的自己,并且从type中知道上层是IP协议,所以在解封装三层的时候,会用IP协议来读取,同样我们先来看下IP的头部

图片

IP协议头部的字段之前都介绍过,这里就看下几个比较重要的字段,复习下

version(版本):固定为版本4,因为IPV6的包头已经发生了变化

Header Length(头部长度)与Total Length(总长度):头部长度为20个字节,这是一个默认的大小,而总长度表示的IP头部加后面DATA部分的总长度,为60字节,那说明ICMP部分有40个字节(60-20)。

Time to Live(生成时间):这里TTL为128

Protocol(协议):这里为ICMP=1,也就是告诉接收方,上一层的协议是什么

Source与Destination:源目IP,源自然是PC1的地址(192.168.100.1),目的是PC2(192.168.100.2)

PC2通过读取IP协议中的目的地址发现是自己,也从Protocol中知道上层使用的是ICMP,最终会使用ICMP来读取这些数据,然后做出回应,这个就是整个的通信过程。

整个同网段通信过程重点回顾

(1)PC1想要跟PC2通信,首先会读取自己网卡上的IP、子网掩码参数,利用该掩码计算出自己与对方的网络号,看是否相同,相同则在同一个网段。

图片

(2)判断出在同一个网段后,PC1由于不知道PC2的MAC地址是多少,无法完成二层封装,所以必须依靠ARP请求协议来获取,这个请求包内容是请求PC2的IP的MAC地址是多少,并且以广播形式发送(以太网头部 源MAC为PC1,目的MAC,全F),发广播的原因是PC1不知道PC2在哪,只能依靠广播的形式来询问PC2在哪(也是之前说的的靠”吼”的方式),这样整个局域网内的终端都可以收到这个请求,不是PC2的终端设备收到,发现ARP报文里面询问的IP不是自己,就丢弃了,而PC2自身发现请求的是自己IP的MAC,则开始进行ARP回应。

图片

(3)PC2回应这个请求(携带了自己的MAC),以太网头部(源为PC2,目的是PC1),单播的形返回,PC1收到以后,会把这个信息缓存到ARP表项里面,一定时间内不会消失,在这个时间内再次有数据包发送的话,则直接调用ARP表里面的信息即可。

图片

(4)PC1终于知道了PC2的MAC,开始进行封装,以太网头部:源MAC(PC1),目的MAC(PC2),IP头部:源IP(PC1),目的IP(PC2),最终ICMP头部与数据,并且以太网头与IP头里面都会标识出来上层的协议使用的是什么。

(5)PC2收到以后,开始解封装,解封装的过程通过二层头部的目的MAC发现找的是自己,然后通过type知道上层协议使用的是什么,在用对应协议读取上层IP头部,IP头部里面通过查询目的IP字段,发现也是给自己的,然后通过协议号知道上层协议为ICMP,最后读取到最终数据,然后回应。

(6)回应的过程也是一个封装与解封装的过程,与PC1到PC2一样,只是中间不需要在执行ARP了,因为PC1用ARP得到PC2的MAC地址的时候,PC2也从ARP协议里面学到了PC1的MAC,也会缓存到ARP列表中,只有在缓存消失后,再次访问就又需要依赖ARP报文来解析了,缓存期间只要ARP表里面存在的列表,则不需要再次发起ARP请求,直接调用。

(7)这里没有讲解交换机收到数据包如何处理,这个会在交换机篇开始讲解,至此同一个网段局域网通信就完毕了。


http://chatgpt.dhexx.cn/article/06yZF76O.shtml

相关文章

linux 跨网段ping,Linux中跨网段ping问题

问题是这样的,如图,pc的ip是192.168.1.2,设备是linux内核2.6.35,有两个网卡,一个是带外管理口192.168.1.1 一个是192.168.2.1。pc与设备的带外口也就是192.168.1.1相连 将pc的gateway设置为192.168.1.1 pc ping 192.16…

修改docker ip网段

一 问题描述 用docker方式安装完archery后,网络同事反馈该archery服务器的网段和现有网段冲突了,我在archery服务器上,的确发现docker自动生成了几个网卡: #查看docker使用的网卡 [rootArchery ~]# docker network ls NETWORK I…

批量ping网段

ping命令是我们检查网络中最常用的命令,一般常见的场景是去ping一个地址或三四个地址,三四个地址时分别去ping即可,如果碰到50个地址100地址甚至一整段地址,再去一个一个的ping就很麻烦了,我们可以使用一行命令实现批量…

linux服务器如何进入图形界面,linux进入图形界面的方法

安装有图形界面的情况下,启动linux在终端下输入: startx 即可进入X11的图形操作界面。 如果希望每次都自动进入xwindos。。 修改inittab文件。 vi /etc/inittab 找到id:3:initdefault:这行 按i进入编辑模式,将3改为5。 按esc退出编辑。 输入 &#xff1a…

Ubuntu安装图形界面

一、前言 今天更换阿里云操作系统,发现更换的Ubuntu操作系统没有图形界面,在这总结一下Ubuntu安装图形界面的方法! 二、安装图形界面 1、依次执行如下命令行 sudo apt-get update sudo apt-get upgrade -y sudo apt-get install tasksel -…

c语言 图形界面 入门,C语言是怎么实现图形界面的?

GTK就可以,一个基于C语言的免费、开源、跨平台图形工具包,可以直接使用C语言调用实现图形界面开发,下面我简单介绍一下这个工具包的安装和使用,这里以Windows平台为例: 1.首先,下载GTK安装包,这个可以直接到CSDN上下载,一个zip压缩包,直接解压就行,地址https://downl…

wsl使用图形界面

WSL图形界面优势 为wsl安装图形界面之后,就像拥有一台新电脑一样。 wsl安装完毕后,与wsl子系统交互的方法只有shell,具有一些弊端: 1.学习难度大,交互式编程循环结构难以加入。 2.不支持GUI,对数据可视…

Git 图形界面

Git 图形界面的操作方式 我们可以通过 gitk 和 git-gui 2种方式进行图形化界面的操作。官网介绍比较笼统,我这里通过详细操作让您快速上手 git 图形界面。 gitk 进入我们的git仓库然后执行gitk即可 具体操作方式如下: 在git仓库目录右键点击Git Bash …

arch linux界面,ArchLinux图形界面安装

8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 说明 ArchLinux的wiki十分的强大,但是鉴于网上大多用户的安装教程十分的杂乱,就是把所有都装上,然后看见桌面出来了,就以为装好了,实际上没有理解或者认真阅读Arch wiki,我写这篇仅仅是为了记录…

centos 7 启动与切换图形界面

安装图形界面 默认情况下是不会安装图形界面的,所以需要自己手动安装,步骤如下: 开启系统,以root身份进入 安装X(X Window System),命令如下: yum groupinstall "X Window System"其中大约有20…

GUI图形界面编程基础知识

文章目录 一、GDI概述二、OpenGL三、什么是DirectX?四、GDI与OpenGL与DirectX之间的区别五、显卡驱动1.显卡概述2.显卡工作原理 六、C图形化GUI开发框架1.MFC介绍1) API2) SDK3) 控制台程序4) GUI程序5) MFC程序6) 字符编码:Unicode和多字节 2.Qt是什么&#xff1f…

推荐给大学生的几个图形界面方案

现在计算机专业的大学生,经常要打各种软件设计比赛或者实验,而凡是参与比赛就会要求写个图形界面。但是,怎么写一个图形界面,在学校的课上基本不会讲!因此,我在这里列出几个好用的图形界面方案,…

【新星计划·2023】Linux图形、字符界面介绍与区别

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将介绍图形界面与命令行界面以及它们的区别,登录方法。 目录 一、图形界面与命令行界面介绍 1、图形界面 2、命令行…

C语言图形化界面——含图形、按钮、鼠标、进度条等部件制作(带详细代码、讲解及注释)

目录 0.引言1.素材准备2.编程2.1.创建你的界面2.2.创建按钮2.3.鼠标操作2.3.1.单击特效2.3.2.光标感应2.3.3.进度条 3.完整代码及效果 0.引言 \qquad 看了CSDN上很多关于C程序图形化界面的介绍,有的代码繁琐难解,不方便调试修改;有的不够详细…

Drug Discovery Today| 频繁命中化合物:高通量筛选中需警惕的假阳性结果

今天给大家介绍的是2020年1月在Drug Discovery Today上发表的综述“Frequent hitters: nuisance artifacts in high-throughput screening”。高通量筛选是药物研发的一个重要手段,然而研究中发现一些化合物在不同类型靶点筛选中均表现出阳性结果,这类化…

算法的评价标准:ROC,假阳性,mape

名称含义公式真阳率\召回率\查全率\TPR\Recall表示正确预测的正样本与全部正样本的比值 a a c \frac{a}{ac} aca​假阳性率\FPR表示负样本被预测为正样本与全部负样本的比值 b b d \frac{b}{bd} bdb​精确率\查准率\Precision\表示正确预测的正样本与预测为正样本的比值 a a …

【笔记】 Hard negative:区域建议框中得分较高的False Positive(假阳性)

eg1: 对于目标检测中我们会事先标记处ground truth,然后再算法中会生成一系列proposal,这些proposal有跟标记的ground truth重合的也有没重合的,那么重合度(IOU)超过一定阈值(通常0.5)的则认定为…

病毒组学数据分析 -03 DRAM-V 病毒序列识别(剔除假阳性)

DRAM(Distilling and Refining Annotations of Metabolism,提取和精练代谢注释)是一种用于注释宏基因组组装基因组和VirSorter确定的病毒重叠群的工具。DRAM 使用KEGG、UniRef90、PFAM、dbCAN、RefSeq 病毒、VOGDB和MEROPS注释 MAG&#xff0…

【概率论】理解贝叶斯(Bayes)公式:为什么疾病检测呈阳性,得这种病的概率却不高?

先说结论:因为假阳性的人数相比于真阳性太多了。 具体是怎么回事呢?咱们慢慢分析。 文章目录 一、贝叶斯公式二、典例分析三、贝叶斯公式的本质思考(摘自教材) 一、贝叶斯公式 定理1(贝叶斯公式) 设有事件…

全面梳理:准确率,精确率,召回率,查准率,查全率,假阳性,真阳性,PRC,ROC,AUC,F1

二分类问题的结果有四种: 逻辑在于,你的预测是positive-1和negative-0,true和false描述你本次预测的对错 true positive-TP:预测为1,预测正确即实际1 false positive-FP:预测为1,预测错误即实…