IP 协议

news2024/10/6 18:29:53

1.IP协议报头

如下图:

版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.

首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bit,比如里面存放的是1,那么整个IP报头的长度就是4个字节(32bit).

服务类型 共占8位,但是实际上只有4位是有效的,其中这4位表示当前IP协议的4种工作模式:最小延时、最大吞吐量、最高可靠性、最小成本.实际开发中可能会根据需要来选择当前的IP工作模式.

总长度 代表的是整个IP数据报的总长度(报头+载荷)

同时也说明IP数据报最多只能携载64KB的数据.但是IP协议是支持对包的拆分和组装的.

比如我要传一个100KB的数据,当传输到网络层时,网络层就会将这100KB的数据进行拆分(假设拆分成64KB和32KB),因为是拆分成了两个数据报,所以到了数据链路层就会打包成两个数据帧,以此类推......

等到接收方的数据链路层将这两个数据帧进行分用,得到两个IP数据报,再由网络层针对这两个IP数据报进行解析,将载荷合并成一个,再向后面传输.....

这一行属性都是针对数据 拆包/组包 而提供的.

标识:同一份数据的不同包里面的表示是相同的.

标志:结束标志.

片偏移:标识了拆分后每个包的顺序

生存时间 表示一个数据报在网络上传输的最大时间,这里的时间并不是以"秒"、"毫秒"这样的单位来计量的,而是以"次数"来计量.

比如有一个TTL初始值为32,此时这个数据报每经过一个路由器转发,TTL的值就会-1,当TTL的值减到0时,就会认为这份数据传输不到了,可以丢弃了.

协议 代表的是当前数据报中传输层的协议(UDP/TCP....)

首部检验和 和UDP、TCP的相同,但是此处只检验报头,因为载荷部分传输层会进行检验.

2.IP地址

这两个部分分别表示发送方的IP地址和接收方的IP地址.

在报文中是以32位的整数方式存在的,而我们日常见到的IP地址则是一串数字,比如:127.0.0.1

他们之间的转换是用点分十进制的方式转换的,也就是将32位分成4分,每一份为8位,转化为十进制0~255,中间用"."来分隔开,就得到了我们现在看到的IP地址.

这32位整数最多可以有42亿9千万中不同的变化,但是我们期望的是全世界里每台设备的IP地址都不相同,但是在生活中需要的IP地址量是非常多的,比如:智能手机、路由器、服务器、物联网等等.所以42亿9千万这个数字是远远不够的.

解决这个问题,有以下两种方法:

  1. 进行动态分配IP地址,此时虽然可以省下也配IP地址,但是总数没有增加.

  1. NAT网络地址转换.本质上是将一个地址同时给多台设备使用.可以大大提高了IP地址的利用率,在区分时也可以用端口号来区分.

在NAT背景下,IP地址可以分为两个大类:

内网IP(私有IP):以10.开头的、以172.16.~172.31.开头的、以192.168.开头的.

外网IP(共有IP):除了内网IP之外的IP地址.

内网IP是可以重复出现的,外网IP是不可以重复出现的.

如果某个私网里面的设备想访问公网里面的设备,就需要对应的NAT(路由器),将IP地址进行映射,从而完成网络访问.

公网的设备无法直接访问私网的设备,不同局域网的私网设备也无法直接互相访问.

主机与服务器之间要进行连接,则如下图:

因此,服务器能拿到的只是路由器的IP,不能拿到我电脑的内网IP,如果我的电脑不主动和服务器联系,服务器也就不知道我的端口,从而无法主动的找到我.

NAT机制虽然能够有效的解决IP不够用的问题,但是带来的副作用就是:网络环境变得更加复杂了.

而IPv6可以根本上的解决IP不够用的问题.

IPv6使用16个字节表示IP地址,也就是42亿*42亿*42亿*42亿,这个数字完全可以分配地球上的每一台设备.

