3.6 IP 数据报的发送与转发

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!

文章目录

  • 前言
  • 1 主机发送 IP 数据报
  • 2 直接交付与间接交付
  • 3 路由器转发 IP 数据报
  • 4 习题分析


前言

在计算机网络中,数据传输的核心工作之一是通过 IP 协议将数据从源主机传递到目的主机。这一过程涉及到多个网络层的工作,特别是 IP 数据报的发送与转发。本章将详细介绍 IP 数据报的发送过程、判断目的主机是否在同一网络、以及数据报在路由器中的转发过程。


1 主机发送 IP 数据报

①应用层请求数据传输

数据传输的起点是应用层的请求。例如,一个 Web 浏览器想要通过 HTTP 协议请求一个网页数据,它会通过套接字接口调用传输层协议(如 TCP 或 UDP)进行数据传输。

②传输层封装数据

传输层协议(如 TCP 或 UDP)会接收到来自应用层的数据,封装成一个段(segment)。这个段会被加上必要的传输控制信息,如源端口、目标端口、序列号等。

③网络层(IP 层)封装数据

在网络层(即 IP 层),传输层的数据被封装成 IP 数据报。IP 数据报包含了以下信息:

  • 源 IP 地址:发送方的 IP 地址。
  • 目的 IP 地址:接收方的 IP 地址。
  • 协议类型:指示数据报上层使用的协议(如 TCP 或 UDP)。
  • 生存时间 (TTL):表示数据报能在网络中存活的最大跳数,防止数据包在网络中无休止地循环。
  • 头部校验和:用于检查数据报头部是否发生损坏。

数据报在 IP 层封装完毕后,会交给链路层进一步处理。


2 直接交付与间接交付

主机要决定是否可以直接将数据报发送给目的主机,还是通过默认网关(通常是路由器)进行间接交付。

在这里插入图片描述

  • 直接交付:如果目的主机在同一网络内,主机可以直接通过链路层(如以太网)发送数据帧到目的主机,数据包在到达目的主机时由目的主机的网络接口进行处理。

  • 间接交付(通过路由器转发):如果目的主机不在同一网络,数据报需要通过默认网关(路由器)进行转发。此时,主机将数据报发送给默认网关,路由器根据目标 IP 地址继续转发数据报。

在这里插入图片描述
判断是否在同一网络的过程如下:

  1. 获取目标 IP 地址和子网掩码
    主机通过自己的 IP 地址和子网掩码来判断目的主机是否在同一网络中。子网掩码定义了 IP 地址中的网络部分和主机部分。

  2. 计算网络地址
    使用目标 IP 地址和本地子网掩码进行位与(AND)操作,计算出目标地址所在的网络地址。

  3. 比较网络地址
    如果目标 IP 地址所在的网络地址与本地主机计算出来的网络地址相同,说明目的主机与本地主机在同一个网络内,数据报可以直接发送给目标主机。否则,数据报需要经过路由器转发。

    公式:

    本地网络地址 = 本地 IP 地址 & 子网掩码
    目标网络地址 = 目标 IP 地址 & 子网掩码
    如果本地网络地址 == 目标网络地址,则目的主机与本地主机在同一网络;反之,不在同一网络。
    

在这里插入图片描述


3 路由器转发 IP 数据报

当数据报到达路由器时,路由器的工作是根据目标 IP 地址在其路由表中查找最合适的路由,然后将数据报转发到下一个跳。路由器的转发过程如下:

①接收数据报
路由器从链路层接收到数据帧后,会从中提取出 IP 数据报。此时,路由器会检查数据报的首部信息,以便进行后续处理。

②校验数据报头部
路由器会检查数据报头部的校验和(Checksum)。如果校验和不正确,表示数据报在传输过程中可能发生了损坏。此时,路由器会丢弃数据报,并通过 ICMP 协议向源主机发送 “目的不可达” 或 “数据报损坏” 的错误报告。

③查找路由表
如果数据报头部没有错误,路由器会查找其路由表,以确定如何将数据报转发到下一个路由器或目的主机。路由表中包含了不同目标 IP 地址的路由信息,每一条路由条目包括:

  • 目标网络地址
  • 子网掩码
  • 下一跳地址(即下一跳路由器的 IP 地址)

