数据通信原理_同网段主机通信原理

本篇文章介绍数据通信中最基础,最关键的原理之一,两台通网段的主机如何通信。

获得更多技术资料和免费学习视频,加入讨论群:752160765

适合两台普通电脑之间,两台服务器之间,两台手机之间,电脑和打印机之间,手机和小爱同学之间,等等,只要两个同网段节点互相通信,都符合以下原理。

mac地址长这样

91bf85913a0dd2c0f5c097bf50d144ce.png

mac地址也叫物理地址,和ip地址不同,使用十六进制来表示,十六进制就是0到9后还没完,还有abcdef,然后才进位成20。

mac地址是每个网卡的标识

不管有线网卡还是无线网卡,电脑还是手机,只要连入网络,一定需要网卡芯片,而mac地址就是网卡芯片上的地址信息。再来看下手机的mac

6e471a1255b9c7541a385cf5818417a1.png

一般在手机设置的“关于本机”中,都可以看到手机的mac地址。

那么mac地址的作用到底是什么?

很简单,同网段的两个主机通信,归根结底就是数据包从一个网卡,送到另一个网卡,而网卡之间,通过mac地址来识别。获得更多技术资料和免费学习视频,加入讨论群:752160765

等等,前面不是刚讲了ip地址吗,这里怎么又来个mac地址?

这里说来话长,有网络技术发展的历史原因,本文暂不详述,欢迎关注公众号,后续文章会讲解。

本文咱们先知道,两台同网段主机通信,必须知道双方的mac地址就可以了。

当主机A想给主机B发送数据,如何才能知道主机B的mac地址呢?

通过一个叫ARP的网络协议。

ARP的全称是Address Resolution Protocol地址解析协议,用来解析出某个目标IP所对应的mac地址。

这里假设一台主机A(192.168.0.173)想给另一台主机B(192.168.0.9)发送数据为例,来看ARP的工作原理。

第一步

主机A以广播的形式发出ARP请求。广播报文全网主机都会收到,包括主机B。

6ebf6e69355e62358a66a04ac5efb27f.png

上图是使用抓包工具捕获的arp请求包,可以看出,这个包是广播发出的(目标mac为全F代表广播)。

也可以看出,这个arp请求包,请求的是192.168.0.9的mac。

关于抓包工具的使用,以及常见报文的分析方法,后续文章会详细介绍,本文暂时观察arp报文的关键字段即可。

第二步

这个广播形式的arp请求,所有主机都会收到,无关主机看了”target ip“发现不是找自己的,直接丢弃。

而主机B收到,则会回复一个arp回应报文。

592a19eef02ceec9b3a749f5c40cd14f.png

上图是主机B给主机A回应的ARP包,告诉主机A自己的mac是什么。

注意看图中”sender ip“和”sender mac“两个信息,包含了主机B和他对应的mac。

本实验环境,主机B是一台苹果手机,通过mac地址也能看出手机品牌apple。

因为标准的mac地址,前半部分是网卡的厂商标识。

第三步

主机A收到arp回应后,会把主机B对应的mac写入自己的arp缓存表,这样就可以给主机B发数据了。

而且后续再给主机B发数据,就不用再去arp解析了,查下arp缓存表即可。

在命令行输入arp -a可以查看arp缓存表。

2f3e6a5befe93321bbf1a61908ca9886.png

如果你看到了这里,百哥想请你帮个小忙:

1.帮我点赞,评论,收藏三连,方便你最快找到百哥,也让更多的人真正爱上ICT技术,学好ICT技术。

2.关注腾讯课堂“众元教育”,还可以听百哥讲课哦~

3.点击下方了解更多,可了解更多网工课程哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java jdk 未知错误_解决JAVA JDK安装出错的最常见问题,帮你排除困扰

一般来说,安装JAVA JDK的整个流程是很简单的,只要按照提示进行操作即可,就不会出现问题。但是呢,有小伙伴反映说,之前安装了JAVA JDK,进行卸载重装的时候出现错误提示,“正在进行另一Java安装”…

定义const变量是不可以赋值_JavaScript的声明方法和作用范围,常见的结构赋值类型和使用场景...

链接:https://juejin.im/post/5d9bf530518825427b27639d声明const命令:声明常量 let命令:声明变量作用作用域全局作用域函数作用域:function() {}块级作用域:{}作用范围var 命令在全局代码中执行const命令和let命令只能…

java社区活跃度_Java并发编程-活跃度问题

在讲问题前,我先说明一下什么是活跃度?一个并发应用及时执行的能力称作活跃度。我主要讲死锁问题,顺带介绍一下饥饿,弱响应性和活锁。死锁死锁这个词大家都听过,我先来罗列一下产生死锁的四个必要条件:(1) …

python post 上传文件_如何在 Python 中模拟 post 表单来上传文件

