【网络面试必问(6)】IP协议对网络包的转发

news2024/11/24 12:46:10

 接上一篇:【网络面试必问(5)】网络收发数据及断开服务器(四次挥手)

 在之前的博客中,我们提到过,网络传输的报文是有真实的数据包和一些头部组成的,目前我们了解的头部就有TCP头、IP头、MAC头,而且这三个头部信息都是在应用程序委托给协议栈之后,被写入的相关信息,这些头部都是跟网络包的转发和传递有关系的。前面我们学习了TCP协议对网络包的拆分、重发、三次握手四次挥手等机制,这一篇博客看一下,在IP协议中,如何借助于IP头部和MAC头部实现对网络报文转发的。

在这里插入图片描述

1. 网络包添加头部信息

 在IP协议中,包转发的起点是在网络包的头部添加IP头部和MAC头部。这里先了解这两个概念,IP头部是跟IP地址相关的,也就是通过IP地址要知道最终应该把包发送给这个IP对应的服务器,这个目的地的IP地址自始至终不会发生变化。MAC头部则是跟以太网协议相关,他记录的是网络线路中最近的、将要到达的路由的MAC地址,随着包在路由器之间相互传递,这个MAC地址会被修改为将要到达的下一个MAC地址。

1.1 IP头部

 IP头部,顾名思义记录的就是跟收发双方IP地址相关的控制信息,这一动作是由IP模块添加到网络包头部的,这里面最重要的就是IP地址,这个IP地址就是TCP模块告知给IP模块的,还记得我们在TCP连接阶段,调用Socket库的时候入参的IP地址吗?connect(<套接字描述符>, <服务器IP地址>, <服务器端口号>, ...),IP协议只会负责将包发送给此IP对应的服务器,至于中间的丢包、重试统统不管,这是TCP模块该做的事情。我们看下IP头部的格式:

在这里插入图片描述
 这里面除了接收方IP地址之外,还有发送方IP地址,发送方地址这里会涉及到一个知识点,对于大部分计算机来说,一台计算机装有一个网卡,没问题,这个IP地址就是这块网卡上的,但是对于有多个网卡的性能优异的计算机,就代表这有多个IP地址,那么发送方的IP地址应该写哪个呢,也即是应该通过哪块网卡将消息发送出去呢?

 这里就需要通过IP路由表去确定应该使用那一块网卡,我们来使用一个命令``route print`可以看到这张位于计算机上的路由表。

在这里插入图片描述
 举个例子,现在我们要向IP地址未192.168.1.233的服务器上发消息,根据子网信息192.168.1.x就可以匹配到第6行192.168.1.0的这一行。我们看下这几列分别表示什么意思:

  • destination 目标的子网地址
  • netmask 子网掩码,和目标IP地址可以确定子网地址
  • gateway 网关,这里指的是路由器的IP地址
  • interface 接口,这里指的就是我们要找到网卡ip地址。

 通过路由表,我们确定了第6行的interface10.10.1.16就是我们要使用的网卡,这样,消息就知道要在哪里发送出去了。

1.2 MAC头部

 在IP头部添加完成后,还需要再IP头部前面添加MAC头部,MAC头部是以太网使用的头部,包含发送方和接收方的MAC地址信息。

 我们首先来看下MAC头包含的完整信息。

在这里插入图片描述
  这里面,首先看以太类型,和IP头部的协议号类似,表明当前是那种协议的网络包,我们使用IP协议,就是16进制的 0800。另一个信息是发送方的MAC地址,其实也好找,前面我们已经确定好了是由哪块网卡发送网络消息了,因此读取这块网卡的MAC地址就可以了。MAC地址是厂家在生产的时候烧录在ROM里面的,一般不会变动,长度48个bit。
在这里插入图片描述

 然后就是发送方的MAC地址了,从发送开始,我们无从得知接收方的MAC地址是什么,也就是应该把消息发送到哪一块网卡。这里就需要ARP协议和路由表了,在首次发送网络包的时候,ARP协议会通过广播的形式,向子网中的所有网络设备发送消息,发送请求询问当前接收方IP地址由哪块网卡做转发。如果子网中确实有这样一块网卡转发此IP的网络包,就会回复消息,这样接收方的MAC地址就确定了,其实就确定了应该把网络包发送到哪个网卡上。

在这里插入图片描述
 需要注意的是,并不是每次查询MAC地址都需要发送广播请求,因为ARP缓存会把前一次查询的结果缓存下来,几分钟会过期,所以这里可能会有子网设置网络信息变动,导致实际情况和ARP缓存不一致的情况。

 经过上述处理,发送方和接收方的MAC地址都知道了,就可以发送包含了MAC头部和IP头部的网络包了。在现实生活中,我们可以把IP头部信息比作快递中填写的收件人的地址,是不会变的,而MAC地址是邮递过程中,作为中转站的不同快递站点,是可以发生变化的,最终目的就是为了找到收件人的地址。

2. 将网络包转换成光/电信号发送到接收方

 网络包是存放在内存中的二进制数据,并没有办法直接发送给对方,要想通过网线或者光纤发送给对方,还需要转换成光或者电信号发送出去。

 负责这一操作的就是网卡,网卡是硬件,本身也没法独立完成这个转换,因此还需要网卡的驱动程序来控制网卡完成这个转换。在操作系统启动之初,网卡驱动程序会对网卡进行初始化,这里会包含错误检查,初始这是、mac地址设置等等,这个MAC地址是全世界独一无二的。

2.1 MAC模块添加报头、起始帧分界符和帧校验序列

 网卡驱动程序从IP模块获取到网络包信息之后,会将其复制到网卡的缓存中,然后调用MAC模块,完成发送包的命令。那么MAC模块在这期间,完成了哪些工作呢?

 首先,mac模块读取缓冲区中的数据,然后在网络包的起始位置添加上报头起始帧分界符(SFD),在末尾添加上用于检测错误的帧校验序列

在这里插入图片描述

  • 报头:用来测定读取报文的时机,报头的0和1变化频率是和时钟信号变化频率同步的,因此接受方通过一段时间对报头的0和1变化观察,就能找到固定的变化周期,确定时钟信号的发送的频率。
  • 起始帧分界符(SFD):在经过一段报头的数据之后,会有一段长度为8个比特的起始帧分界符,起始帧分界符的末尾比特排列有少许的变化,用以告诉读取的一方,报头将要结束, 接下来要读取的就是正式的数据包。
  • 帧校验序列(FCS):是在包末尾的、长度为32比特的序列,是通过一个公式计算出从包头到包尾的内容,用以接收方在接收到网络包之后对数据包进行校验,避免中间发生数据错误。

在这里插入图片描述

2.2 发送网络包

 当网络包封装好之后,就会向以太网中发送信号,MAC模块就会从包头开始将数字信息按照每个比特转换成电信号,然后由信号收发模块发送出去,这里将数字信息转换成电信号的速率就是我们常说的网络传输速率,例如每秒把10Mbit的数字信息转换成电信号发送出去,这里的网速就是10Mbit。

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

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

相关文章

VueUse、View Transitions API实现暗黑模式主题动画切换效果

VueUse、View Transitions API实现暗黑模式主题动画切换效果 前言View Transitions API兼容版本 VueUse 正题效果安装代码 作者GitHub&#xff1a;https://github.com/gitboyzcf 有兴趣可关注&#xff01;&#xff01; 前言 View Transitions API View Transitions API 是原生…

华东理工大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交华东理工大学任意中危或以上级别漏洞 证书规格&#xff1a;附送图二实物及封皮

[ Linux Busybox ] nandwrite 命令解析

文章目录 相关结构体nandwrite 函数实现nandwrite 实现流程图 文件路径&#xff1a;busybox-1.20.2/miscutils/nandwrite.c 相关结构体 MTD 相关信息结构体 struct mtd_info_user {__u8 type; // MTD 设备类型__u32 flags; // MTD设备属性标志__u32…

【Proteus仿真】【STM32单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能&#xff1a; 系统运行后&a…

汽车标定技术(七)--基于模型开发如何生成完整的A2L文件(2)

目录 1. 自定义ASAP2文件 2. asap2userlib.tlc需要修改的部分 3. 标定量观测量地址替换 3.1 由elf文件替换 3.2 由map文件替换 3.3 正则表达式&#xff08;含asap2post.m修改方法&#xff09; 4.小结 书接上文汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)-C…

考研408-计算机网络 第二章-物理层学习笔记及习题

第二章 物理层 一 通信基础 1.1 物理层基本概念 1.1.1 认识物理层 物理层目的&#xff1a;解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是具体的传输媒体。 物理层主要任务&#xff1a;确认与传输媒体接口有关的一些特性&#xff0c;需要进行定义标…

Kafka(消息队列)--简介

1、kafka&#xff1a; 是一个高吞吐的分布式消息系统&#xff0c;与Hdfs比较相似&#xff0c;但是与hdfs的区别是在于hdfs是存储的是历史的、海量的数据&#xff0c;然而kafka存储的是实时的、最新的数据。 2、消息队列&#xff1a; 指的是在Kafka中的数据队列。可以存放数据在…

华为数通方向HCIP-DataCom H12-831题库(多选题:141-160)

第141题 项目实施方案主要包含哪些项? A、风险控制措施 B、人员安排 C、时间规划 D、割接流程 答案:ABCD 解析: 项目实施方案主要包括:时间规划、人员安排、割接流程、风险控制措施。 第142题 以下哪些广域网链路属于报文交换网? A、PSIN B、ISDN C、X.25 D、ATM E、MSTP…

大语言模型(LLM)综述(六):大型语言模型的基准和评估

A Survey of Large Language Models 前言7 CAPACITY AND EVALUATION7.1 基本能力7.1.1 语言生成7.1.2 知识利用7.1.3 复杂推理 7.2 高级能力7.2.1 人类对齐7.2.2 与外部环境的交互7.2.3 工具操作 7.3 基准和评估方法7.3.1 综合评价基准7.3.2 评估方法 7.4 实证评估7.4.1 实验设…

数字化工厂的实施挑战与解决方法

随着科技的快速发展&#xff0c;数字化工厂成为现代制造业的重要趋势之一。数字化工厂通过整合信息技术和制造技术&#xff0c;可以提高生产效率、降低成本、优化资源利用&#xff0c;同时也给企业带来了更多的挑战。 1. 技术挑战 数字化工厂实施过程中最大的挑战之一是技术方…

运动耳机怎么选?精选五款优秀的运动耳机分享

​对于喜欢运动的我来说&#xff0c;不管是在室内健身&#xff0c;还是在户外跑步&#xff0c;我都会边运动边听歌&#xff0c;运动耳机里放着自己喜欢的音乐会很放松。然而&#xff0c;市面上的运动耳机品牌和型号众多&#xff0c;质量参差不齐。今天&#xff0c;我们就为大家…

ZKP8.2 FRI (Univariate) Polynomial Commitment

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 8: FRI-based Polynomial Commitments and Fiat-Shamir (Justin Thaler) 8.2 FRI (Univariate) Polynomial Commitment Recall: Univariate Polynomial Commitments Initial Attempt from Lecture 4 (Merkle Tree) Fixing…

AI智能助理源码系统+智能创作 带完整搭建教程

大家好啊&#xff0c;罗峰今天来给大家介绍一款AI智能助理源码系统。 以下是部分核心功能实现代码模块 系统特色功能一览&#xff1a; 高效便捷&#xff1a;AI智能助理能够帮助用户完成各种任务&#xff0c;无论是写作、论文、代码、小说、创意策划&#xff0c;还是Excel表格…

【Node.js入门】1.1Node.js 简介

Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.j…

如何利用ChannelPipeline在Netty中搭建无懈可击的数据处理流水线?

在上篇文章&#xff08;Netty 入门 — ChannelHandler&#xff0c; Netty 的数据加工厂&#xff09;提到 ChannelHandler 虽然是一个好的打工人&#xff0c;但是在我们实际业务线中&#xff0c;他不可能一个人干所有的活啊&#xff0c;毕竟都 21 世纪了&#xff0c;我们是要讲究…

通过对多个思维链进行元推理来回答问题11.8

通过对多个思维链进行元推理来回答问题 摘要1 引言2 背景3 方法3.1 生成推理链3.2 对推理链进行元推理 4 实验4.1 实验设置4.1.1 数据集4.1.2 方法 摘要 现代的多跳问题回答&#xff08;QA&#xff09;系统通常将问题分解为一系列推理步骤&#xff0c;称为思维链&#xff08;C…

基于SSM的旅游管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

el-select下拉框默认显示全部选项

这里一直不默认显示全部,但这部分代码是正确的, 经过查询发现: 所以找到了这段: 发现之前role_id和status是 修改成0后就可以默认选中全部选项了

程序设计:控制台输出二叉树 二叉树的形象显示

本文指导你编写一个输出到字符控制台的形象的二叉树展示。 目录 一般的Tree显示方式 理想的显示方式 实现方法 计算显示位置 输出数据 计算显示位置的代码 输出数据的代码 一般的Tree显示方式 编写二叉树算法时调试是很头疼的&#xff0c;如何显示成一目了然的树结构呢…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发003:架构搭建-需求分析及TCP通信方式的实现

文章目录 1 项目总体架构2 项目需求2.1 服务器职责2.2 消息的格式和定义 3 基于Tcp连接的通信方式3.1 通道层实现GameChannel类3.1.1 TcpChannel类3.1.2 Tcp工厂类3.1.3 创建主函数&#xff0c;添加Tcp的监听套接字3.1.4 代码测试 3.2 协议层与消息类3.2.1 消息的定义3.2.2 消息…