跨子网通信的具体流程

ops/2024/11/28 1:34:16/

  1. TCP/IP 数据包的封装(发送方)

    • TCP 封装:应用程序的数据被 TCP 协议封装为一个 TCP 数据段,包含序列号等信息。
    • IP 封装:TCP 数据段被 IP 协议封装为一个 IP 数据包,包含源 IP 和目标 IP 地址。
    • MAC 封装
      • 发送方通过路由表判断目标 IP 是否在同一个子网。
      • 如果目标 IP 不在同一子网,发送方将目标 MAC 地址设置为默认网关的 MAC 地址。
      • 数据帧的 MAC 头部填充默认网关的 MAC 地址,IP 数据包作为负载被包含在 MAC 帧中。
  2. 发送到默认网关

    • 数据帧从发送方的网卡发出,经过交换机或无线 AP,发送到默认网关。
    • 默认网关的网卡收到数据帧后,解析 MAC 头,确认自己是接收方(MAC 地址匹配),然后将 MAC 层信息移除,保留 IP 数据包。
  3. 路由器的处理(默认网关)

    • 路由器检查 IP 数据包的目标 IP 地址。
    • 在路由表中查找目标 IP 所属的子网。
      • 如果目标子网与路由器直连:
        • 路由器发起 ARP 请求,查找目标 IP 对应的 MAC 地址。
        • 路由器将新的目标 MAC 地址封装到数据帧中。
      • 如果目标子网不与路由器直连:
        • 路由器会将数据包转发给下一跳路由器(使用下一跳的 MAC 地址)。
        • 这一过程会重复,直到数据到达目标子网。
  4. 数据到达目标子网

    • 当数据到达目标子网时,最终的路由器会通过 ARP 找到目标设备的 MAC 地址。
    • 路由器将目标设备的 MAC 地址封装到 MAC 帧中,最终将数据发送到目标设备。
  5. 目标设备接收数据

    • 目标设备的网卡接收到数据帧后,解析 MAC 头,确认自己是接收方(MAC 地址匹配)。
    • 提取 IP 数据包,再逐层向上解析,最终还原应用程序数据。

关键点解析

  1. 在发送设备处

    • TCP 和 IP 的封装工作在发送方就完成,源 IP 和目标 IP 是固定的,不会在传输过程中修改。
    • MAC 地址的封装是动态的,因为 MAC 地址只在当前的局域网内有效。
  2. 默认网关的作用

    • 如果目标设备不在同一子网,默认网关(路由器)会作为中介,接管数据。
    • 路由器的作用是通过其路由表找到目标网络的位置。
  3. ARP 的使用

    • 在局域网内(包括路由器连接的子网),MAC 地址通过 ARP 广播查找。
    • 如果目标设备的 MAC 地址未缓存,路由器会广播 ARP 请求获取目标设备的 MAC 地址。
  4. MAC 和 IP 的动态配合

    • IP 地址是逻辑的,指明最终的目标。
    • MAC 地址是物理的,用于局域网内的传输,目标可能是下一跳路由器,也可能是最终设备。

通俗解释:

那我的理解就是tcp,ip都是在第一个发送的设备处就可以包好,然后如果接受方和自己不在一个子网中,就包上默认网关的mac发送过去,默认网关接收到之后去掉mac头部尾部,然后在路由表里查找有没有接收方的ip,如果有的话就arp广播找到mac地址包上之后发过去


http://www.ppmy.cn/ops/137229.html

相关文章

在Linux中备份msyql数据库和表的详细操作

目录 前情提要 一、备份mysql数据库 原库展示 (一)新建一个数据库 (二)在linux根目录下找个位置暂时存放 (三)临时sql还原真正存放到库中 (四)查看是否备份成功 备份库成功展示 二、备份表的操作 ​编辑 原表emp展示 (一)快速新建一个原结构相同的表 (二)原表所…

一文详细了解websocket应用以及连接断开的解决方案

文章目录 websocketvite 热启动探索websocket -心跳websocket 事件监听应用过程中问题总结 websocket Websocket简介 定义和工作原理 Websocket是一种在单个TCP连接上进行全双工通信的协议。与传统的HTTP请求 - 响应模式不同,它允许服务器主动向客户端推送数据。例…

pytest 通过实例讲清单元测试、集成测试、测试覆盖率

1. 单元测试 概念 定义: 单元测试是对代码中最小功能单元的测试,通常是函数或类的方法。目标: 验证单个功能是否按照预期工作,而不依赖其他模块或外部资源。特点: 快速、独立,通常是开发者最先编写的测试。 示例:pytest 实现单…

网络知识1-TCP/IP模型

从用户端到服务端,tcp/ip模型可分为应用层、传输层、网络层、网络接口层 以下使用寄快递为例进行解释 应用层职责: 只关注与为用户提供应用功能,如HTTP、FTP、telnet、DNS、SMTP等 ,应用层的职责就像我们寄快递时将快递给快递员…

CMake Qt Debug/Release可执行文件增加图标

将logo.ico复制到CMakeLists.txt的同级目录下,然后新建logo.rc文件,里边输入如下代码 IDI_ICON1 ICON DISCARDABLE "logo.ico"CMakeLists.txt修改此处 ADD_EXECUTABLE(${ModuleName} ${KIT_SRCS} ${QRC_SRCS} ${UISrcs} ${MOC_OUTPUT} logo.…

2062:【例1.3】电影票(http://ybt.ssoier.cn:8088/problem_show.php?pid=2062)

时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少? 【输入】 输入x。 【输出】 人数和电影票总价,中间用一个空格隔开。 【输入样例】 2 【输出样例】 2 20 提交…

SpringBoot(三十八)SpringBoot-mybatis开启事务

在浏览myBatis相关文档的时候,突然想到一个小问题,到目前为止,好像我还没有使用过事务,这个不太应该。 这里我们刚好来测试一下事务叭。 一:添加pom依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifact…

Kotlin深度面试题:协程、密封类和高阶函数

文章目录 知识回顾前言源码分析1.面试题目1&#xff1a;Kotlin中的协程与线程的区别是什么&#xff1f;如何在Android中使用协程进行异步编程&#xff1f;2.面试题目2&#xff1a;Kotlin中的扩展函数和扩展属性是什么&#xff1f;如何在Android开发中使用它们&#xff1f;3. 面…