IP协议

news2024/9/27 8:21:07

网络层的一个重要作用就是把世界上的地址能够以一定的规范定义出来。

  1. 地址管理

  1. 路由选择

网络层的代表:IP协议

4位版本指的是:此处的取值只有两个ipv4,ipv6

4位首部长度:描述了ip报头有多长(ip报头是变长的)报头中有一个选项部分,是变长的,也是可有可无的,此处的单位是4字节

8位服务类型(TOS):表面上是8位,实际上只有4位有效,这4位中只有1位可以是1,其他的都是0,4位就表示ip协议的四种形态/四种工作模式,这四种形态,四种工作模式分别是:最小延时,最大吞吐量,最高可靠性,最小成本。

实际开发中就可以根据需要,来切换ip的模式,达到最优的效果。

16位总长度:描述了一个ip数据报的长度,这个长度减去前面的IP报头长度,剩下的就是载荷长度,一个完整的TCP/UDP数据报长度

16位总长度也就是64kb,这是不是意味着一个IP数据报,最大只能支持64kb呢?那如果传输层过来的一个数据报携带的数据载荷太长了,超过了64KB,就会在网络层针对数据进行拆分,把一个数据拆成多个IP数据报,再分别发送,接收方,再重新拼装。

发送方:把80KB的数据,交给传输层(封装),传输层交给网络层(封装),网络层就把这80KB的数据拆包(拆成两份)64KB+16KB,这两份再交给数据链路层,由以太网分装成两个数据帧,

接收方:数据链路层,针对两个数据帧进行分用,得到两个ip数据报,交给网络层,网络层对这两IP数据报进行解析,把里面的载荷拼成一个,交给传输层。

此处说是64KB,实际上IP协议包不一定就按照64KB为单位进行拆分,实际的单位往往更小(取决于数据链路层的情况)

这几个字段都是辅助拆包/组包提供的

8位生存空间:一个数据报在网络上能够传输的最大时间,这个时间的单位不是“秒”而是“次数”,一个数据报构造出来的,会有一个初始的TTL数值(比如32或者64,或者128等等)这个报每次经过一个路由器转发TTL-1 如果一直减到0了,还没有达到目标,此时就认为这个包永远也到不了,就可以丢弃了。例如:我们发一个快递,写了一个收件地址,但是如果这个收件地址压根不存在。

8位协议:描述了当前载荷部分内容属于那个协议。

16位首部校验和:此处只属于针对首部进行校验,载荷部分(TCP/UDP数据报)自身已经有校验和了,

32位源IP地址:

32位目的IP地址:

此处看到的IP地址是32位的整数,我们日常见到的IP则是一串数字,例如:78.162.56.2,使用三个.把32位,4个字节的数字给分割开,分成4个部分,每个部分使用0-255十进制整数表示。地址期望每个设备都不相同,但是32位数字,只能表示大约42亿个数字,我们希望能够表示全世界的上网设备,这还是不够的。

为了解决IP地址不够用的问题,我们采取了很多办法:

  1. 动态分配IP地址,谁当前用给谁分配IP地址,这个方案没有从根本上增加IP地址,只是提高了利用率

  1. NAT网络地址转换:本质上使用一个IP代表一批设备,也提高了IP地址的利用率,使用端口号区分,

在NAT背景下,IP地址被分成两类,

  1. 内网IP(私有IP) 10.* 172.16.*-172.31.* 192.168.*

  1. 外网(公网IP) 剩下的是公网IP

NAT要求,公网IP必须是唯一的,私网IP可以在不同的局域网中重复出现,如果某个私网里的设备想访问公网的设备,就需要对应的NAT设备(路由器),把IP地址进行映射,从而完成网络访问,不同局域网的私网的设备没法直接相互访问。

但是这里要注意服务器只能拿到路由器的ip,不能拿到我电脑的内网IP如果我电脑不主动和服务器联系,服务器也就不知道我的端口,从而无法主动找到我。

NAT机制能够有效的解决IP地址不够用的问题,但是带来的副作用就是网络环境更加复杂了。

  1. IPv6从根本上解决了IP不够用的问题 使用16个字节表示IP地址,相比于IPv4,能够提供更多的IP地址,IPv6看起来很好,但是当前世界上仍然是以NAT+IPv4+动态分配来进行网络组建的,真正使用IPv6的地方非常少。

