同一局域网内通信:用ARP来解决
地址解析协议ARP解决这个问题的方法是在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常更新动态。
每一个主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。

假设:主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A向本局域网上的主机B发送数据包时,先在其在ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查找其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。
若无(B刚入网或A刚加电的情况),A就自动运行ARP,找出B的硬件地址,步骤如下:
1、ARP进程在本局域网上广播发送一个ARP请求分组,ARP请求分组的主要内容是:“我的IP地址是192.168.1.1,硬件地址是0A-11-22-33-44-01。我想知道IP地址为192.168.1.2的主机的硬件地址”。
2、在本局域网上的所有主机上运行的ARP进程都会受到此请求分组。
3、主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下该ARP请求分组,并向主机A发送ARP响应分组,并在这个响应分组中写入自己的硬件地址。其他主机的IP地址由于和请求分组中的IP不匹配,因子都丢弃这个ARP请求分组。ARP响应分组的主要内容是表明:“我的IP地址是192.168.1.2,我的硬件地址是0A-11-22-33-44-02”。
请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
4、主机A收到B的ARP响应分组后,就在其ARP高速缓存中写入B的IP地址到硬件地址的映射。

ARP高速缓存的好处是:当主机A向B发送数据报时,为了减少网络上的通信量,主机A发送其ARP请求分组是,就把自己的IP地址和硬件地址写入ARP请求分组中,当B收到A的请求分组是,就把A的地址映射写入自己的ARP高速缓存中,以后A和B就可以方便地通信了。但ARP高速缓存有生存时间,不能一直保存。

不同局域网内通信:用ARP和路由器来解决
假设主机A到主机B的通信路径是:主机A(网1)->路由器R1->主机P(网2)->路由器R2->主机B(网3)
1、主机A发送给主机B的IP数据报时,首先A发送ARP请求分组(在网1上广播),找到网1上的路由器R1的硬件地址,剩下的工作由R1来完成。
2、R1把IP数据报转发到网3上的主机B。B与R1不在一个网络,此时R1发送ARP请求分组(在网2上广播),找到连接在网2上的R2的硬件地址,剩下的工作由R2来完成。
3、R2把IP数据报转发到同一网络的主机B,此时R1发送ARP请求分组(在网2上广播),找到目的主机B的硬件地址。

注:为什么不直接用硬件地址进行通信?
由于全世界存在各式各样的网络,它们使用不同的硬件地址。要使这些异构网络相互通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不肯能的。但统一的IP地址相互通信就更简单,因为上述调用ARP的复杂过程是有计算机软件自动进行的,对用户来说是看不见这种调用过程的。

