网络篇10 | 网络层 IP

news2024/11/17 11:27:09

网络篇10 | 网络层 IP

  • 01 简介
  • 02 名称解释
  • 03 IP报文格式(IPv4)
    • 1)4位版本协议(version)
    • 2)4位首部长度(header length)
    • 3)8位服务类型(Type Of Service, TOS)
    • 4)16位总长度
    • 5)16位(分片)标识
    • 6)3位(分片)标志
    • 7)13位片偏移
    • 8)8位TTL
    • 9)8位协议
    • 10)16位校验和
    • 11)32位源地址
    • 12)32位目的地址
    • 13)选项字段(不定长, 最多40字节)
  • 04 网段划分
    • 1)5类IP地址
    • 2)公网IP地址
    • 3)私有IP地址
    • 4)多播(Multicast)通信
    • 5)特殊的保留地址
  • 05 IP地址的数量限制
    • 1)CIDR子网掩码
    • 2)动态分配IP地址
    • 3)NAT技术
    • 4)IPv6
  • 06 路由选择
    • 1)路由表维护
    • 2)路由选择过程

01 简介

对上可载送传输层各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。

IP地址是定位主机的,具有一个将数据报从A主机跨网络可靠的送到B主机的能力。但是有能力就一定能做到吗,只能说有很大的概率。TCP为IP提供策略,IP用于执行行动。

02 名称解释

  • 主机: 配有IP地址, 但是不进行路由控制的设备;
  • 路由器: 即配有IP地址, 又能进行路由控制,一般都带有DHCP功能,可以看做一个DHCP服务器。
  • 节点: 主机和路由器的统称;
  • 网络号: 保证相互连接的两个网段具有不同的标识;
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
  • 不同的子网其实就是把网络号相同的主机放到一起,;
  • 子网:其实就是把网络号相同的主机放到一起。
  • DHCP技术:能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.

03 IP报文格式(IPv4)

在这里插入图片描述

1)4位版本协议(version)

通信双方的IP协议必须要达到一致, IPv4的版本就是4

2)4位首部长度(header length)

定义了IP协议首部(报头)的长度, 以4字节为单位, IP报头是不定长的, 首部长度范围 [5, 15] 即 [20字节, 60字节]

3)8位服务类型(Type Of Service, TOS)

3 位优先权字段(已经弃用), 4位TOS字段, 和一位保留字段(此位必须置0), 思维TOS分别表示 : 最小延迟, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能有一个置1. 对于ssh/telnet这样的应用程序, 最小延时标胶重要, 对于ftp(文件传输协议)类型的程序, 最大吞吐量比较重要.

4)16位总长度

IP数据报整体占多少个字节(单位是字节), 16位能表示的最大数是 65535, 即65535字节, 即64k, 那么TCP的数据肯定不能大于64k -20-20, 一个20是IP报头最次小长度, 一个20是TCP报头的最小长度; UDP的数据肯定不能大于64K-20-8, 第一个20也是IP报头的最短长度, 8是UDP报头的长度. TCP会在传输层根据MSS(最大分段大小, Maxitum Segment Size)自动进行数据分段; UDP在传输层不会分段; 传输的IP报文还受到下层数据链路层的MTU(最大传输单元, Maximum Transfer Unit)的限制; 而TCP中的MSS就是根据数据链路层的MTU计算的. UDP在在传输层不会分段, 所以当UDP数据大小 大于 MTU 而小于64k 20-8 时, 数据就会在网络层进行分片

5)16位(分片)标识

在进行数据分片重组的时候表示数据分片属于那个完整的UDP报文, 具体来说, IP在存储器中维持一个计数器, 每产生一个 数据报, 计数器就加1, 并将此值赋给标识字段. 但这个标识并不是平常的序号,因为IP是无连接, 不可靠服务, 数据报不存在按序接收的问题. 当数据报由于长度超过链路层的MTU而必须分片时, 这个标识字段的值就被复制到所有的数据报片的标识字段中, 等到对端重组的时候, 相同标识符的值的数据报就会被重新组装成一个数据报.

6)3位(分片)标志

高位未用, 中间位DF置1, 表示不能进行分片,置0才可以进行分片操作. 最低位MF, 置1表示后面还有数据分片,MF=0表示这已经是最后一个数据分片了.

7)13位片偏移