路由器会根据数据报的目标 IP 地址在路由表中进行匹配。

④路由匹配与转发

  • 匹配成功:如果路由表中找到了与目标 IP 地址匹配的条目,路由器将数据报转发给路由表中指定的下一跳路由器或者直接连接的网络。
  • 匹配失败:如果路由表中没有找到匹配条目,说明该目标 IP 地址无法到达,路由器会丢弃数据报,并向源主机发送 ICMP “目标不可达”消息。

⑤更新 TTL(生存时间)
路由器会将数据报中的 TTL 值减 1。TTL 值用于避免数据包在网络中永久循环,如果 TTL 值减为 0,路由器会丢弃数据报,并向源主机发送 ICMP “超时”消息。

⑥转发数据报
在经过 TTL 更新后,路由器将数据报封装进新的数据链路层帧,并通过网络接口将数据帧发送到下一跳设备。如果目标是本地网络,路由器会直接交给目的主机进行处理。

在这里插入图片描述
在这里插入图片描述

4 习题分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

PH热榜 | 2024-12-13

1. AI Santa by Tavus 标语:随时随地,视频连线圣诞老人! 介绍:准备好迎接AI圣诞老人了吗?塔武斯公司推出的这款神奇的节日体验,能让你实时用30多种语言与圣诞老人对话,看看自己今年是乖孩子还…

双击 Origin 文件后打开软件只有空白没有任何窗口、或者打开后加载失败解决办法

这其实是因为你的文件并没有在 Origin 中打开,可以在标题栏确认 如果这里显示为 UNTITLED,就说明文件还没有在 Origin 中打开。如果你遇到此类问题,我们建议尝试以下方法。 方法 1 设 Origin 为打开 .opj/opju 文件时的默认应用程序 右键单…

【电子通识】电流倒灌为什么需要注意?

电流倒灌是一个很常见的问题,以“IO电流倒灌”为关键词在百度上进行搜索,可以找到很多相关案例。 电流倒灌问题在5V电平的单片机时代几乎不会发生,主要是因为5V单片的IO耐压值高,单片机内部结构对IO保护设计很好。 到了3.3V单片机时代,这类问题有一定的偶发性,但…

奇怪的知识又增加了:ESP32下的Lisp编程=>ULisp--Lisp for microcontrollers

ESP32下有MicroPython,那么我就在想,有Lisp语言支持吗?答案是果然有!有ULisp,专门为MCU设计的Lisp! 网址:uLisp - Lisp for microcontrollers 介绍:用于微控制器的 Lisp 适用于 Ar…

【竞技宝】LOL:JDG官宣yagao离队

北京时间2024年12月13日,在英雄联盟S14全球总决赛结束之后,各大赛区都已经进入了休赛期,目前休赛期也快进入尾声,LPL大部分队伍都开始陆续官宣转会期的动向,其中JDG就在近期正式官宣中单选手yagao离队,而后者大概率将直接选择退役。 近日,JDG战队在官方微博上连续发布阵容变动消…

得物App奢侈品鉴别能力再获A级资质认证

