不同子网络中的通信过程

这篇具有很好参考价值的文章主要介绍了不同子网络中的通信过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从输入www.baidu.com经历了什么

一、DNS(网址->IP)

不同子网络中的通信过程,嵌入式,计算机网络

 二、ARP(IP->MAC)

  1. A->B:有数据发送,数据封装ip之后发现没有主机B的mac地址。然后ARP在本网段广播:检查目标地址和源地址是否在同一网段,①在同一网段,返回目标ip对应的mac。②不在同一网段,需要默认网关的ip和mac信息。(局域网默认网关一般可以由路由器充当)。
  2. 显然不在一个网段。主机将数据包先放到缓存中,然后广播ARP查询报文:封装自己的mac地址为源mac目的mac地址全写F(作为广播地址),请求本局域网的默认网关mac地址
  3. 路由器收到广播数据包,发现是请求自己的mac地址。首先将源地址的mac添加到自己的mac地址表中。然后路由器单播一个ARP应答:封装自己的ip地址为源ip自己的mac地址为源mac,主机A的ip为目的IP主机A的mac为目的mac。
  4. 主机(A)收到应答包后,将默认网关mac地址+目的地址ip(跨网关通信,其他网段ip地址对应的mac均为默认网关的mac),然后将缓存中的数据包,封装默认网关mac地址后进行发送。(前面已经封装了目的ip)。
  5. 路由收到数据包,检查目的ip地址,发现不是给自己的,需要进行路由,然后查询路由表,确定是需要发往另外一个网段中B的ip地址。路由发送之前查询mac地址表,发现没有主机B的映射。路由器广播arp请求查询主机B的mac地址(原理同2、3步,主机B收到请求后首先会添加网关的mac地址,然后单播回复arp请求)。
  6. 路由器得到主机B的mac地址映射后,也将其添加到路由器的mac地址表中,重新封装数据包的源地址mac和ip(路由器的ip和mac作为源地址,目的地址仍然是主机B信息),发送给主机B。(多级网关(路由)就这样一级一级下去)。
  7. 主机B收到数据之后,进行处理,发送过程结束。
  8. 如果主机B收到数据后进行回复,主机B会进行地址判断,不在同一网段,然后决定是否将数据发送给网关,主机B查询mac地址表获得网关mac地址,将数据封装后发送(arp地址解析的过程不再需要了,mac地址表条目有一定的有效时间),网关收到数据后直接查询mac表,将二层帧mac地址更改为A的mac发送出去。如此,主机A收到主机B的回复。

综上,跨网段通信过程中有以下过程:

1、判断地址是否同一网段;
2、查询目的ip地址对应的mac地址(发送arp请求);

此外需注意点:

1、ARP请求以广播发送(1对n)、以单播回应(1对1);
2、路由器隔离广播。每一个网段都是独立的广播域(arp只能在本网段广播);
3、跨越网段通信需要使用默认网关的mac地址;

三、NAT(不同子网下设备地址的映射)

跨网段通信需要使用网关建立链接;(局域网1到局域网2,此情况下一般路由器充当网关);
局域网访问公网服务器需要使用NAT网关进行地址映射;

1、局域网中的一台主机 A如何与外网服务器通信?
        局域网中的主机A,想要访问外网服务器时,是通过NAT,将局域网ip地址+端口映射成外网ip地址+端口(NAT网关会记录映射表)。也就是说要与外网地址通讯,实际上也是需要一个外网地址。

2、服务器的返回数据包,是如何找到内网的客户端主机A,并将数据传给主机A上运行的程序P呢?
        服务器返回消息时,返回到NAT,NAT根据映射表找到当时局域网内的ip+端口,并发送到局域网内的目标机器上,并发给对应的程序P;(ip+端口号确定应用程序P)。

四、其他基础

1、局域网使用的IP地址范围:

        A类地址:10.0.0.0 - 10.255.255.255
        B类地址:172.16.0.0 - 172.31.255.255
        C类地址:192.168.0.0 -192.168.255.255

2、TCP/IP四层模型常用协议:

        应用层:http、DNS、FTP
        传输层:TCP/UDP
        网络层:IP、ICMP(ping命令,核心也就是发送ARP报文进行地址探测)
        网络接口层:ARP(ip->mac)、RARP(mac->ip)