标识一个分片在原始UDP报文中的位置, 以8字节为单位, 例如将一个10001的UDP报文按256字节分片后, 第一片的数据报的片偏移就是0, 第二片数据报的片偏移就是256/8 = 32, 第三片就是512/8=64, 第四片就是768/8=96, 第四片并没有256个字节, 如果分片前的数据不能够被8整除, 那么分片后的最后一个数据大小就是分片前的数据报大小除以8的余数. 可以看到不管分片前的大小能不能被8整除, 片偏移永远是8的整数倍.

8)8位TTL

报文在网络中的生存周期 – 即跳数, 指的是能够经过多少路由器, 每经过一个路由器就称为一跳, 该值就减1, 为0时就被网络丢弃掉, 8位TTL, 最大值为2^8 - 1 = 255.

9)8位协议

标识传输层使用的是什么协议, 用于数据分用

10)16位校验和

二进制反码求和, 用于校验数据的一致性

11)32位源地址

用于标识源端,

12)32位目的地址

用于标识对端主机, 路由器就是根据对端主机IP地址进行路径选择的

13)选项字段(不定长, 最多40字节)

基本很少用到;

04 网段划分

IP地址分为两个部分, 网络号和主机号。192.168.10.20,网络号为192.168.10,主机号为20。

1)5类IP地址

过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出 自[TCPIP])。
在这里插入图片描述

随着互联网的飞速发展, 这种划分方案的局限性很快就显现出来, 大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址. 这是因为申请一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更是达到数千万之多, 然而实际网络架设中, 不会存在一个子网内有这么多主机的情况. 因此大量的A类IP地址都被浪费掉了.

A类 :   0.0.0.0 ~ 127.255.255.255,高1位固定 + 7位网络号  + 24位主机号, 网段的选择就是0 ~ 127, 最多容纳2^24-2台主机, 即16777214台主机, 用于组建超大型的网络

B类 : 128.0.0.0 ~ 191.255.255.255,高2位固定 + 14位网络号 + 16位主机号, 网段的选择就是128.0 ~ 191.255, 最多容纳2^16-2台主机, 即65534台主机, 用于组建中型网络

C类 : 192.0.0.0 ~ 223.255.255.255,高3位固定 + 21位网络号 + 8位主机号,  网段的选择就是192.0.0 ~ 223.255.255, 最多容纳2^8-2台主机, 即254台主机, 用于组建小型网络

D类 : 224.0.0.0 ~ 239.255.255.255,高4位固定 + 28位多播组号。

E类 : 240.0.0.0 ~ 247.255.255.255,高5位固定 + 27位留用。

2)公网IP地址

  • A 类:0.0.0.0 到 127.255.255.255(1.0.0.0 到 126.255.255.255 是保留地址,不分配给网络设备)
  • B 类:128.0.0.0 到 191.255.255.255(172.16.0.0 到 172.31.255.255 是保留地址,不分配给网络设备)
  • C 类:192.0.0.0 到 223.255.255.255(192.168.0.0 到 192.168.255.255是保留地址,不分配给网络设备)

3)私有IP地址

RFC 1918 规定了三个私有 IP 地址段,在组织内部构建局域网时,可以使用私有 IP 地址进行内部通信,而无需直接连接到因特网上。

  • 10.0.0.0 到 10.255.255.255(共计 16,777,216 个地址)
  • 172.16.0.0 到 172.31.255.255(共计 1,048,576 个地址)
  • 192.168.0.0 到 192.168.255.255(共计 65,536 个地址)

这些私有 IP 地址段是专门为内部网络通信保留的,不会被路由器转发到因特网上,避免与全局 IP 地址冲突。

4)多播(Multicast)通信

  • D 类和 E 类属于 IPv4 地址空间中的特殊地址范围:
    • D 类:224.0.0.0 到 239.255.255.255,用于多播组通信。D 类地址用于多播(Multicast)通信,一次发送数据到多个目标设备。在多播通信中,数据包被发送到一个预定义的组,而不是单个目标设备。
    • E 类:240.0.0.0 到 247.255.255.255,属于未分配或保留地址空间。E 类地址原本曾被用作实验性地址或为将来使用保留的地址空间。这些地址并没有常规应用,可以说是未指定的保留地址。
      总结起来,D 类用于多播通信,而 E 类则是未分配或保留的地址空间,在现有网络中并没有明确定义的使用方式。

5)特殊的保留地址