但是当前实际上仍然是以 NAT+IPv4+动态分配 的方式来进行网络组建的,真正使用IPv6的地方非常少,所以不展开讨论了.

3.地址管理

一个IP地址,可以分成两个部分,一个是网络号,一个是主机号.

网络号:标识网段,保证连接的两个网段具有不同的标识.

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

假如一个IP地址是:192.168.0.10

此时网络号一般为192.168.0

主机号一般为:10

那么这个网络号和主机号的分界线是怎么定的呢?

是通过子网掩码来设定的,如下图:

子网掩码也可以以一个32位的整数来表示,上图中的子网掩码换成32位整数就为:

1111 1111 1111 1111 1111 1111 0000 0000

子网掩码中,左侧都是1,右侧都是0.

其中所有的"1"位都是网络号,所有的"0"位都是主机号.

对于家用设备来说,子网掩码最常见的就是255.255.255.0了

4.一些特殊的IP地址

  1. 将IP地址中的主机地址全部设为0,就成了网络号.

  1. 将IP地址中的主机地址全部设为1,就成了广播地址,比如:192.168.0.255,使用UDP往这个地址上发送数据报,整个局域网的所有设备都能收到.

  1. 127.*的IP地址用于本机环回测试,通常为127.0.0.1.

  1. 若主机号为1(比如:192.168.0.1),通常是"网关IP"(不绝对),也就是网络的出入口.

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

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

相关文章

5个原因告诉您为什么要拥有个人IP

在数字时代中,信息每分每秒都在飞速地增长,对于企业和个人来说,获得关注变得越来越具有挑战性。如果您希望在网上创造某种形式的存在感,保持内容的原创性和新鲜度是您通往成功的路上不可避免的挑战。尽管如此,从竞争对…

电商项目之Feign与Dubbo技术选型

文章目录1 问题背景2 前言3 思路4 Feign与Dubbo的区别5 总结6 真实案例1 问题背景 电商项目,B端以consul作为注册中心。重构了一个营销服务,以Nacos作为注册中心。B端需要调用营销服务。关于远程调用框架,营销服务用了Dubbo,而B端…

吉卜力风格水彩画怎么画?

著名的水彩艺术家陈坚曾说:“水彩是用水润调和形成的饱和度极高的艺术画面,在纸上晕染的画面面积、强度等具有许多随意性,天空的颜色乌云密布,都是很随意的,难以模仿。” 是的,水彩画的妙处就在于不确定的…

C语言数据结构初阶(1)----时空复杂度

目录 1. 数据结构,算法的概念 2. 算法的效率 2.1 算法复杂度 3. 时间复杂度 3.1 时间复杂度的概念 3.2 大O的渐进表示法 3.3 小试牛刀 4. 算法的空间复杂度 4.1 小试牛刀 1. 数据结构,算法的概念 数据结构(Data Structure)是计算机存储、组织数据…

2023从0开始学性能(3) —— 探索性能测试流程2

性能测试计划 性能测试的计划中应该由项目描述、项目的业务模型和性能指标(指标来源于调研需求中预期指标),性能测试环境说明(前期调研的配置信息)以及测试的场景设计,具体的我们后面再慢慢说。 性能测试场…

4123版驱动最新支持《霍格沃茨之遗》,英特尔锐炫显卡带你畅游魔法世界

2023年开年最火的3A大作,那一定是近期上架steam平台的《霍格沃茨之遗》,这款游戏在2020年9月份曝光,游戏根据《哈利波特》系列书籍内容改编,作为一款开放式的3A大作,《霍格沃兹之遗》目前在steam上的实时在线人数已经突…

客户体验:客户对企业产生的所有交互与感知!

“客户体验是一种纯主观的在用户使用产品过程中建立起来的感受。良好的用户体验有助于公司不断完善产品或服务。正是这所有用户接触的感受差异,构成了用户对一家公司独特的体验认知。”说白了,客户体验就是客户和公司接触产生的感受。客户体验主要关注客…