两个主机之间如何通信相关推荐

  1. 【网络通信与信息安全】之深入解析两台主机之间的通信过程和原理

    一.前言 本文通过在 Docker 容器中执行命令,来深入了解两台主机之间的通信过程.阅读完本文,您将熟悉以下内容: Docker 的基本操作: 创建 socket 并发送 HTTP 请求: 路由表. ...

  2. #两台主机之间通信时为什么要用IP地址,而不直接用硬件地址?

    两台主机之间通信时为什么要用IP地址,而不直接用硬件地址?   既然在网络链路上传送的数据帧最终是用硬件地址来寻找目的主机,为什么还要用IP地址进行通信,为什么不直接是用硬件地址进行通信?   首先要 ...

  3. windows备份与还原和两个主机的相互通信

    DAY02Windows 实验一: 实验名称:windows系统的备份与还原 实验描述:为了保证系统的安全对系统做备份与还原操作系统 实验拓扑: 实验步骤: 步骤一:将急救大师软件安装在虚拟机的系统上 ...

  4. 实现两个主机之间的密钥分发和安全传输

    实现两个主机之间的密钥分发和安全传输 一.设计要求 编写一段程序,实现两个主机之间的密钥分发和安全传输. 要求: 用 RSA 算法实现两个主机之间的密钥分发,分发的密钥为 0x 01 23 45 67 ...

  5. Linux 两台主机之间建立信任关系方式及基本原理

    前言: 去年学过一段时间的现代密码学,最近在配置github, Linux主机之间建立信任关系的时候都用到了其中一些知识,所以刚好整理一下,想直接看操作方式的可直接拉到下面 密码学基本知识 一 现代密 ...

  6. Linux两台主机之间建立信任关系

    Linux两台主机之间建立信任关系 一般用ssh命令访问另一台机器,或者用scp命令从别的机器拷贝数据和文件,都要输入对应账户的密码.而在两台机器之间建立信任关系,则可以省略输入密码的过程. 一  : ...

  7. STM32CubeMX(8)——利用HC-05实现两个单片机之间的通信

    利用HC-05实现两个单片机之间的通信 文章目录 利用HC-05实现两个单片机之间的通信 前言 一.硬件准备 二.软件介绍 三.利用软件使用AT指令修改蓝牙模块主从关系 1.设定两个蓝牙的主从关系 2 ...

  8. Activity——两个Activity之间的通信

    目录 两个Activity之间的通信 第一个Activity 第二个Activity 不积跬步,无以至千里:不积小流,无以成江海.要沉下心来,诗和远方的路费真的很贵! 两个Activity之间的通信 ...

  9. Linux虚拟机之间的通信以及与Windows主机之间的通信

    Linux虚拟机之间的通信以及与Windows主机之间的通信 参考 1.打开vm,选择编辑选项,打开其下的虚拟网络编辑器,如下图所示: 2.查看电脑主机的ip地址,win+R输入cmd回车,进入cmd ...

最新文章

  1. 数据库本地的sa有个叉号_搞定sql数据库出错,做自己的大神!
  2. rxjs里的Observable对象和map配合的一个用法
  3. jQuery Mobile 手动显示ajax加载器,提示加载中...
  4. qt乱码Could not decode“xxx.cpp“ with “UTF-8“-encoding.Editing not possible问题处理
  5. 【日常排雷】 .Net core 生产环境appsetting读取失败
  6. apache fop_Apache FOP与Eclipse和OSGi的集成
  7. Java 8 Iterable.forEach()与foreach循环
  8. MySQL数据库(八)
  9. win8 机器硬盘异响
  10. 离婚了我们先同居 (转贴)
  11. arm方案商,三星S5P6818开发板ARM Cortex-A53架构
  12. 电脑操作系统(Androidx86、Windows、Linux)说明
  13. C语言实现可写入文件的账号密码登录系统,密码输入时掩盖,登录界面菜单选择,更改密码系统,课设必备。
  14. jvm性能分析工具之-- Eclipse Memory Analyzer tool(MAT)(二)
  15. 嵌入式设备驱动(实战)
  16. KD树+BBF+KNN使用C#实现(3)
  17. wpf datagrid设置右键菜单打开时选中项的背景色
  18. 基于python实现的图像绘制(二维散点图、饼图,绘制三维的直方图、线图、散点图、利用pyecharts在地图上绘制各种图标)
  19. Java实战之管家婆记账系统(4)——用户注册及登录功能实现
  20. 【Unity编辑器扩展】(二)PSD转UGUI Prefab, 图层解析和碎图导出

热门文章

  1. Android 博客周刊13期
  2. 浅谈一下单片机的定时器功能
  3. 非全凉凉!武汉大学不允许18级19级非全日制硕士研究生参加校招?
  4. Hexo下魔改NexT主题
  5. GIT 命令和SVN 定版
  6. 冯诺依曼机器的并发—带着脚镣跳舞
  7. S-LOAM 最简单的激光SLAM
  8. 让人看比较舒服的十种颜色
  9. C语言编程>第二十五周 ③ 下列给定程序中,函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成……
  10. python矩阵乘法 点乘_转(matlab和numpy矩阵乘法异同)