11月20日,在中国出入境检验检疫协会举办的“2024高端消费品检验鉴定与市场可持续发展大会”上传出消息,得物App因“先鉴别、后发货”保障正品的突出表现以及较高的消费者认可度,被中国海关科学技术研究中心授予“奢侈品鉴别(箱包类…

使用BMFont创建适用于Unity的艺术字

最近经常使用艺术字,虽然之前的工作经验我知道只需要修什么哪些就可以弄好艺术字的创建和间隔,所以打算做个总结,接下来分为以下几步(其中会有补充,最后会有如何解决unity艺术字的字距问题) 第1步 下载BMF…

websocket_asyncio

WebSocket 和 asyncio 指南 简介 本指南涵盖了使用 Python 中的 websockets 库进行 WebSocket 编程的基础知识,以及 asyncio 在异步非阻塞 I/O 中的作用。它提供了构建高效 WebSocket 服务端和客户端的知识,以及 asyncio 的特性和优势。 1. 什么是 WebS…

数据结构_树表的查找

平衡调整方法 四种类型的调整 LL型调整 RR型调整 LR型调整 RL型调整 // 以p为根的二叉排序树作右旋处理(LL void BST::rRotate(BiNode*& p) {BiNode* k p->lChild;p->lChild k->rChild;k->rChild p;p k; }// 以p为根的二叉排序树作左旋处理(RR void BST:…

51c~Pytorch~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11878447 一、PyTorch与torch-xla的桥接 文章从XLATensor开始的溯源、注册PyTorch库实现、从PyTorch调用到torch_xla三个方面来介绍PyTorch与torch-xla的桥接 XLA (Accelerated Linear Algebra)是一个开源的机器学习编…

TMS320C55x DSP芯片结构和CPU外围电路

第2章 DSP芯片结构和CPU外围电路 文章目录 第2章 DSP芯片结构和CPU外围电路TMS320C55x处理器的特点TMS320c55x CPU单元指令缓冲(Instruction Buffer Unit) I单元程序流程(Program Flow Unit) P单元地址数据(Address-data Flow Unit) A单元数据计算(Data Computation Unit) D单元…

实战攻防中针对JS路径的泄露和Webpack漏洞的初探

0x1前言 浅谈 这篇文章给师傅们分享下前段时间跟其他师傅学习和交流的Webpack相关漏洞,这个漏洞相对来说比较冷门,在web漏洞中不是那么的热度高,但是平常去挖掘和发现这个漏洞相对来说还是不难的。 后面要是有机会可以给师傅们分享下油猴的…

【人工智能基础08】卷积神经网络习题:卷积神经网络计算、图像填充、卷积的表达与设计

文章目录 1. 卷积核计算2. 卷积神经网络计算3. 卷积核关注的特征问题解答水平边缘检测与水平条纹检测45度条纹检测 4. 图像检测5. 卷积网络是特殊的全连接网络6. 输出矩阵的三种填充方法7. 卷积设计8.9 成像公式10. 卷积的计算次数11. 全连接层的计算 1. 卷积核计算 卷积操作过…

音乐网站设计与实现

文末获取源码和万字论文,制作不易,感谢点赞支持。 音乐网站设计与实现 摘 要 本音乐网站是针对目前音乐网站管理的实际需求,从实际工作出发,对过去的音乐网站管理系统存在的问题进行分析,结合计算机系统的结构、概念、…

【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章

文章目录 线性代数入门:机器学习零基础小白指南前言一、向量:数据的基本单元1.1 什么是向量?1.1.1 举个例子: 1.2 向量的表示与维度1.2.1 向量的维度1.2.2 向量的表示方法 1.3 向量的基本运算1.3.1 向量加法1.3.2 向量的数乘1.3.3…

SpringBoot——分层解耦、IOC、依赖注入

三层架构 如下图&#xff0c;创建Dao的接口以及该接口的实现类&#xff0c;Service也一样 Dao // Dao接口 public interface UserDao {public List<String> findAll(); }// Dao接口的实现 public class UserDaoImpl implements UserDao {// 加载用户数据Overridepublic …

【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序利用栈判断左、右圆括号是否配对。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;栈对括号的处理。 栈对括号的处理 &…

企业级日志分析系统ELK之ELK概述

ELK 概述 ELK 介绍 什么是 ELK 早期IT架构中的系统和应用的日志分散在不同的主机和文件&#xff0c;如果应用出现问题&#xff0c;开发和运维人员想排 查原因&#xff0c;就要先找到相应的主机上的日志文件再进行查找和分析&#xff0c;所以非常不方便&#xff0c;而且还涉及…

pyqt+ubuntu18.04+designer+测试是否安装成功

引用&#xff1a; Ubuntu Linux安装PyQt5并配置Qt Designer 在Visual Studio Code中使用PyQt5开发python GUI应用程序 Linux环境下在Vscode中安装和设置PyQt5插件 其中&#xff0c; 测试是否安装成功 1、设置好之后在vscode编辑器的左侧文件目录栏空白位置右键&#xff0…

torchaudio.load 段错误

使用 torchaudio.load 时出现崩溃&#xff0c;如图 解决&#xff1a; 安装 ffmpeg ​conda install ffmpeg -c conda-forge 尝试但没解决问题的方法包括 重装 cuda&#xff0c;重装 pytorch&#xff0c;安装 PySoundFile、SoundFile、sox。