当前位置: 首页 > article >正文

Linux——IP协议

1. 现实意义

  IP协议:提供一种能力,把数据报从主机A跨网络送到主机B

  TCP/IP协议:核心功能,把数据100%可靠的从主机A跨网络送到主机B

:TCP协议负责百分百可靠,通过三次握手、滑动窗口、拥塞控制、延时应答等一系列机制。IP协议负责传输数据报

  现实情况:网络中大存在大量的主机,因此必须标识主机的唯一性,所以每台主机都有自己的IP地址。

  概念:IP地址 = 网络号 + 主机号


2. IP协议报头的组成

:如何进行报文解包?

4位首部长度决定报头大小,16位总长度决定整个报文大小,有了总长度和报头长度就可以进行解包

:IP协议如何确定将有效载荷传给上层的哪一个协议?(分用问题)

8位协议表明自己的有效载荷是什么数据,是TCP就交给TCP,是UDP就交给UDP,这是传输层向网络层交付有效载荷时确定的


2.1 IP协议报头中其他成员作用

  4位版本:大多数情况是IPV4,IPV6和IPV4不兼容

  8位服务类型:3 位优先权字段(已经弃用), 4 位 TOS 字段, 和1 位保留字段(必须置为 0). 4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet 这样的应用程序, 最小延时比较重要; 对于 ftp 这样的程序, 最大吞吐量比较重要.

  8位生存时间(TTL):本质是一个计数器,目的是防止数据包在网络中无限循环,导致出现网络拥塞问题,当数据包每经过一个路由器时,个数就会减减,在个数减到0时,就会被丢弃。

  16位首部校验和:用于检测数据在传输过程中是否出现错误的机制,确保 IP 数据包的头部信息在传输过程中没有被篡改或损坏,保证网络通信的可靠性。


3. 通过学院管理来认识网络中的一些概念

以大学管理为例:假设计算机学院(学院编号为06)的某位学生A(学号为06001),捡到了一个机械学院某位学生B(假设学号为01005)的钱包,作为计算机院的学生A,他知道01不是自己学院的编号,所以他会联系自己学院的学生会主席,作为学生会主席,他知道每个学院的编号,因此他就会通知机械院(编号01)的主席,机械院主席就会拿着对应学号去自己学院下找人。

  01 称为源网络号,06 称为目标网络号

  005 称为源主机号, 001 称为目标主机号

  由IP地址的定义就可得知,01005为源IP地址,06001为目标IP地址

  学生相当于主机,学院主席相当于路由器,整个学校相当于公网

  学校为每个学院分配的编号是公网的一部分

  为每个学生分配的学号叫做私网/内网

  01005号学生将钱包交给学院主席的过程叫:内网转发

  计算机院的主席将钱包交给机械院主席的过程叫:公网转发

子网划分:将一个大的网络划分为多个更小的网络(即子网)的过程。(将一个大的学校,划分为几个学院的过程)

:为什么进行子网划分?(为什么学校要分学院管理?)

认识:路由报文本质是:查找主机,而查找的本质是:淘汰。以二分查找为例,当选了左半区域,右半区域就被淘汰了,只要淘汰效率高,那么查找的效率就高,当你把报文传给主席,说明自己院里的学生全淘汰了,当计算机院主席把报文给机械院主席,其他学院就淘汰了。

:来查找目标主机,必须查找目标网络,本质就可以淘汰其他网络,可以在全网中提高查找目标主机的效率

认知:主机中的IP是通过路由器进行分配的,叫做DHCP协议,属于应用层协议

:路由除了有路由功能以外,还有构建子网的功能

:举这个例子的目的是为了有这样一个认识:网络本身是经历了十几年发展的产物,网络本身就是被设计好的,就如同学号,认识网络是如何被设计的,比理解其中的算法更重要。


4. 认识IP地址

IP地址一共被分为五类

•  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
:前三类分别对应于大型网络、中型网络、小型网络
问题:可以看到无论哪一类,主机号的数量都特别的庞大,在实际网络架构中,没有哪个子网会出现这么多的主机数量,因此大量的位都被浪费掉了
解决措施:子网掩码

 4.1 子网掩码

子网掩码的作用:1.将IP地址分为网络号和主机号 2.进行网络地址划分 3.将划分好的网络地址与自己的网络地址进行比较,来判断是否同属于一个子网

网络中的子网划分本质是通过IP地址和子网掩码确定一个子网地址范围,除去网络地址和广播地址,其他地址均可以供任意主机使用。(公网和私网都适用)