除了 A 类、B 类和 C 类中的私有 IP 地址段(RFC 1918 规定的保留地址)外,还有一些其他保留地址段。

  • IP地址中的主机号全为0, 就成了网络号, 代表这个局域网
  • 将IP地址中的主机号的二进制全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包(此时目的地址当然就被设为了广播地址)
  • 127.0.0.1. 它代表设备的本地虚拟接口, 所以默认被看作是永远不会宕掉的接口. 所以通常在安装物理网卡前就可以ping通这个本地回环地址. 一般都会用来检查本地网络协议、基本数据接口等是否正常的.
  • 0.0.0.0 标识本机上的所有网卡, 用与TCP服务端程序的绑定地址, 相当于监听本机的所有网卡.
  • Loopback 地址:127.0.0.0 到 127.255.255.255(127.0.0.0/8),用于本地回环测试,通常表示本机自身。
    在这里插入图片描述

05 IP地址的数量限制

IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址. 这意味着, 一共只有43亿台主机能接入网络么?实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址。

1)CIDR子网掩码

对于这种情况, 人们提出了新的划分方案, 称为CIDR(Classless Interdomain Routing) :

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号(和IP地址一样也用点分10进制来表示)
  • 子网掩码也是一个32位的无符号整数. 通常用一串 “0” 来结尾, (所以说子网掩码的二进制从高位到低位的1肯定是连续的)
  • 将IP地址和子网掩码进行 按位与 操作, 得到的结果就是网络号
  • 网络号和主机号的划分与这个IP地址是A类, B类还是C类无关
例子1 : IP : 140.252.20.68 子网掩码 : 255.255.255.0   ==> 网络号 : IP和子网掩码按位与 :140.252.20.0
            ==> 子网地址范围就是主机号的二进制从全0到全1, 140.252.20.0 ~ 140.252.20.255
例子2 : IP : 140.252.20.68 子网掩码 : 255.255.255.240 ==> 网络号 : IP和子网掩码按位与 :140.252.20.64
            ==> 子网地址范围就是主机号的二进制从全0到全1, 140.252.20.53 ~ 140.252.20.79

IP地址和子网掩码还有一种更加简洁的表示方法, 例如 : 140.252.20.68/24, 表示IP地址是140.252.20.68, 子网掩码的高24位全为1, 也就是255.255.255.0

最大的主机号 + 1 就是局域网中主机的个数. 再看一个例子:
某公司网络的网段是192.168.2.0/24, 现在公司想从这个网段中划分出四个子网, 给公司的四个部门, 问, 每个子网的网络号以及子网掩码是多少, 以及每个子网中的IP地址范围是多少?
首先, 这是一个C类网络, 一个C类网络可以有256个主机号, 分为4个子网, 则每个子网的主机号个数就是64, 那每个子网中最大主机号就是64 - 1 = 63, 这个值就是子网掩码取反后的值, 那子网掩码就是63取反的值, 为255.255.255.192
四个子网的子网掩码是一样的, 因为其能分配的主机数都是一样的, 这道题中子网掩码为255.255.255.192
第一个子网IP范围 : 192.168.2.0 ~ 192.168.2.63  -- 网络号 : 192.168.2.0
第一个子网IP范围 : 192.168.2.64 ~ 192.168.2.127  -- 网络号 : 192.168.2.64
第一个子网IP范围 : 192.168.2.128 ~ 192.168.2.191  -- 网络号 : 192.168.2.128
第一个子网IP范围 : 192.168.2.192 ~ 192.168.2.255  -- 网络号 : 192.168.2.192

2)动态分配IP地址

利用DHCP协议, 给接入网络的设备动态分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的

3)NAT技术

一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP)。WAN口IP对外,LAN口IP对内

路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.

不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间IP地址就可以重复了.

每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了.

子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换).

4)IPv6

在2019年11月26日15时35分, 位于荷兰阿姆斯特丹的IP地址管理机构正式宣布, 全球43亿(具体是2^32)个 IPV4地址已经全部分配完毕, 但我们还有IPv6协议可以用, IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 目前IPv6已经开始部署, 但还没有完全普及。

06 路由选择

1)路由表维护

路由表可以由网络管理员手动维护(静态路由), 也可以通过一些算法自动生成(动态路由).相关的算法有距离向量算法, LS算法, Dijkstra算法等。

2)路由选择过程