一.IP协议:地址管理

网络号:表识网段,保证相互连接的两个网段具有不同的标识(局域网)

主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

把一个IP地址,分成了两个部分,一个叫做网络号,一个叫做主机号,例如:192.168.0.10 ,一个常见的设定,网络号是192.168.0 主机号是10,当前的局域网下的设备,网络号都是192.168.0

一个典型的局域网环境:

路由器都是有两个IP分别属于不同的网段(路由器的功能就是把两个局域网连接在一起)

一个IP地址,前面从哪到哪是网络号,后面从哪到哪是主机号,分界是怎么定的?

二.路由选择

给大家举个简单的例子帮助我们更好的理解路由选择

比如我从家到恐龙公园,但是我不知道路,但是我可以问

1我先出门,问A,它让我去路口做377往北走

我坐着337到了水上公园,然后我又问B,让我做399,继续往北走

我做399到了洪喜家园,然后又问C,问C,然后.......

一边走一边问,每次问都距离目的地更近

路由选择其实它的核心也是问路。每个路由器都会保存一定的周围设备的信息,每次有一个IP数据报经过路由器,就需要匹配路由表,看接下来怎么走,如果路由器表上有匹配的项(该路由器认识路)直接按要求走就行了,如果没有匹配的项(路由器不认识路)会提供一个默认路径(大体方向)沿着这个方向走,继续问,每经过一个路由器问一次,TTL都会减1,如果减到0了,还没到,说明和这个包永远丢不了,这个地址不存在,这个包就被丢弃了。

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

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

相关文章

JUnit5文档整理

