RFC 791 (2) - Overview

目录

总览

操作

Addressing 与 Fragmentation

Addressing

Fragmentation


总览

RFC791文档的第二部分就是对IP进行总浏览:可以看到,我们的五层划分是这样的:

                                    +------+ +-----+ +-----+     +-----+  |Telnet| | FTP | | TFTP| ... | ... |  +------+ +-----+ +-----+     +-----+  |   |         |           |     +-----+     +-----+     +-----+  | TCP |     | UDP | ... | ... |  +-----+     +-----+     +-----+  |           |           |     +--------------------------+----+|    Internet Protocol & ICMP   |+--------------------------+----+|                 +---------------------------+  |   Local Network Protocol  |  +---------------------------+  
​Protocol Relationships

可以这样理解这些协议之间的关系:最上一层是应用层的协议,比如说telnet, FTP, TFTP等传统应用层协议!他们是使用了TCP或者udp这样一些传输协议的服务来完成自身的服务,而TCP UDP这些传输层的服务则是基于IP或者是ICMP的网络层服务完成自身的服务的,而IP和ICMP又是依靠或者说是依赖于本地网络的一些协议来完成他们的工作!可以看到层层的抽象共同完成了进程之间的报文传输!

由于RFC791着重描述与IP的工作原理,所以这里我们从IP的报文封装与拆包来进行分析!

操作

IP的封装与拆包实际上是按照这样的流程完成的。

为了严谨假设,我们假设两台主机之间需要通过一个网关跳转才能够完成传输!那么对于发送报文的应用进程,它需要准备好它的数据,然后调用本地的网络模型来发送数据。他把数据放到了一个上层应用已经结束封装的数据包,然后准备使用IP协议来构建IP报文,它向里面填充自身的源地址,目标地址,数据以及一些选项等。

在这里它需要向网关发送数据,那么这里的目标地址就需要填写网关的IP。然后他就会把这样的一个IP报文发送给网关,网关接收到了这样的IP报文之后它首先要剥离协议的头,从而把数据包从中裸露出来方便处理。他需要查看装在了数据段的目标地址,网关查看自己的转发表,这样他才能决定要转发到哪一个网关或者主机上!

由于在这个场景里面我们的表里面已经存储了目标主机的IP地址,所以在这里他直接往目标主机发送IP报文。于是他再一次封装IP报文,然后向目标主机投递这个IP报文,目标主机接收到了这个IP报文后向上传递,最终以一种系统调用的方式通知目标进程接收网报数据!所以整个流程就可以使用这样的图来简单的描述

   Application                                           ApplicationProgram                                                   Program\                                                   /      Internet Module      Internet Module      Internet Module    \                 /       \                /           LNI-1          LNI-1      LNI-2         LNI-2          \           /             \          /              Local Network 1           Local Network 2            
​
​
​Transmission Path
​

AddressingFragmentation

我们知道IP报文是会在主机与主机之间进行传递!那么我们应该如何标识他们?

我们传递的报文可能会很大!在这种情况下一个报文可能并没有办法完全容纳我们的数据!这个时候它可能就需要分片!下面我们来讨论IP协议提要求提供的这两个基础功能是怎样的

Addressing

我们之前就说过,IP提供的最基础的两个服务,一个是Addressing(寻址),另一个就是Fragmentation(分片)。我们是怎么区分寻址的呢?答案是使用一些区分字段:

names:主机的名称,这个地方是不是想起来DNS了?是的!这里就是记载着names - Address映射对

addresses:主机的地址

route:记载着如何到达

当然,IP地址实际上也需要向下转化为本地的网络协议使用的地址(比如说MAC地址)

一般的,我们考虑IP地址,在1980年那个主机并不太多的时代,将IP地址分成ABC类。我们后面会进一步详细的讨论

Fragmentation

我们下面就讨论分片这个事情:分片,简而言之就是把一个巨大无比的数据报将它分解为小的一个分组就可以容纳的小碎片!当然一个数据报段文可以标记为不要分段!那么这个时候被标记了不要分段的数据包将会被解释为不是分段的,所以如果这个数据报它确实需要分段才能够发送,但是被标记为不分段时,它会被遗弃掉!