路由就是在复杂的网络结构中, 找出一条通往终点的路线; 路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程.所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间
在这里插入图片描述

过程如下 :
当IP数据包, 到达路由器时, 路由器会先查看目的IP;
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
重复这个过程, 一直到达目的IP(或者TTL为0时被丢弃)

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表。
在这里插入图片描述

  • 路由表可以使用route命令查看;
  • 如果目的IP命中了路由表, 就直接转发即可;
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。
    在这里插入图片描述
  • Destination : 目的网段 (与我相连的网络的网络号)
  • Gatway : 网关(下一跳路由器入口的ip)
  • Getmask : 子网掩码
  • Metric : 跳数, 该条路由记录的质量, 一般情况下, 如果有多条到达相同目的地的路由记录, 路由器会采用metric值小的那条路由
  • Use Iface : 与这个网络相连的网卡名称

以上图路由表为例, 对于一个到达该节点(主机或路由器)的IP数据包,逐行检查目标IP地址与路由表中的每一行。首先,将目标地址与第一行子网掩码255.255.0.0 进行按位与操作,如果结果与网络号172.17.0.0 相等,则目标主机在本地局域网内,直接转发即可。若不相等,则继续与下一行子网掩码进行比较。重复这个过程,直到找到匹配项为止。如果所有行都不匹配,则将数据包发送给上层网关处理。

转发的过程:遍历路由表,目的IP & 路由表中配置的Genmask,确定该报文要去的目标网络,对比结果和Destination,通过IFace接口发出报文

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

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

相关文章

【算法】回溯:与递归,dfs的同质与分别,剪枝与恢复现场的详细理解,n皇后的回溯解法及算法复杂度分析。

目录 ​编辑 1.什么是回溯 2.关于剪枝 3.关于恢复现场 4.题目:二叉树的所有路径(凸显恢复现场:切实感受回溯与深搜) 问题分析 ①函数设置为:void Dfs(root) ②函数设置为:void Dfs(root,path) 解题思想&…

unity记一下如何播放动画

我使用的版本是2022.3.14fc 展开你的模型树,是会出现这个三角形的东西的 然后在资源面板创建一个animation controller 进去之后,把三角形拖进去,就会出现一个动画,然后点击他 在左侧给他创建这么个状态名字,类型…

【JavaEE多线程】理解和管理线程生命周期

目录 ThreadThread类的常用构造方法Thread类的常见属性启动一个线程-start()终止一个线程等待一个线程-join()线程的状态 Thread Thread 就是在 Java 中,线程的代言人。系统中的一个线程,就对应到 Java 中的一个 Thread 对象。围绕线程的各种操作&#…

webrtc中的Track,MediaChannel,MediaStream

文章目录 Track,MediaChannel,MediaStream的关系MediaStream的创建流程创建VideoChannel的堆栈创建VideoStream的堆栈 sdp中媒体参数信息的映射sdp中媒体信息参数设置体系参数设置流程参数映射体系 Track,MediaChannel,MediaStream的关系 Audio/Video track,MediaC…

一款酷黑风个人html引导页

一款酷黑风个人html引导页,如果想要修改的话,请在index.html文件修改图片位置在,images文件夹背景音乐在music文件夹手机端在m文件夹 源码下载 一款酷黑风个人html引导页

Windows Server 2016虚拟机安装教程

一、VMware Workstation虚拟机软件的下载 官网下载入口:​​​​​​Download VMware Workstation Pro - VMware Customer Connect​​​​​ 下载好之后自己看着提示安装软件就好. 二、镜像文件的下载 下载网站入口:MSDN, 我告诉你 - 做一个安静…

【SERVERLESS】AWS Lambda上实操

通过Serverless的发展历程及带给我们的挑战,引出我们改如何改变思路,化繁为简,趋利避害,更好的利用其优势,来释放企业效能,为创造带来无限可能。 一 Serverless概述 无服务器计算近年来与云原生计算都是在…

Tool:VRAM的简介、查询电脑VRAM的常用方法

Tool:VRAM的简介、查询电脑VRAM的常用方法 目录 VRAM的简介 查询电脑VRAM的常用方法 1、对于Windows系统 T1、设置-系统-显示查询法 T2、使用 DirectX 诊断工具: T3、使用系统信息工具: 2、对于Linux系统 T1、使用nvidia-smi命令&…

