【网络】IP协议详解

news2024/9/21 10:53:13

前言

IP协议是网络层协议,应用层希望让数据可靠的从A主机到B主机,就设计出了传输层策略TCP协议。而实际上,网络从A网络到B网络不仅依赖于传输层可靠的策略,还依赖于跨网络传输数据的能力。这个跨网络的能力就IP协议。

数据从A主机要到达B主机,大概率会先经过路由器F、路由器C等等的转发。为什么不能直接到达B主机呢?本文将会介绍。

本文重点

本文详细介绍IP层协议的报头,网段划分,IP分片与合并,以及运营商在网络中扮演中还要的角色。

前提知识:

  • IP地址是被分成:网络号+主机号。
  • 运营商:在网络中起到重要作用:如建设基站、划分网段、连接网络等。
  • 一个路由器下连接的设备都是在同一个子网中。

IP协议结构

见一见IP报头的字段

对于一个协议,最先应该关心俩个问题

有效载荷和报头如何分离?
先读取前20字节,获取4位首部长度和16位总长度。4位首部长度的范围是【0,15】*4=【0,60】。获取到首部长度后,总长度减去掉首部长度就是有效载荷。

如何向上交付?
根据8位协议类型,选择上层交给什么协议

介绍报文字段

  • 4位版本:目前主要是IPv4和IPv6。IPv6是128位表示IP地址。
  • 4位首部长度:范围是【0,15】*4,因为首部最少是20字节,故首部长度的范围是【20,60】。
  • 8位服务类型:类似TCP的6位标志位。决定了IP报文转发时候的策略。常见的:最小延迟、最大吞吐、最高可靠、最小成本。比如说最小延迟,那在转发的时候,优先转发,不排队。
  • 16位总字节长度:总大是64KB。标志着IP协议报文的总大小,所以不会产生粘包问题。但是由于下一层协议归定报文的最大长度,所以一般而言IP报文最大长度是1500。
  • 8位生存时间:涉及到网络的拓扑结构。如果在网络中路由器A发到B,B发到C,最后再转到A,那么报文就会在路由器中一直存在,浪费资源。所以设置TTL:报文最大生存跳数,经过指定跳数后就会自动丢弃。
  • 8位协议:在IP协议上层,可能是TCP协议,UDP协议,甚至直接交给应用层。所以双方的上层协议要对等,在将数据交到给IP层时候,就应该填充协议类型。
  • 16位首部校验和:使用CRC进行校验, 来鉴别头部是否损坏。。

目前先对IP协议字段有个大体的认识,在第二行中剩余的三个字段还没有讲述。在后文中将会详细介绍。

下面来介绍了一下网段划分。

网段划分

围绕三个话题:网段划分是什么?为什么?怎么划分?
共识:
IP地址标记唯一的主机,IP地址可以划分:

网络号+主机号。


引入路由器

路由器的功能是负责组建子网,并负责报文转发。

例如在一个家庭内,家庭成员的设备都可以接入路由器中,路由器会为每个设备都配一个该局域网内独一无二的IP地址。

同时子网内设备的请求会通过路由器转发到运营商中。

 但是IP地址只有32位,最多就42亿,人们就将IP地址按照网络号+主机号划分成五类地址。

分为A\B\C\D\E五类网络。A类网络中可以用的主机数最多,E类可用主机数最少。

  • A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255

但是很快的,这样的划分并不能解决需求,人们普遍申请A类网络,A类网络已经申请得差不多了。同时这个划分也有缺点,就是如果当前局域网中不需要那么多的主机数,多出来的主机数就被浪费掉了。

所以子网掩码被人们使用

子网掩码

  • 子网掩码是一串32位以0结尾的序列
  • IP地址与子网掩码进行按位与之后得到的就是子网掩码

子网掩码的例子

特殊的IP地址

0.0.0.0 :代表这个局域网

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

F.F.F.F:设为全 1 表示这个广播。给局域网内所有连接的主机发。


私有IP地址和公网IP地址

地址又分为公网和私网

公网和私网是不重叠的,公网是大部分的,标志唯一的主机。

而私网会在不同的局域网中发生重叠。

私网的范围

  • 192.168.*
  • 172.16   ---172.31.*
  • 10.*

包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)
 路由器既要组建内网同时也要将报文转发到公网上,所有路由器存在俩个地址,一个对内,一个对外。对内的子网LANIP,对外的叫WAN口IP。

处于俩个局域网中的主机是无法直接通信的,因为无法知道对方的地址。