我们如何指示我们的数据报是分段的呢?答案很简单,在header里有所指示就行!我们的发送方将数据进行分段,然后传递出去!那么接收方就要依赖identification(身份)段中的标识来接受报文(这表明了这是这个分段组的!)

举个例子。假如说,我们要发送一个很大的报文时:这个巨大的数据包被拆分成一个一个数据段(注意第一个IP报文的数据段必须是64位大小的整数倍,后面的无所谓),每个数据包前面添加IP协议控制报文段,从而将这些将一个巨大的数据包转化为若干的IP分组报文!

第一个标识中写入自己的分组偏移量是零,之后的分组按照顺序依次递增,而同时在第一个报文中设置“是否有更多分组”的标志位中设置唯1,在最后一个分组中“是否有更多分组”的标志位中设置为0!这样我们的接收方它首先查看偏移量来表明这是第几个报文,同时查看是否有更多分组来决定还不还要继续接收这个报文流!直到接收到一个报文其分组标识为零的时候,它才会停止接收这个报文流!

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

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

相关文章

【Linux深度学习笔记5.7】

5.6学习笔记 文件查找: 语法:find $路径 name | type | perm | size | atime | mtime | ctime 操作对象find /opt/ -name a.txt ----> -iname (忽略大小写)find / -perm 000 ----> 权限查找find / -size 5M ----> 大小查找 5M (大于5M) -5M (小于5M)find /etc/…

探索大模型能力--prompt工程

1 prompt工程是什么 1.1 什么是Prompt? LLM大语言模型终究也只是一个工具,我们不可能每个人都去训一个大模型,但是我们可以思考如何利用好大模型,让他提升我们的工作效率。就像计算器工具一样,要你算10的10倍&#x…

Java IO类之FilterOutputStream的研究与应用

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

mybatis-plus编程接口

简介 使用Java语言对数据库进行操作,通常需要继承一些依赖Spring容器的ORM框架。在后端项目中非常高效且稳定。但对于一些客户端或者一些临时任务,非Spring环境下想对数据库进行简单的CRUD通常需要使用JDBC来实现,这种方式要自己拼接SQL&…

C语言中static和volatile关键字的作用

static 作用: 1 修饰局部变量:表示该局部变量只初始化一次,地址空间不释放 2 修饰全局变量:表示该全局变量只在此文件中使用,别的文件无法访问此变量 3 修饰函数: 表示修饰的函数只在此文件中使用&#xff…

RCE学习(一)

一.知识点 RCE:远程命令/代码执行漏洞,简称为RCE漏洞,可以直接向服务器后台远程注入操作系统的命令或者代码,从而拿到服务器后台的权限。RCE分为远程执行命令(执行ping命令)和远程代码执行eval 简单来说就…

VMware导入ova/ovf虚拟机文件

1.文件-打开-ova文件 2.为新虚拟机起名称 3.等待导入 4.导入完成,可以开始使用 参考链接:VMware导入ova/ovf虚拟机文件

浅谈Session和Cookie

各位大佬光临寒舍,希望各位能赏脸给个三连,谢谢各位大佬了!!! 目录 1.Cookie 2.Sesssion(会话) 3.Session和Cookie的联系 4.总结 1.Cookie Cookie是客户端存储数据的机制,一般是…

洛谷P10397题解

题目描述 给定一条 std::freopen 语句&#xff0c;输出其操作的文件名称。 形式化地&#xff0c;std::freopen 语句都应该恰好是 std::freopen("<title>","<mode>",<stream>);其中 <title> 为其操作的文件名称。其至少包含一个…

英语学习笔记5——Nice to meet you.

Nice to meet you. 很高兴见到你。 词汇 Vocabulary Mr. 先生 用法&#xff1a;自己全名 / 姓 例如&#xff1a;Mr. Zhang Mingdong 或 Mr. Zhang&#xff0c;绝对不能是 Mr. Mingdong&#xff01; Miss 女士&#xff0c;小姐 未婚 用法&#xff1a;自己全名 / 姓 例如&#…