1、Overview 1.1、Junit5是什么 与以前的JUnit版本不同,JUnit 5是由三个不同子项目的几个不同的模块组成。 JUnit 5 JUnit Platform(基础平台) JUnit Jupiter(核心程序) JUnit Vintage(老版本的支持&a…

JVM那些事——垃圾回收和内存分配

内存分配 默认情况下新生代和老年区的内存比例是1:2,新生代中Eden区和Survivor区的比例是8:1。 对象优先分配在Eden区。大对象直接进入老年区。通过-XX:PertenureizeThreshold参数设置临界值。长期存活的对象进入老年区。对象每熬过一次Minor GC,年龄1&…

【面试题】Map和Set

1. Map和Object的区别 形式不同 // Object var obj {key1: hello,key2: 100,key3: {x: 100} } // Map var m new Map([[key1, hello],[key2, 100],[key3, {x: 100}] ])API不同 // Map的API m.set(name, 小明) // 新增 m.delete(key2) // 删除 m.has(key3) // …

操作系统闲谈06——进程管理

操作系统闲谈06——进程管理 一、进程调度 01 时间片轮转 给每一个进程分配一个时间片,然后时间片用完了,把cpu分配给另一个进程 时间片通常设置为 20ms ~ 50ms 02 先来先服务 就是维护了一个就绪队列,每次选择最先进入队列的进程&#…

Prometheus PromQL入门

一、Prometheus简介和架构 Prometheus 是由 SoundCloud 开源监控告警解决方案。架构图如下: 如上图,Prometheus主要由以下部分组成: Prometheus Server:用于抓取和存储时间序列化数据Exporters:主动拉取数据的插件P…

Chrome开发者工具:利用网络面板做性能分析

Chrome 开发者工具(简称 DevTools)是一组网页制作和调试的工具,内嵌于 Google Chrome 浏览器中。 Chrome 开发者工具有很多重要的面板,比如与性能相关的有网络面板、Performance 面板、内存面板等,与调试页面相关的有…

字符串匹配 - 模式预处理:BM 算法 (Boyer-Moore)

各种文本编辑器的"查找"功能(CtrlF),大多采用Boyer-Moore算法,效率非常高。算法简介在 1977 年,Robert S. Boyer (Stanford Research Institute) 和 J Strother Moore (Xerox Palo Alto Research Center) 共…

SpringCloud(二)负载均衡服务调用Ribbon、服务接口调用OpenFeign案例详解

五、负载均衡服务调用Ribbon 技术版本Spring Cloud版本Hoxton.SR1Spring Boot版本2.2.2RELEASECloud Alibaba版本2.1.0.RELEASE Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主…

DOS经典软件,落下帷幕,新型国产平台,蓬勃发展

提起DOS时代,总让人难以忘怀,陷入深深回忆中,风靡一时的许多软件,如今早已不在,这几款被称为DOS必装的软件,更是让人惋惜。 你还记得这图吗?堪称DOS系统最经典的软盘复制与映像生成软件&#xf…

八十九——一三三

八十九、JavaScript——数组的简介 一、数组 数组(Array) - 数组也是一中复合数据类型,在数组可以存储多个不同类型的数据 - 数组中存储的是有序的数据,数组中的每个数据有一个唯一的索引 可以通过索引来操作获取数据 - 数据中存储的数据叫元素 - 索引&…

从 MVC 架构到三层(3-Tier)架构

一、MVC 存在的痛点问题 对于业务逻辑不甚复杂的场景,MVC 尚能胜任。但随着前端 MVVM(Model-View-View-Model)开发模式的兴起,尤其是前端框架如 Vue、React 的普及,服务端的 MVC 设计模式使用场景变得越来越少&#x…

NetSuite Intercompany Framework 101

今朝,谈一谈Intercompany Framework,这是一个彰显NetSuite市场野心的基础功能框架。从20.2开始逐渐浮出水面,虽然经过过往的几个版本,不断推出组成功能,但目前仍然未见其全貌。 作为顾问,你必须关注它&…

详解JavaScript的形参,实参以及传参

文章目录 前言一、参数是什么?二、形参和实参 1.形参 2.实参三、传参 1.参数传递的对应关系2.两个传参的例子 总结前言 编程初学者在接触JavaScript这门语言时,很难搞懂里面的逻辑,这就会导致入门慢,入门难。这种难度一般…

Banana Pi BPI-R3 评测:详细信息、功能

Banana Pi BPI-R3 路由板著名的 Banana Pi 品牌背后的公司 Sinovoip Co., Ltd 刚刚宣布了一款名为 Banana Pi BPI-R3 的带有两个 SFP 端口的新型开源路由器。它可能是市场上首批具有内置光接口的单板路由器之一。这种出色的产品对于连接到快速光纤互联网的用户特别有益&#xf…

【PyTorch学习4】《PyTorch深度学习实践》——线性回归(Linear Regression)

目录一、实现框架二、程序实现三、代码讲解1.self.linear torch.nn.Linear(1, 1)2.model(x_data)3.criterion torch.nn.MSELoss(reductionsum),loss criterion(y_pred, y_data)一、实现框架 1、Prepare dataset 2、Design model using Class (inherit from nn.M…

【Leedcode】顺序表必备的三道面试题(附图解)

顺序表必备的三道面试题(附图解) 文章目录顺序表必备的三道面试题(附图解)前言一、第一题1.题目2.思路图解3.源码二、第二题1.题目2.思路图解3.源码三、第三题1.题目2.思路图解3.源码总结前言 本文给大家介绍三道顺序表学习过程中…

【项目精选】javaEE土地档案管理系统(源码+论文+视频)

技术:java、jsp、struts、spring、hibernate 数据库:oracle 集成开发工具:eclipse 点击下载源码 本土地项目管理系统在可行性研究的基础上,是为了进一步明确土地项目管理系统的软件需求,以便安排项目规划和进度&#x…

ARM+LINUX嵌入式学习路线

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,大概分3个阶段: 1、嵌入式linux上层应用,包括QT的GUI开发 2、嵌入式linux系统开发 3、…

Python|每日一练|字符串|递归|链表|单选记录:字符串转换整数 (atoi)|阶乘后的零| K 个一组翻转链表

1、字符串转换整数 (atoi)(字符串) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃…

Golang 方法笔记

Golang中的方法是作用在指定的数据类型上的,因此自定义类型都可以有方法。方法定义func (recevier type) methodName (参数列表) (返回值列表) {方法体return 返回值}基本申明和调用type A struct {Num int}func (a A) test() {fmt.Println(a.Num)}说明:…