如果局域网中的主机想访问外网。由于外网是存在固定的IP。所以是可以访问的。

具体的访问过程:依次将源IP替换为WAN口IP,达到广域网,广域网将IP报文交出去。这种技术叫做NAT技术

子网内的IP地址是不可冲突的,不同子网内的主机地址可能会相同。

真实的网络:公网+私网

子网是可以连接公网的,一定程度上,缓解了IP地址的数量问题。


模拟网段划分

报文想要发到公网上,就必须先知道公网上的IP地址,然后将IP报头中的源IP不断替换为WAN口地址,直到连接到公网上。同时NAT会为每一次替换保存,如果报文需要园路返回也是能做到。


 路由

路由就是将IP报文转发。

会先查看主机的路由表,并且将IP地址&这一跳的子网掩码

如果相同就转发出去,不同继续匹配下一个路由器,最后转发到默认路由器中。

通过route命令查看路由表

另外:路由器之间会交换路由表,互相知道、互相学习。


最后剩一个话题:报头的第二行关于分片的问题。

分片与组装

为什么要分片?
因为数据链路层规定IP报文最长为1500字节。MTU:最大传输单位

分片的影响

但是分片是不好的,因为分片将丢包的概率提升了。

所以希望传输层一次性不要发太多的报文。这就是TCP层分段发数据的原因 MSS:最大段尺寸

如果实在超过了1500字节,那么就要考虑分片与组装

16位标识:属于同一个分片的报文,分片标识是一样的

3位标志:只关心最后一个 ,如果被分片了且不是最后一个分片 ,最后一位就是 1

13位片偏移:相对于原始报文的位置 *8

一个共识
所有的分片报文都会被填充IP报头 

模拟分片

这份报文长度为3000?要分为几片?
三片 。因为要对每一份分片都填充报头数据。

怎么知道分片了?

分片标志中的更多分片是1  为0就查看片偏移。

如何组合?

a.开头的分片:更多分片是1,偏移量是0。

b.结尾的分片:更多分片是0,片偏移最大。

c.中间的分片:同一个标识,按照片偏移排序。


IP协议基本的知识就是这些。IP协议提高一种跨网络将数据包转发的能力,同时介绍了网段划分。现在的网络是私网+公网组合而成的,对于NAT技术,知识还不完善,下文继续讲解。

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

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

相关文章

【深度好文】非地面网络NTN的3GPP研究发展历程

目录 基本概念 NTN频段 3GPP版本演进 Pre Rel-15 Rel-15 Rel 16 Rel 17 Rel 18 Rel 19 3GPP标准后续研究 NTN 的无线相关 SI/WI 通过 NTN 提供物联网支持的无线相关 SI/WI 通过 NTN 提供物联网支持的系统/核心网络相关 SI/WI 参考 缩写 基…

变声器免费的直接说话的那种!不整虚的,一键变声!好听!

听说网络上一堆推荐软件测评的,一半斗志推销自己家的软件,好不好用其次,关键是名声已经在外!今天俺老孙也不整这些虚的,直接上干货,测评2024最新的电脑变声软件,帮助大家了解这六款国内外不同系…

8月25日微语报,星期日,农历七月廿二

8月25日微语报,星期日,农历七月廿二,周末愉快! 一份微语报,众览天下事! 1、两部门预拨5000万元中央自然灾害救灾资金支持辽宁防汛救灾。 2、重达2492克拉!博茨瓦纳发现世界第二大钻石。 3、…

了解ROS Nodes(节点/结点)

1.相关概念 Nodes:A node is an executable that uses ROS to communicate with other nodes.Messages: ROS data type used when subscribing or publishing to a topic.Topics: Nodes canpublishmessagesto a topic as well assubscribetoa topic to receive messages.Master…

LLM 直接偏好优化(DPO)的一些研究

今天我们来聊聊大型语言模型(LLMs)吧。要让这些聪明的家伙和咱们人类的价值观还有喜好对上号,这事儿可不简单。以前咱们用的方法,比如基于人类反馈的强化学习(RLHF),虽然管用,但是它…

3.2-CoroutineScope/CoroutineContext:GlobalScope

文章目录 GlobalScope 是一个特殊的 CoroutineScope,它是一个单例的 CoroutineScope,我们可以直接用它启动协程: GlobalScope.launch {}我们在 IDE 用 GlobalScope 时会有一条黄线,提示的是要小心使用它因为容易用错、容易写出问…