java本地锁与分布式锁-个人笔记 @by_TWJ

目录 1. 本地锁1.1. 悲观锁与乐观锁1.2. 公平锁与非公平锁1.3. CAS1.4. synchronized1.5. volatile 可见性1.6. ReentrantLock 可重入锁1.7. AQS1.8. ReentrantReadWriteLock 可重入读写锁 2. 分布式锁3. 额外的3.1. synchronized 的锁升级原理3.2. synchronized锁原理 1. 本地…

Spring Task 定时任务没有定时执行是为什么?

目录 SpringBoot 定时任务的原理任务一直阻塞会怎么样&#xff1f;多个定时任务的执行具有相同表达式的定时任务&#xff0c;它们的执行顺序如何&#xff1f;Spring Task 和 Linux crontab 的 cron 语法区别&#xff1f;在 cron 语法中容易犯的错误Async 异步注解原理及作用并发…

优化sqlserver中的 not like

如果你想要优化一个查询&#xff0c;特别是当使用 NOT LIKE 来排除包含某个字符&#xff08;如 ;&#xff09;的记录时&#xff0c;确保查询能够高效执行的关键是索引和查询结构。但是&#xff0c;对于 NOT LIKE 操作符来说&#xff0c;特别是当模式以通配符 % 开头时&#xff…

【ROMA核心特性数据、服务、消息、设备集成及统一运维】

1、数据集成 FDI旨在解决多种数据源的快速灵活集成能力&#xff0c;您可以在任意时间、任意地点、任意系统之间实现实时数据订阅和定时增量数据迁移。 &#xff08;1&#xff09;数据集成任务的生命周期管理 &#xff08;2&#xff09;FDI支持修改数据集成任务的信息、查看数…

初识Node.js-认识node(安装Node.js环境配置)

目录 一、node介绍 1.概念和特点 2.核心功能 3.应用场景 二、Node初使用 1.安装node配置 windows上安Node.js 1.windows安装包&#xff08;.msi&#xff09; 2、Windows 二进制文件 (.exe)安装 Linux 上安装 Node.js 直接使用已编译好的包 Ubuntu 源码安装 Node.js …

【JVM】垃圾回收机制(Garbage Collection)

目录 一、什么是垃圾回收&#xff1f; 二、为什么要有垃圾回收机制&#xff08;GC&#xff09;&#xff1f; 三、垃圾回收主要回收的内存区域 四、死亡对象的判断算法 a&#xff09;引用计数算法 b&#xff09;可达性分析算法 五、垃圾回收算法 a&#xff09;标记-清除…

GDPU 天码行空11

&#xff08;一&#xff09;实验目的 1、掌握JAVA中IO中各种类及其构造方法&#xff1b; 2、重点掌握IO中类所具有的IO操作方法&#xff1b; 3、熟悉软件中登录模块的开发方法&#xff1b; 4、掌握IO中读写常用方法。 5、进一步熟悉正则规则的使用方法。 &#xff08;二&…

上岸武汉顶级985!苦尽甘来的那一天,山河星月都作贺礼。

今天分享经验的同学是小马哥梦马强化班的学员&#xff0c;一战高分上岸武汉大学&#xff01; 经验分享 很高兴有机会在这里给大家分享我的考研历程。 首先介绍一下我自己&#xff0c;我本科就读于吉林大学空间信息与数字技术&#xff0c;成绩不是很好。六级是在考研期间12月…

C语言逻辑语句

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.何为控制语句2.控制语句-分支语句2.1.if2.2.switch3.控制语句-循环语句3.1.while3.2.do...while3.3.for4.控制语句-转向…

ue引擎游戏开发笔记(32)——为游戏添加新武器装备

1.需求分析&#xff1a; 游戏中角色不会只有一种武器&#xff0c;不同武器需要不同模型&#xff0c;甚至可能需要角色持握武器的不同位置&#xff0c;因此需要添加专门的武器类&#xff0c;方便武器后续更新&#xff0c;建立一个武器类。 2.操作实现&#xff1a; 1.在ue5中新建…