3、OSI7层模型下设备工作层:

        路由器:网络层
        交换机:数据链路层
        集线器:物理层文章来源地址https://www.toymoban.com/news/detail-675601.html

到了这里,关于不同子网络中的通信过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式学习笔记——IIC通信

    本文接着之前的M4系列介绍,对另外一个十分常见的通信总线进行一个介绍,就是IIC总线。 首先,还是找个免费劳动力来做一个官方的介绍,下面这一段话非常全面的介绍了IIC的各个特征,用之前提到的通信特征来总结,IIC是一种串行,同步,半双工,板级有线通信。与SPI对

    2024年02月06日
    浏览(49)
  • 嵌入式学习笔记——SPI通信

    之前已经介绍了STM32的ADC、DMA、EXTI、TIME、NVIC、USART以及普通IO模式,此系列笔者还打算写最后三个大的内容,分别是SPI通信、IIC通信以及看门狗,后面就看大家的需求了,需要什么可以留在评论区,本文首先来介绍SPI的有关知识。 在通信协议分类的介绍中,提到过SPI,它是一

    2023年04月09日
    浏览(31)
  • 五种嵌入式经典通信总线协议

    并行通信和串行通信是两种不同的数据传输方式: 并行通信:并行通信是指在同一时间使用多条并行传输的线路传输多个比特的数据。每个比特使用独立的线路进行传输,同时进行。这样可以在一个时钟周期内传输多个比特,提高传输速率。并行通信常用于短距离高速数据传

    2024年01月17日
    浏览(41)
  • 《嵌入式系统开发实践》实验三 进程通信

    一、 实验目的 掌握无名管道与有名管道的进程通信; 掌握消息队列的读写操作; 掌握共享内存的通信机制。 二、 实验任务与要求 管道读写程序的编写与应用; 消息队列的发送和接收程序的编写和应用; 共享内存的创建、连接和分离编程和应用。 三、 实验工具和环境

    2024年02月07日
    浏览(33)
  • 嵌入式五大通信协议详解 (一) UART

    GUN C编译器拓展语法学习笔记(一)GNU C特殊语法部分详解 GUN C编译器拓展语法学习笔记(二)属性声明 GUN C编译器拓展语法学习笔记(三)内联函数、内建函数与可变参数宏 数组存储与指针学习笔记(一)数据类型与存储、数据对齐、数据移植、typedef   通用异步收发传输器

    2024年02月05日
    浏览(43)
  • 【无标题】嵌入式开发-IIC通信介绍

    IIC(Inter-Integrated Circuit)是一种两线式串行总线协议,用于连接微控制器及其他外围设备。在IIC总线上的数据传输速率可以是标准模式(100Kbit/s),快速模式(400Kbit/s)和高速模式(3.4Mbit/s)。 IIC的起始和停止条件由SCL(Serial Clock Line,串行时钟线)和SDA(Serial Data Line,串行

    2024年02月10日
    浏览(33)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(58)
  • 【蓝桥杯嵌入式】蓝桥杯嵌入式第十二届省赛题,考点:模拟电压,串口通信,计时器

     🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式

    2023年04月09日
    浏览(43)
  • python+嵌入式——串口通信篇(收发解包)

    这几年,自己也做了一些嵌入式机器人。在整个开发的过程中,调通信通常会花费一段比较长的时间,串口通信就是这样的一个部分。 而现在在百度上进行搜索,发现对python串口通信的博客讲解,都有点太笼统了,这其中,应该与python在处理硬件底层速度较慢导致用的人少有

    2024年02月07日
    浏览(38)
  • 【嵌入式】openmv与stm32的串口通信

    参考:(文中部分图/文字/代码来自以下文章,部分内容由于时间久远已经找不到原作者,可联系注明或删除) PYTHON串口数据打包发送STM32接收数据解析 openmv中文文档 这里以openmv循迹代码为例 main.py 关于struct.pack: 函数原型:struct.pack(fmt, v1, v2, …) fmt是格式字符串 v1,v2是要转

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包