JS的事件循环

文章目录写在前面1.浏览器的进程模型1.1 何为进程1.2 何为线程1.3 浏览器有哪些线程和进程2.渲染主线程是如何工作的任务队列的优先级面试题如何理解JS异步JS中的计时器能做到精确计时吗?为什么?写在前面 此处的文字为自己的理解 1.浏览器的进程模型 1.…

git的安装及git的使用方法和指令

Git的使用什么是版本控制?什么是 Git?人工版本控制器版本控制工具常见版本控制工具怎么工作的?git 文件生命周期状态区域安装配置-- global检查配置创建仓库 - repository工作流与基本操作查看工作区的文件状态如果显示乱码的解决方式git sta…

JUC并发编程(下)

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 学习地址 写在最前 JUC并发编程(上) JUC(Java Util Concurrent)学习内容框架&…

Leetcode第530题二叉搜索树的最小绝对差|C语言

刚开始看到这道题,习惯性的找了搜索树的最左下和最右下的结点进行计算。结果发现要求返回的是“任意两个结点”的差的绝对值中最小的值。 思路:看了答案,因为二叉搜索树的中序遍历是有序数组,因此可以采用中序遍历对相邻结点之间进…

合约检测之slither(草稿)

一、Slither 介绍及运行流程 Slither 是一个静态分析框架,它通过将 Solidity 智能合约转换为称为 SlithIR 的中间表示来工作。 SlithIR 使用静态单一赋值 (SSA) 形式和精简指令集来减慢分析执行速度,同时保留在 Solidity 转换为字节码时可用的语义信息。…

GEE学习笔记 六十一:颜值就是战斗力

引用网络名人局座的一句话:“颜值越高的武器,战斗力越强”。对于我们做开发也是,使用的工具颜值越高,我们越喜欢使用。Google Earth Engine在线编辑器(https://code.earthengine.google.com/)虽然目前还不是…

【Proteus仿真】【STM32单片机】环境监测系统设计

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、蜂鸣器、按键模块、DHT11温湿度传感器、继电器加热祛湿加湿模块等。 主要功能: 系统运行后,LCD1602显示…

实现达梦数据库 disql 工具在 Linux 系统里上下翻动查看和编辑历史命令

本文内容已在如下环境上测试: 操作系统:银河麒麟10 数据库版本:达梦8 一、默认情况下,在 Linux 系统中使用 disql 命令时,若使用键盘的上下键查找历史命令复用,会出现乱码,导致在 Linux 上编写…

Scala的简单使用

文章目录Scala的简单使用(一)交互模式1、命令行方式2、文件方式(二)编译模式1、创建源程序2、编译成字节码3、解释执行对象Scala的简单使用 Scala可以在交互模式和编译模式两种方式下运行 (一)交互模式 在…

到了35岁,软件测试职业发展之困惑如何解?

35岁,从工作时间看,工作超过10年,过了7年之痒,多数IT人都已经跳槽几次。 35岁,发展比较好的软件测试人,已经在管理岗位(测试经理甚至测试总监)或已经成为测试专家或测试架构师。发展…

超280人靠这份软件测试面试题进入大厂,堪称金三银四最强,建议收藏

个人感觉目前各个大中厂面试不好的地方是,都在朝着背面试八股文的方向发展(曾经面试某二线厂,对着面试官纯背了 40 分钟概念),但不得不承认这也是企业在短时间内筛选面试者的一个重要手段。 今天为了帮助大家&#xff…

Java网络编程入门

1 网络编程入门 1.1 网络编程概述 计算机网络:是指将地理位置不同的具有独立功能的多台计算机及 其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程…

Java-多线程-增强篇-锁 强化 第一篇

今天我们来学一下锁 会持续保持更新 欢迎追更哈 Java - 多线程 - 锁和提升 第1篇 首先强调一点:Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。同时,类锁也是对象锁,类是Class对象 Java8锁 核心思想 关键…