LeetCode 1 in Python. Two Sum (两数之和)

两数之和算法思想很简单,即找到nums[i]和nums[j]target-(nums[i])返回[I, j ]即可。问题在于,简单的两层遍历循环时间复杂度为O(),而通过构建一个hash表就可将时间复杂度降至O(n)。本文给出两种方法的代码实现。 示例: 图1 两数之…

算法中的复杂度(先做个铺垫)

文章目录 定义与分类时间复杂度概念大O的渐进表示法举例情况注意内涵 空间复杂度最优解 定义与分类 复杂度:衡量算法效率的标准时间效率:衡量这个算法的运行速度,也就是我们常说的时间复杂度空间效率:衡量这个算法所需要的额外空…

Unsupervised Learning ~ Anomaly detection

unusual events vibration: 振动 Density estimation: Gaussian(normal) Distribution. standard deviation: 标准差 variance deviation sigma Mu Parameter estimation Anomaly detection algorithm 少量异常样本点的处理经验 algorithm evaluation skewed datatsets:…

【 信息技术教资面试备战】

信息技术教资面试 教育事业,是一项终身事业,是从胎教开始到临终教育的一个循序渐进的过程。为此,教育艺术应当是人类生存之光。 一、什么是信息技术教资面试 考什么: 信息技术教资面试主要考察的内容包括结构化面试、试讲和答辩。…

字符串常量池(StringTable)

目录 String的基本特性 String的内存分配 字符串拼接操作 intern()的使用 String的基本特性 String:字符串,使用一对""引起来表示 String声明为final的,不可被继承 String实现了Serializable接口:表示字符串是支持…

数据库:SQL分类之DQL详解

1.DQL语法 select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数 基本查询 条件查询(where) 聚合函数(count、max、min、avg、sum ) 分组查询&…

jenkins+docker集成harbor实现可持续集成

目录 一、前言 二、Harbor介绍 2.1 什么是Harbor 2.1.1 Harbor架构图 2.2 Harbor 特征 2.3 Harbor 核心组件 2.4 Harbor使用场景 三、Harbor部署 3.1 安装docker compose 3.1.1 安装方式一 3.2 基于python3 pip安装docker compose 3.2.1 安装python3 3.2.2 安装pyt…

Kafka 架构深入探索

目录 一、Kafka 工作流程及文件存储机制 二、数据可靠性保证 三 、数据一致性问题 3.1follower 故障 3.2leader 故障 四、ack 应答机制 五、部署FilebeatKafkaELK 5.1环境准备 5.2部署ELK 5.2.1部署 Elasticsearch 软件 5.2.1.1修改elasticsearch主配置文件 5.2…

Collection与数据结构 二叉树(三):二叉树精选OJ例题(下)

1.二叉树的分层遍历 OJ链接 上面这道题是分层式的层序遍历,每一层有哪些结点都很明确,我们先想一想普通的层序遍历怎么做 /*** 层序遍历* param root*/public void levelOrder1(Node root){Queue<Node> queue new LinkedList<>();queue.offer(root);while (!qu…

2024第十五届蓝桥杯 JAVA B组 填空题

没参加这次蓝桥杯算法赛&#xff0c;十四届蓝桥杯被狂虐&#xff0c;对算法又爱又恨&#xff0c;爱我会做的题&#xff0c;痛恨我连题都读不懂的题&#x1f62d;,十四届填空只做对一个&#xff0c;今天闲的蛋疼想看看这次比赛能做对几个。 暂时没找到题目&#xff0c;这是网上找…

【Linux】阿里云ECS搭建lnmp和lamp集群

搭建LNMP&#xff08;Linux Nginx MySQL PHP&#xff09;或LAMP&#xff08;Linux Apache MySQL PHP&#xff09;集群 创建ECS实例&#xff1a; 在阿里云控制台创建多个ECS实例&#xff0c;选择相应的操作系统和配置&#xff0c;确保这些实例在同一VPC网络内&#xff0c;…

探索ERC20代币:构建您的第一个去中心化应用

下面文章中会涉及到该资源中的代码&#xff0c;如果想要完整版代码可以私信我获取&#x1f339; 文章目录 概要整体架构流程技术名词解释ERC20智能合约web3.js 技术细节ERC20合约部署创建前端界面前端与智能合约互连运行DAPP 小结 概要 在加密货币世界中&#xff0c;ERC20代币…