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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于docker的开发者集成环境

docker-compose一键部署开发者环境。 常见的中间件:nginx, mysql, redis, mongo, rabbitmq, nacos, rocketmq, zookeeper等。 GIthub项目地址 1. 下载项目:git clone https://github.com/xhga/docker-develop-env.git 2. 进入文件夹:cd d…

有关“海口双日晕”现象的闲扯

今(4月14日)天,人民微博、海南广播电视总台、海南日报、人民视觉等官媒,争相报道“海口上空出现双日晕”这则新闻。本“人民体验官”,现在特别推广人民日报官方微博文化产品《海口双日晕!美好加倍&#xff…

【无向图找环】网格树

题目 #include<bits/stdc.h> using namespace std; #define int long long #define fi first #define se second const int maxn 2e5 5; const int inf 1e9 5;using namespace std;int n, m; //int pre[maxn]; int a[30][30], b[30][30];int dx[] {-1, 1, 0, 0}, dy…

llamafactory:unified efficient fine-tuning of 100+ lanuage models

1.introduction llamafactory由三个主要模块组成&#xff0c;Model Loader&#xff0c;Data Worker&#xff0c;Trainer。 2.Efficient fine-tuning techniques 2.1 Efficient Optimization 冻结微调&#xff1a;冻结大部分参数&#xff0c;同时只在一小部分解码器层中微调剩…

Echarts简单的多表联动效果和添加水印和按钮切换数据效果

多表联动 多表联动效果指的是在多个表格之间建立一种交互关系&#xff0c;以便它们之间的操作或选择能够相互影响。通常情况下&#xff0c;多表联动效果可以通过以下方式之一实现&#xff1a; 数据关联&#xff1a; 当在一个表格中选择或操作某些数据时&#xff0c;另一个表格…

一.NODE MCU(ESP8285,ESP8286)开发环境搭建

一.序言: 1.esp8285长什么样? 2.esp8285是什么,能做什么? 通过上面图片,看到上面的芯片,是带有多个阵脚的单片机。实际上,看着该芯片很小,但是却具有完整的wifi无线蓝牙功能,它本身可以运行一个极简的linux小系统,并且该极简的小linux系统具备无线蓝牙功能。。它同…

网络编程【InetAddress , TCP 、UDP 、HTTP 案例】

day38上 网络编程 InetAddress 理解&#xff1a;表示主机类 一个域名 对应 多个IP地址 public static void main(String[] args) throws UnknownHostException {//获取本机的IP地址 // InetAddress localHost InetAddress.getLocalHost(); // System.out.println(localHos…

Mac 软件清单

~自留备用~ Macbook用了几年之后, 512G的内置硬盘有些紧张了, 这几天总是提示空间不足, 就重装了下系统, 重装之后竟然不记得有些软件的名字和下载链接, 特此记录 Office 办公套件 直接从微软官网下载Office 安装包https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F…

python botos s3 aws

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html AWS是亚马逊的云服务&#xff0c;其提供了非常丰富的套件&#xff0c;以及支持多种语言的SDK/API。本文针对其S3云储存服务的Python SDK&#xff08;boto3&#xff09;的使用进行介绍。 …

golang 使用栈模拟计算器

思路&#xff1a; // Author sunwenbo // 2024/4/12 16:51 package mainimport ("errors""fmt""strconv" )// 使用数组来模拟一个栈的应用 type Stack struct {MaxTop int //表示栈最大可以存放数的个数Top int //表示栈底&#xff…

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

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

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

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

网络网络层之(2)ARP协议

网络网络层之(2)ARP协议 Author&#xff1a;Once Day Date: 2024年4月1日 漫漫长路&#xff0c;有人对你笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的博客-CSDN博客。 参考文档: 《TCP/IP详解卷一》arp(8) - Linux manual page (man7.org)彻底搞懂系…

Android MTK 屏下指纹的调试过程记录

Demo链接 -----> https://download.csdn.net/download/u011694328/89118346 一些品牌手机都有了屏下指纹的功能&#xff0c;还算是个比较新颖的功能&#xff0c;最近有项目需要使用屏下指纹&#xff0c; 使用的是汇顶&#xff08;Goodix&#xff09;的指纹方案&#xff0c…

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

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

系统架构最佳实践 -- 金融企业的资损防控

一、资损产生的原因 由于支付行业的特殊性与复杂性&#xff08;主要处理资金相关业务&#xff09;&#xff0c;支付公司处于资损的风口浪尖&#xff0c;最容易发生资损&#xff0c;可以说资损风险无处不在。 常规来说&#xff0c;资损原因主要可以分为以下三类&#xff1a; 1…

【MATLAB源码-第49期】基于蚁群算法(ACO)算法的栅格路径规划,输出最佳路径图和算法收敛曲线图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蚁群算法是一种模拟自然界蚂蚁觅食行为的启发式优化算法。在蚁群系统中&#xff0c;通过模拟蚂蚁之间通过信息素沟通的方式来寻找最短路径。 在栅格路径规划中&#xff0c;蚁群算法的基本步骤如下&#xff1a; 1. 初始化: …

Notepad++软件安装及配置说明

Notepad是 Windows操作系统下的一套文本编辑器&#xff0c;有完整的中文化接口及支持多国语言编写的功能。 Notepad功能比 Windows自带记事本强大&#xff0c;除了可以用来制作一般的纯文字说明文件&#xff0c;也十分适合编写计算机程序代码。Notepad不但可以显示行号&#xf…

鸿蒙开发快速入门

基本概念 ArkTS 因为ArkTS是基于Type Script扩展而来&#xff0c;是Type Script的超集&#xff0c;所以也可以关注一下Type Script的语法来理解ArkTS的语法 ArkUI HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架…