子网划分的例子1

将IP地址与子网掩码相与,得到网络号,后8个字节为0,代表主机号,那么该主机号一共有256个,但实际上,140.252.20.0代表代表这个局域网,而140.252.20.255代表广播地址,所以一共的主机数为256-2=254

子网划分的例子2

将IP地址与子网掩码相与,得到网络号,后4个字节为0,代表主机号,那么该主机号一共有16个,减去局域网地址和广播地址一共就有14个。

:240(十进制) =  11110000(二进制)

认知:即使有了子网掩码,优化了IP地址的利用率,32位能表示的主机数量大约为43亿,远不及当今网民总数,因此还需要另外的方法来解决:动态分配IP(只给接入网络的设备分配ip地址)、NAT技术、IPv6


4.2 私网IP地址

• 规定1

        A 类私网地址10.0.0.010.255.255.255(子网掩码:255.0.0.0  /8

        B 类私网地址172.16.0.0172.31.255.255(子网掩码:255.240.0.0  /12

        C 类私网地址192.168.0.0192.168.255.255(子网掩码:255.255.0.0 /16

• 规定2

        私网IP地址不能出现在公网当中

• 认识1

        除了上述IP地址以外,其他地址均为公网IP地址

• 认识2

        私网IP地址在不同子网内是可以重复的

:为什么要这样子划分?

:为了解决全球IP地址不足的问题,假设原先一共有1W个IP地址,那么只能分配给1W台主机,但如果我拿其中3000作为私网IP地址,另外7000作为公网IP地址,并且规定,公网IP地址不能重复,私网IP地址可以重复,那么就能分配给7000*3000台主机,数量大大增加。


4.3 公网IP地址

除去私网地址IP以外,都是公网IP。

• 认识1:公网IP根据每个国家网民的数量来进行分配的

• 认识2公网IP在公网内部不能重复

• 认识3:从公网IP可以读取到一些信息,比如国家、省份/州、市区.....


4.4 简单认识路由器

路由器内部有WAN口IP地址,和LAN口IP地址,不同路由器的WAN口IP地址和LAN口IP地址代表不同类型的IP地址。

对于运营商路由器,他的WAN口IP地址是公网IP,LAN口IP地址为私网IP;

对于家庭路由器,他的WAN口IP地址和LAN口IP地址都为私网IP;

结论运营商路由器是公网IP分配的最后一环,运营商路由器之后的所有IP都是私有IP,由运营商来构建子网


4.5 私有IP是如何通过公网传达自己的报文的?

:私网IP是不能出现在公网中的,那么私网IP的报文该如何通过公网发送自己的报文呢?

:NAT技术

图示

因为私网ip不能出现在公网中,所以主机每次经过路由器时,会将路由器内的WAN口IP与报文中的源IP做交换处理,传达给上一层,当抵达运营商IP时,此时WAN口IP为共网IP,于是报文就获得了公网IP,可以进入到公网当中,实现报文的传递。

:每次进行源IP和WAN口IP的交换时,路由器内部都会将两者的映射关系保存下来,以便接收后续回应。

4.6 其他路由器

前言真正的网络拓补图是十分复杂的!这里的介绍是简单到不能在简单的,只是大致思路,并非真正的实现方式!!!

以国内为例,除了运营商路由器(ISP路由器),还有省间路由器(区域路由器),以及国际路由器(核心路由器)。所有的路由器都存储着两张路由表,

国际路由器:记录国外路由表国内路由表

省间路由器记录了其他省的路由表省内所有市区的路由表

注:一般而言,从市区开始就可以通过运营商构建子网了

路由表简单介绍:路由器和计算机用来确定 数据包发送路径 的表格,包含了 网络目标地址到达该地址的路径

国际报文

假设一个俄罗斯用户想要发送一个中国IP的报文,该IP为5.1.16.X,该IP会与俄罗斯某个州的16位子网掩码相与得到5.1.0.0,查表后发现对不上,说明不是俄罗斯境内的IP地址,会到下一跳,将IP与八位子网掩码相与得到5.0.0.0,查表后知晓是中国的IP地址,于是会到下一跳。再将IP地址与16位子网掩码相与得到5.1.0.0找到对应省份,转到下一跳,以此类推。

国内报文

假设一个河北的报文要发到江苏苏州,假设该报文位5.1.16.X,河北区域的路由器将该IP通过24位子网掩码相与,发现不是河北省内的IP,于是转到下一跳,将IP地址与16为子网掩码相与得到5.1.0.0,查表后发现是江苏省的IP地址,转到下一跳,依次类推找到对应主机。

:这种通过子网掩码获得网络号、查表、下一跳的过程可以具象为:“问路”的过程

认识:eth0物理以太网接口,用于物理以太网链接,通过 网线 将计算机连接到本地网络或路由器。(出接口涉及链路层,这里先做了解)


5. IP报头的另外三个成员——分片机制

数据链路层规定:从传输层接收下来的完整报文,大小不能超过MTU(最大传输单元,1500字节),如果超过了就要进行分片

注1:实际上考虑到IP报头以及TCP报头的大小,传输层单次传送的最大报文为1460(MSS)字节

注2:这也就是为什么滑动窗口需要分段的原因了

注3

MTU决定了IP数据包的大小(含IP头和TCP头)

MSS决定了TCP有效载荷的大小,不含TCP头

MTU决定了MSS的大小 MSS = MTU - IP报头 - TCP报头 = 1460(通常情况下)

TCP在三次握手的握手的过程中,可以确定对方MSS的大小,以较小一端的来决定未来发送载荷的大小。

结论1:过大的IP需要在网络层进行分片,分完片后,需要在对端重新组装

:分片的问题 → 缺了任何一片都会导致整体的丢失,对于TCP协议就会触发丢包重传

结论2:网络通信中,如果分片过多,会导致丢包概率增加!因此分片和组装不是主流,是被迫为之,因此需要减少分片,本质就是在传输层控制滑动窗口的大小

:如何分片?

:每一个分片后的报文都包含IP报头,其中

👉:16位标识:不同报文,标识不同,相同分片,标识相同;

👉:3位标志  第一位做保留,第二位置一标识禁止分片,第三位表示”更多分片”,最后一片           的第三位置零,其他置一,标识结束位。

👉:13位片偏移标识当前片在整个报文的偏移

:如何甄别是否分片?怎么保证对端把分片全收齐了?怎么组装?

答1:如果3位标志位的第三位为1,表明分片了,如果第三位为0,但是片偏移非0,说明分片了;反之,如果3位标志位第三位为0,片偏移也为0,说明没有分片

答2:把16位标志位相同的片聚合在一起后,对片偏移做升序排序,片偏移+自身片的报文长度 = 下一个片的片偏移数字,如果对不上就说明缺失了,反之收齐

答3:对片偏移进行升序排序的过程就是组装的过程

http://www.lryc.cn/news/2387492.html

相关文章:

  • Lua 脚本在 Redis 中的运用-24 (使用 Lua 脚本实现原子计数器)
  • Linux信号量(32)
  • 技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(上)
  • 使用堡塔和XShell
  • 软件项目交付阶段,验收报告记录了什么?有哪些标准要求?
  • LightGBM的python实现及参数优化
  • 封装渐变堆叠柱状图组件附完整代码
  • 分布式项目保证消息幂等性的常见策略
  • 山东大学软件学院创新项目实训开发日志——第十三周
  • 如何在sublime text中批量为每一行开头或者结尾添加删除指定内容
  • Cesium 透明渐变墙 解决方案
  • 网络原理与 TCP/IP 协议详解
  • day022-定时任务-故障案例与发送邮件
  • 新增 git submodule 子模块
  • List优雅分组
  • Linux 使用 Docker 安装 Milvus的两种方式
  • AR眼镜+AI视频盒子+视频监控联网平台:消防救援的智能革命
  • 编程技能:字符串函数10,strchr
  • 使用tunasync部署企业内部开源软件镜像站-Centos Stream 9
  • c/c++的opencv像素级操作二值化
  • C++----Vector的模拟实现
  • Mac redis下载和安装
  • [25-cv-05718]BSF律所代理潮流品牌KAWS公仔(商标+版权)
  • 【PhysUnits】9 取负重载(negation.rs)
  • 深度思考、弹性实施,业务流程自动化的实践指南
  • UWB:litepoint获取txquality里面的NRMSE
  • VUE npm ERR! code ERESOLVE, npm ERR! ERESOLVE could not resolve, 错误有效解决
  • IoT/HCIP实验-1/物联网开发平台实验Part1(快速入门,MQTT.fx对接IoTDA)
  • DMA STM32H7 Domains and space distrubution
  • 洪水危险性评价与风险防控全攻略:从HEC-RAS数值模拟到ArcGIS水文分析,一键式自动化工具实战,助力防洪减灾与应急管理