网络篇10 | 网络层 IP

网络篇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接口发出报文

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习学习日记4.14 数据增强 Unet网络部分

数据增强 transforms.Compose([:这表示创建一个转换组合,将多个数据转换操作串联在一起 transforms.RandomHorizontalFlip():这个操作是随机水平翻转图像,以增加数据的多样性。它以一定的概率随机地水平翻转输入的图像。 transfo…

coreldraw2024直装版下载 永久免费使用附下载安装教程( 仅限 win10用户 )

CorelDRAW 2024具有一些特别的优势,这些优势不仅体现在其丰富的功能和卓越的性能上,还体现在其跨平台的兼容性上。 首先,CorelDRAW 2024支持多种操作系统平台,包括但不限于Windows 10和Windows 11等高级操作系统。这意味着无论是…

webpack-(plugin,本地服务器,路径别名,安装vue)

安装vue npm i vue-loader -D npm i vue 编写一个vue文件: 在index.html中设置 一个id为app的div 将vue文件挂载到app中 vue比较特殊,除了使用loader外,还使用了plugin const path require("path"); const { VueLoaderPlugin …

zabbix 使用 dataease 做数据大屏

1、环境介绍 操作系统:龙蜥os 7.9 软件:dataease v1.18.18 zabbix: 6.0 2、软件下载 https://community.fit2cloud.com/#/products/dataease/downloads 3、将软件包上传到服务器并解压缩 tar -xvf dataease-v1.18.18-offline.tar.gz4、修改…

鸿蒙端云一体化开发--开发云函数--适合小白体制

开发云函数 那什么是云函数?我们将来又怎么去使用这个云函数呢? 答:我们之前要编写一些服务端的业务逻辑代码,那现在,在这种端云一体化的开发模式下,我们是把服务端的业务逻辑代码,通过云函数来…

Mybatis中SqlSession接口中的selectList方法

1、SqlSession SqlSession是Mybatis持久层框架提供的接口,该接口中包含了大量的CRUD操作方法(既增删改查方法)。 2、selectList方法 selectList方法是用于查询的方法,该方法具有多态性,如图所示(打开myb…

qemu源码解析一

基于qemu9.0.0 简介 QEMU是一个开源的虚拟化软件,它能够模拟各种硬件设备,支持多种虚拟化技术,如TCG、Xen、KVM等 TCG 是 QEMU 中的一个组件,它可以将高级语言编写的代码(例如 C 代码)转换为可在虚拟机中…

51单片机-独立按键模块

1. 独立按键控制LED状态 轻触按键实现原理&#xff1a;按下时&#xff0c;接通&#xff0c;通过金属弹片受力弹动来实现接通和断开。 松开按键 按下之后&#xff1a;就会被连接 同时按下K1和K2时&#xff0c;P2_0,接口所连LED灯才亮。 #include <REGX52.H> void ma…

python-numpy(3)-线性代数

一、方程求解 参考资料 对于Ax b 这种方程&#xff1a; np.linalg.inv(A).dot(B)np.linalg.solve(A,b) 1.1 求解多元一次方程一个直观的例子 # AXB # X A^(-1)*B A np.array([[7, 3, 0, 1], [0, 1, 0, -1], [1, 0, 6, -3], [1, 1, -1, -1]]) B np.array([8, 6, -3, 1]…

Vue - 6( 13000 字 Vue3 入门级教程)

一 &#xff1a;Vue3 1.1 Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-ne…

Android ParcelFileDescriptor实现进程间通信

需求 一个通信通道&#xff0c;实现跨进程的的Socket网络通信。 具体的通信通道的图如下。 需求分析 我们需要一个进程一直做通信通道的事情&#xff0c;业务进程把数据通过进程间通信交给通信进程。通信进程通过Socket通道将数据发给网络另外一端的通信进程。接收端的通信进…

RedisTemplate

3.3.RedisTemplate 在Sentinel集群监管下的Redis主从集群&#xff0c;其节点会因为自动故障转移而发生变化&#xff0c;Redis的客户端必须感知这种变化&#xff0c;及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。 下面&#xff0c;我们…

家庭网络防御系统搭建-虚拟机安装siem/securityonion网络连接问题汇总

由于我是在虚拟机中安装的security onion&#xff0c;在此过程中&#xff0c;遇到很多的网络访问不通的问题&#xff0c;通过该文章把网络连接问题做一下梳理。如果直接把securityonion 安装在物理机上&#xff0c;网络问题则会少很多。 NAT无法访问虚拟机 security onion虚拟…

ssm051网上医院预约挂号系统+jsp

网上医院预约挂号系统设计与实现 摘 要 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;因此传统管理方式就不适合。为了让医院预约挂号信息的管理模式进行升级&#xff0c;也为了更好的维护医院预约挂号信息&#xff0c;网上医院…

dbeaver数据库语言编辑器设置jdbc驱动

打开 dbeaver 软件 数据库 -> 驱动管理器 以mysql为例 双击 MySQL -> 库 -> 添加工件 然后 打开maven组件库 官网 找到mysql驱动对应的maven工件地址 复制进去然后确认就行了 参考 大神博客

<计算机网络自顶向下> TCPUDP套接字编程

应用实现&#xff1a;源端的应用进程交换报文实现应用协议&#xff0c;来实现各种各样的网络应用&#xff08;dash&#xff0c;email, etc&#xff09; 而应用层通信不可以直接通信&#xff0c;需要借助下层的服务才可以进行&#xff0c;通过层间接口交给下层&#xff0c;通过…

Hadoop概述及集群搭建

文章目录 一、Hadoop介绍二、Hadoop发展简史三、Hadoop核心组件四、Hadoop架构变迁1、Hadoop 1.02、Hadoop 2.03、Hadoop 3.0 五、Hadoop集群简介六、Hadoop部署模式七、Hadoop 集群搭建第一步&#xff1a;创建虚拟机第二步&#xff1a;安装Linux镜像第三步&#xff1a;网络配置…

Go微服务: go-micro集成consul的注册中心和配置中心

微服务与注册中心的关系图 这个图很好说明了微服务之间的关系&#xff0c;以及consul注册中心的重要性 环境准备 1 &#xff09;consul 集群 假设consul 集群已经搭建&#xff0c;已有5台server和2台client这里2台client被nginx做负载均衡&#xff0c;假设最终本地的访问地址…

了解 Vue 工程化开发中的组件通信

目录 1. 组件通信语法 1.1. 什么是组件通信&#xff1f; 1.2. 为什么要使用组件通信&#xff1f; 1.3. 组件之间有哪些关系&#xff08;组件关系分类&#xff09;&#xff1f; 1.4. 组件通信方案有哪几类 &#xff1f; 2. 父子通信流程图 3. 父传子 3.1. 父传子核心流程…

1. 信息存储

系列文章目录 信息的表示和处理 : Information Storage&#xff08;信息存储&#xff09;Integer Representation&#xff08;整数表示&#xff09;Integer Arithmetic&#xff08;整数运算&#xff09;Floating Point&#xff08;浮点数&#xff09; 文章目录 系列文章目录前…