标配M4芯片!苹果三款Mac新品蓄势待发

Mark Gurman透露, 苹果正在测试M4系列Mac新品,包含MacBook Pro、Mac mini和iMac,这些设备会在今年10月同台亮相。 根据曝光的开发者日志,上述Mac设备新品测试了两种M4芯片,一种是10核CPU10核GPU,一种是8核C…

无人机PX4飞控 | 电源系统详解与相关代码

无人机需要一个稳压电源用于飞控供电,同时用于电机、舵机、外围设备等的供电。 供电系统一般是一块电池或多块电池 电源模块通常用于“分离”飞行控制器的稳压电源,也用于测量电池电压和PX4学习笔记飞行器消耗的总电流。 PX4可以使用这些信息来推断剩余的…

Steam昨夜故障原因公布:遭DDoS攻击 与《黑神话》在线人数无关

24日晚,Steam平台突然崩溃,国内国外玩家纷纷反馈无法登录,相关话题迅速登上热搜。不少玩家猜测Steam崩溃是因为《黑神话:悟空》在线人数过多导致。 不过,根据完美世界竞技平台发布的公告,此次Steam崩溃是由…

新书推荐:《分布式商业生态战略:数字商业新逻辑与企业数字化转型新策略》

近两年,商业经济环境的不确定性越来越明显,市场经济受到疫情、技术、政策等多方因素影响越来越难以预测,黑天鹅事件时有发生。在国内外经济方面,国际的地缘政治对商业经济产生着重大的影响,例如供应链中断,…

Python画笔案例-010 绘制台阶图

1、绘制台阶图 通过 python 的turtle 库绘制一个台阶图的图案,如下图: 2、实现代码 引入新的命令:turtle.ycor(),获取当前海龟的y 坐标值,turtle.xcor()是获取海龟的 x 坐标值; turtle.setx(x) &#xff0…

NC 最长上升子序列(三)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定数组 arr…

C++ STL 容器

引言--多看案例 STL概念 STL(Standard Template Library, 标准模板库 ), 是惠普实验室开发的一系列软件的统 称。 STL 6 大组件 容器 : 作用 : 容纳存储数据 分类 : 序列式容器: 强调值的排序,每个元素均有固定的位置, 除非用删除或插…

深度学习与神经网络戴做讲解

深度学习指导,计算机视觉指导。检测,分割,视频处理,估计,人脸,目标跟踪,图像&视频检索/视频理解,医学影像,GAN/生成式/对抗式,图像生成/图像合成&#xf…

C++ 设计模式——迭代器模式

迭代器模式 C 设计模式——迭代器模式1. 主要组成成分2. 迭代器模式范例2.1 抽象迭代器2.2 抽象容器2.3 具体的迭代器2.4 具体的容器2.5 主函数示例 3. 迭代器 UML 图3.1 迭代器 UML 图解析 4. 迭代器模式的优点5. 迭代器模式的缺点6. 迭代器模式的适用场景7. 现代C中的迭代器总…

【kubernetes】相关pod的创建和命令

【书写方法】: 管理使用k8s集群时,创建资源的Yaml文件非常重要,如何快速手写呢? 根据命令提示书写: kubectl explain [资源名称]例如打算写pod资源文件时,可查看如下: # 查看pod下所有字段 …

20. elasticsearch进阶_数据可视化与日志管理

20. 数据可视化 本章概述一. `elasticsearch`实现数据统计1.1 创建用户信息索引1.1.1 控制台创建`aggs_user`索引1.1.2 `aggs_user`索引结构初始化1.1.3 `aggs_user`索引的`EO`对象1.1.4 用户类型枚举1.1.5 数据初始化1.2 内置统计聚合1.2.1 `terms`与`date_histogram``terms``…

RocketMQ指南(二)高级篇

高级篇 1. 高级功能 1.1 消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者,然后等待消…

一文学会Shell中case语句和函数

大家好呀!今天简单聊一聊Shell中的case语句与函数。在多选择情况下使用case语句将非常方便,同时,函数的学习和使用对于学好一门编程语言也是非常重要的。 一、case语句 case语句为多选择语句。可以用case语句匹配一个值与一个模式&#xff0c…

g++,gcc

由一个错误引发对这个问题的关注 上面我对于cpp文件利用gcc进行编译时产生的错误,起初我以为时三方库安装版本问题,反复卸载重装,发现仍然没有解决。然后我把目光聚焦到gcc编译这,发现把gcc改成g,编译就通过了。 g和 …