展开全部发个以前用urllib2模块来做的62616964757a686964616fe4b893e5b19e31333335343366class HTTPError(urllib2.HTTPDefaultErrorHandler):def __init__(self):self.errMsg def getErrorMsg(self):return self.errMsgdef http_error_default(self, req, fp, code, msg, hdr…

java8 di_java8 多个list对象用lambda求差集操作

业务场景:调用同步接口获取当前全部有效账户,数据库已存在部分账户信息,因此需要筛选同步接口中已存在本地的帐户。调用接口获取的数据集合List list response.getData().getItems();本地查询出来的账户集合List towList accountRepository…

怎么抓python程序的包_如何在AWS上部署python应用程序

如何在AWS上部署python应用程序,学姐呕心沥血亲自总结,亲测有效,比网上看网上大把大把的文档要快得多!作者:蕾学姐亚马逊云计算服务(Amazon Web Services,缩写为AWS),由亚…

【Hadoop】Zookeeper架构/特点

Zookeeper 中的角色主要有以下三类: Zookeeper需要保证高可用性和强一致性为了支持更多的客户端,需要增加更多Server,但是Server增多,意味着投票阶段延迟增大,会影响整个系统的性能。所以在3.3.0中ZK引入的新角色&…

json 反射java 实体_java反射实现javabean转json

BeantoModel->利用cglibBeanMap.create(src);直接将Bean装成Map,然后model._setAttrs(map)即可。ModeltoBean麻烦一点,最简单的方法是用json了。这个bean.dao.put应该是不对的,应该是bean.put吧,还有也不需要转换成map吧&#…

wpf 按钮样式_键盘 | 01.在程序集间引用样式

设置Button和TextBox的特定颜色和字体的样式和默认样式,并在程序集间引用。从零开始用WPF/C#开发一个键盘指示器项目完整开源、免费,不依赖第三方库编译好的先行版程序在微信公众号(香辣恐龙蛋)下载。文章同时发布在微信公众号(香辣恐龙蛋)、B站(香辣恐龙…

怎么去除表中的系统导出的字符_EXCEL非常有用的字符函数LEN、LENB,财务工作者的必备利器...

LEN函数与LENB函数是比较常用的函数,在实际中应用那是相当广的,尤其在财务工作中的使用频率是相当的高。我就一起看看实际工作中哪些地方用到了它。我们先简单说下它的用法,很简单,LEN(text)、LENB(text),两个用法是一…

laravel mysql视图_php-动态更新Laravel视图

我正在通过JS从API加载数据,将数据发送到Laravel控制器并将其保存到数据库中.加载所有Ajax之后,我想在master.blade的子视图/部分中显示数据-可以在页面加载完成后动态呈现视图,-稍后,我想更新数据库行并显示新的视图中的数据动态.//afater Ajax loading - update / display th…

python3打开excel_python3操作Excel (一)

安装:pip install openpyxlexcel表中有图像,需要安装pillow库。pip install Pillow代码:from openpyxl import Workbookwb Workbook()# grab the active worksheetws wb.active# Data can be assigned directly to cellsws[‘A1‘] 42# Rows can also…

java 获得json对象的属性值_JSON 获取属性值的方法

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习…

python常用包数据分析_数据分析领域常用的五个Python包

NumpyNumpy提供了两种基本的对象:ndarray和ufunc。ndarray是存储单一数据类型的多维数组,而ufunc是能够对数组进行处理的函数。Numpy的功能:N维数组,一种快速、高效使用内存的多维数组,他提供矢量化数学运算。可以不需…

python中空字符串的布尔值是什么_Python的布尔值与空值

Googlehack之Github hacksite:aircrk.com smtpsite:aircrk.com smtp mail.comsite:aircrk.com root passwordsite:aircrk.com smtp ...lock#ifndef lock_h #define lock_h #include #include #include "myd ...SQL2012删除作业失败的处理修改msdb数据库中的过程sp_delete_…

java软尾山地车碳_JAVA FURIA 27.5入门软尾山地车评测

铝合金车架、前后100mm避震行程、超短把立、长款燕把、27.5轮径……之前跟大家讲过,在这台车上你能拥有全避震车型所应该具备的所有基础元素。2个月的时间已经过去,这台车到底怎么样呢?我们一起来看一下。优点:质量靠谱&#xff0…

pytorch和python有什么区别_PyTorch到底好用在哪里?

先来回答一下你提的几个问题:Pytorch连最基本的maximum, minimum, tile等等这些numpy和tensorflow中最简单的运算都没有,用view来reshape还会报错contiguous(虽然我知道怎么解决),官方手册也查不到相应说明,这个东西到底好用在哪里…

java arraylist 过滤_关于java:ArrayList过滤器

本问题已经有最佳答案,请猛点这里访问。如何从Java ARAYLIST中筛选出一些东西,如:你好吗?你怎么做乔迈克过滤器是"怎样"的,它可以去除乔和迈克。这可能有助于stackoverflow.com/questions/122105/&helli…

如何下载python安装包的所有依赖_如何将包含所有依赖项的python包安装到Docker镜像中?...

我在Ubuntu 15.10中使用Docker容器为Pyspark jupyter / pyspark-notebook工作.我需要安装具有所有依赖项的folium并在容器中运行Pyspark脚本.我成功安装了Docker,拉出了图像并使用命令运行它docker run -d -p 8888:8888 -p 4040:4040 -v /home/$MYUSER/$MYPROJECT:/home/jovyan…

java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现

使用该lastIndexOf()方法在Java中查找字符串中字符的最后一次出现。假设以下是我们的字符串。String myStr "Amit Diwan";在上面的字符串中,我们将找到字符i的最后一次出现myStr.lastIndexOf(i);以下是完整的示例。示例public class Demo {public static…