IP知识详解

  • IP基本认识

    • IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。

    • 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。

    • 网络层与数据链路层有什么关系呢?

      • IP 的作用是主机之间通信用的

      • MAC 的作用则是实现「直连」的两个设备之间通信

      • IP 则负责在「没有直连」的两个网络之间进行通信传输

    • 计算机网络中也需要「数据链路层」和「网络层」这个分层才能实现向最终目标地址的通信。

    • 源IP地址和目标IP地址在传输过程中是不会变化的(前提:没有使用 NAT 网络),只有源 MAC 地址和目标 MAC 一直在变化。

  • IP地址的基础知识

    • IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处理的。

    • 为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「.」隔开,再将每组转换成十进制。

    • IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址。

    • IP地址的分类

      • IP 地址显得很充裕,于是计算机科学家们设计了分类地址。

      • IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。

      • 什么是 A、B、C 类地址?

        • 对于 A、B、C 类主要分为两个部分,分别是网络号和主机号

        • A、B、C 分类对应的地址范围、最大主机个数

        • A、B、C 分类地址最大主机个数是如何计算的呢?

          • 为什么要减 2 呢?

            • 在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址。

            • 主机号全为 1 指定某个网络下的所有主机,用于广播

            • 主机号全为 0 指定某个网络

          • 广播地址用于什么?

            • 在同一个链路中相互连接的主机之间发送数据包。

            • 广播地址可以分为本地广播和直接广播两种。

              • 在本网络内广播的叫做本地广播

              • 在不同网络之间的广播叫做直接广播

      • 什么是 D、E 类地址?

        • D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。

        • 多播地址用于什么?

          • 用于将包发送给特定组内的所有主机。

          • 多播使用的 D 类地址,其前四位是 1110 就表示是多播地址,而剩下的 28 位是多播的组编号。

          • 从 224.0.0.0 ~ 239.255.255.255 都是多播的可用范围,其划分为以下三类:

            • 224.0.0.0 ~ 224.0.0.255 为预留的组播地址,只能在局域网中,路由器是不会进行转发的。

            • 224.0.1.0 ~ 238.255.255.255 为用户可用的组播地址,可以用于 Internet 上。

            • 239.0.0.0 ~ 239.255.255.255 为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效。

      • IP分类的优点

        • 路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。

        • 简单明了、选路(基于网络地址)简单。

      • IP分类的缺点

        • 同一网络下没有地址层次,缺少地址的灵活性。

          • 一个公司里用了 B 类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种 IP 分类是没有地址层次划分的功能

        • 不能很好的与现实网络匹配。

          • C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够用。

          • 而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。

      • 无分类地址CIDR

        • 无分类地址的方案,即 CIDR

        • 32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号。

        • 怎么划分网络号和主机号的呢?

          • 表示形式 a.b.c.d/x,其中 /x 表示前 x 位属于网络号, x 的范围是 0 ~ 32,这就使得 IP 地址更加具有灵活性。

        • 另一种划分网络号与主机号形式,那就是子网掩码,掩码的意思就是掩盖掉主机号,剩余的就是网络号。

          • 将子网掩码和 IP 地址按位计算 AND,就可得到网络号。

        • 为什么要分离网络号和主机号?

          • 两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同。如果网络地址相同,表明接受方在本网络上,那么可以把数据包直接发送到目标主机。

          • 路由器寻址工作中,也就是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。

        • 怎么进行子网划分?

          • 通过子网掩码划分出网络号和主机号,那实际上子网掩码还有一个作用,那就是划分子网。

          • 子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址

          • 未做子网划分的 ip 地址:网络地址+主机地址

          • 做子网划分后的 ip 地址:网络地址+(子网网络地址+子网主机地址)

          • 举例

            • C 类地址中前 24 位是网络号,最后 8 位是主机号,根据子网掩码可知从 8 位主机号中借用 2 位作为子网号。

      • 公有IP地址与私有IP地址

        • 公有 IP 地址由谁管理呢?

          • 私有 IP 地址通常是内部的 IT 人员管理,公有 IP 地址是由 ICANN 组织管理,中文叫「互联网名称与数字地址分配机构」。

          • IANA 是 ICANN 的其中一个机构,它负责分配互联网 IP 地址,是按州的方式层层分配。

        • IP地址与路由控制

          • IP地址的网络地址这一部分是用于进行路由控制。

          • 路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。

          • 在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。

          • 如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。

          • 环回地址是不会流向网络

            • 环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。

            • 计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址。与该地址具有相同意义的是一个叫做 localhost 的主机名。使用这个 IP 或主机名时,数据包不会流向网络

        • IP分片与重组

          • 每种数据链路的最大传输单元 MTU 都是不相同的

          • 每种数据链路的 MTU 之所以不同,是因为每个不同类型的数据链路的使用目的不同。

          • 最常见数据链路是以太网,它的 MTU 是 1500 字节。

          • 经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行,路由器是不会进行重组的

        • IPv6的亮点

          • 可分配的地址变多

          • IPv6 可自动配置,即使没有 DHCP 服务器也可以实现自动分配IP地址,真是便捷到即插即用

          • IPv6 包头包首部长度采用固定的值 40 字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能

          • IPv6 有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性

          • IPv6地址标识方法

            • IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 「:」 隔开。

            • 如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号 「::」隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。

          • IPv6地址的结构

            • IPv6 的地址主要有以下类型地址:

              • 单播地址,用于一对一的通信

              • 组播地址,用于一对多的通信

              • 任播地址,用于通信最近的节点,最近的节点是由路由协议决定

              • 没有广播地址

            • IPv6 单播地址类型

              • 在同一链路单播通信,不经过路由器,可以使用链路本地单播地址,IPv4 没有此类型

              • 在内网里单播通信,可以使用唯一本地地址,相当于 IPv4 的私有 IP

              • 在互联网通信,可以使用全局单播地址,相当于 IPv4 的公有 IP

          • IPv4首部和IPv6首部

            • 首部改进

              • 取消了首部校验和字段。

              • 取消了分片/重新组装相关字段。

              • 取消选项字段。

  • IP协议相关技术

    • DNS

      • 上网的时候,通常使用的方式是域名,而不是 IP 地址,因为域名方便人类记忆。

      • 这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址。

      • 域名的层级关系

        • 域名都是用句点来分隔的,比如 www.server.com,这里的句点代表了不同层次之间的界限。

        • 越靠右的位置表示其层级越高。

        • 域名的层级关系类似一个树状结构:

          • 根 DNS 服务器

          • 顶级域 DNS 服务器(com)

          • 权威 DNS 服务器(server.com)

          • 客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。

      • 域名解析的工作流程

        • 浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts,如果还是没有,就会 DNS 服务器进行查询

        • DNS 域名解析的过程蛮有意思的,整个过程就和我们日常生活中找人问路的过程类似,只指路不带路

    • ARP

      • 在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道「下一跳」的 MAC 地址。

      • 主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议

      • ARP 又是如何知道对方 MAC 地址的呢?

        • 把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。

      • RARP 协议你知道是什么吗?

        • ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址

        • 通常这需要架设一台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接入到网络,接着:

          • 该设备会发送一条「我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么」的请求信息。

          • RARP 服务器接到这个消息后返回「MAC地址为 XXXX 的设备,IP地址为 XXXX」的信息给这个设备。

    • DHCP

      • 电脑通常都是通过 DHCP 动态获取 IP 地址,大大省去了配 IP 信息繁琐的过程。

      • DHCP 交互中,全程都是使用 UDP 广播通信。

      • DHCP 中继代理。有了 DHCP 中继代理以后,对不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。

    • NAT

      • 互联网的用户增速是非常惊人的,所以 IPv4 地址依然有被耗尽的危险。

      • 网络地址转换 NAT 的方法,再次缓解了 IPv4 地址耗尽的问题。

      • 简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。

      • 那不是 N 个私有 IP 地址,你就要 N 个公有 IP 地址?这怎么就缓解了 IPv4 地址耗尽的问题?这不瞎扯吗?

        • 普通的 NAT 转换没什么意义。

        • 绝大多数的网络应用都是使用传输层协议 TCP 或 UDP 来传输数据的。

        • 可以把 IP 地址 + 端口号一起进行转换。

        • 用一个全球 IP 地址就可以了,这种转换技术就叫网络地址与端口转换 NAPT。

        • 两个私有 IP 地址都转换 IP 地址为公有地址 120.229.175.121,但是以不同的端口号作为区分。

        • 生成一个 NAPT 路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端 A、B 能同时与服务器之间进行通信。

      • NAT 那么牛逼,难道就没缺点了吗?

        • 由于 NAT/NAPT 都依赖于自己的转换表,因此会有以下的问题:

          • 外部无法主动与 NAT 内部服务器建立连接,因为 NAPT 转换表没有转换记录。

          • 转换表的生成与转换操作都会产生性能开销。

          • 通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。

      • 如何解决 NAT 潜在的问题呢?

        • 第一种就是改用 IPv6

        • 第一种就是改用 IPv6

    • ICMP

      • 互联网控制报文协议。

      • ICMP 功能都有啥?

        • 确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。

      • ICMP 类型

        • 一类是用于诊断的查询消息,也就是「查询报文类型」

        • 另一类是通知出错原因的错误消息,也就是「差错报文类型」

    • IGMP

      • 组播地址,也就是 D 类地址,既然是组播,那就说明是只有一组的主机能收到数据包,不在一组的主机不能收到数组包,怎么管理是否是在一组呢?需要 IGMP 协议了。

      • IGMP 是因特网组管理协议,工作在主机(组播成员)和最后一跳路由之间

      • IGMP 工作机制

        • IGMP 分为了三个版本分别是,IGMPv1、IGMPv2、IGMPv3。

        • 常规查询与响应和离开组播组

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

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

相关文章

Golang | Leetcode Golang题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; func isMatch(s string, p string) bool {m, n : len(s), len(p)matches : func(i, j int) bool {if i 0 {return false}if p[j-1] . {return true}return s[i-1] p[j-1]}f : make([][]bool, m 1)for i : 0; i < len(f); i {f[i] m…

matlab中角度-弧度转化

在 MATLAB 中进行角度和弧度之间的转换可以使用内置的函数&#xff1a; 1. 将角度转换为弧度&#xff1a; matlab rad deg * pi / 180; 这里 deg 是你想要转换的角度值&#xff0c;pi 是 MATLAB 内置的圆周率常量。 2. 将弧度转换为角度&#xff1a; matlab…

33.Double checked locking

class Singleton {private Singleton(){}//懒汉式private volatile static Singleton singleton null;public static Singleton getInstance() {//这里使用了Double checked locking//只有第一次会进入同步代码块产生对象&#xff0c;后面就不会进入同步代码块&#xff0c;提升…

SQLite的架构(十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite下一代查询规划器(十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 介绍 本文档介绍SQLite库的架构。 这里的信息对那些想要了解或 修改SQLite的内部工作原理。 接口SQL 命令处理器虚拟机B-树…

C++ //练习 11.14 扩展你在11.2.1节练习(第378页)中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。

C Primer&#xff08;第5版&#xff09; 练习 11.14 练习 11.14 扩展你在11.2.1节练习&#xff08;第378页&#xff09;中编写的孩子姓到名的map&#xff0c;添加一个pair的vector&#xff0c;保存孩子的名和生日。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#x…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

【二】Django小白三板斧

今日内容 静态文件配置 request对象方法初识 pycharm链接数据库&#xff08;MySQL&#xff09; django链接数据库&#xff08;MySQL&#xff09; Django ORM简介 利用ORM实现数据的增删查改 【一】Django小白三板斧 HttpResponse 返回字符串类型的数据 render 返回HTML文…

第20次修改了可删除可持久保存的前端html备忘录:重新布局

第20次修改了可删除可持久保存的前端html备忘录&#xff1a;重新布局 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

Linux云计算之Linux基础1——操作系统理论基础

目录 1、UNIX 的诞生和广泛使用 2、CPU 架构类型 3、CPU 指令 4、计算机程序设计和执行过程 5、操作统OS 6、编程层次 7、程序的内部运行接口 8、UI程序接口(人机交互接口) 9、程序的运行模式: 10、POSIX&#xff1a;可移植操作系统规范 11、计算机开源领域 12、Li…

文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题

一、如果栈操作包括 MULTIPUSH 操作&#xff0c;它将 k 个数据项压入栈中&#xff0c;那么栈操作的摊还代价的界还是 O(1) 吗? 文心一言&#xff1a; 在栈的基本操作中&#xff0c;我们通常考虑的是单个元素的压入&#xff08;push&#xff09;和弹出&#xff08;pop&#x…

前端三剑客 —— CSS ( 坐标问题 、定位问题和图片居中 )

前期内容回顾&#xff1a; 1.常见样式 text-shadow x轴 y轴 阴影的模糊程度 阴影的颜色 box-shadow border-radio 实现圆角 margin 内边距 padding 外边距 background 2.特殊样式 媒体查询&#xff1a;media 自定义字体&#xff1a;font-face { font-family:自定义名称&#…

TypeScript:泛型

TypeScript:泛型 一、单个泛型二、多个泛型:泛型可以同时指定多三、接口加泛型 在定义函数或者类型时&#xff0c;如果类型不确定就可以使用 泛型。 一、单个泛型 //T 表示任意类型,具体只有在函数执行时才可以确定。 function fn<T>(a:T):T{return T; }// 可以直接调用…

欧拉角及其旋转矩阵,旋转顺序与内旋/外旋及其代码

目录 欧拉角介绍 旋转矩阵公式推导 旋转顺序 内旋/外旋 欧拉角介绍 欧拉角&#xff1a; 横滚&#xff1a;roll&#xff08;绕X轴旋转&#xff09;&#xff1b; 俯仰&#xff1a;pitch&#xff08;绕Y轴旋转&#xff09;&#xff1b; 偏航&#xff08;也称航向角&#x…

小组分享内容第一部分:总览+HttpClients

目录 1.网络爬虫的作用&#xff08;人话&#xff09;&#xff1a; 2.使用的工具 3.不使用程序进行网页信息的获取的操作步骤 4.如何使用程序来进行上述操作 1.打开浏览器 2.输入网址 3.发送请求 4.获取响应 5.判断响应是否成功 6.获取响应里需要的内容 7.记得最后关…

深度学习模型--注意力机制(Attention Mechanism)

AI大模型学习 方向一&#xff1a;AI大模型学习的理论基础 提示&#xff1a;探讨AI大模型学习的数学基础、算法原理以及模型架构设计等。可以深入分析各种经典的深度学习模型&#xff0c;如卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;以…

【linux】重定向|缓冲区

read函数 将文件标识符为fd的文件内容读到buf中去&#xff0c;读count个&#xff0c;read的返回值是实际读到的个数&#xff0c;有可能文件中没有count个&#xff0c;但是read返回的还是实际读到的个数 stat函数 调用这个函数可以查到对应文件的属性&#xff0c;比方说文件大小…

Ceph分布式存储系统以及高可用原理

Ceph分布式存储系统以及高可用原理 1. Ceph原理和架构1.1 分布式存储系统抽象1.2 Ceph基本组件 2 Ceph中的策略层2.1 CRUSH进行数据分发和定位2.2 PG(Placement Group): 集群管理的基本单元2.3 PG的代理primary OSD2.4 轻量级的集群元数据ClusterMap2.5 对PG的罗辑分组&#xf…

谷粒商城——通过接口幂等性防止重复提交订单

如果用户向后端服务提交多次相同订单的提交服务&#xff0c;那么后端应该只生成一条订单记录。 有一些操作天然是幂等的&#xff0c;如查询操作和删除操作等。 幂等性实现 1.token机制&#xff08;仅这个方法适用于订单的重复提交&#xff09; 后端先生成1个令牌将其记录在R…

通用开发技能系列:SQL基础学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 通用开发技能系列 文章&#xff0c;主要对编程通用技能 SQL基础 进行学习 1.数据库简介 1.1.数据库中的一些名称 DataBase&#xff1a;数据库 程序员只负责怎么维护存取数据&#xff0c;不管数据库是什么 DBA…

python项目练习——14.学生管理系统

这个项目可以让用户管理学生的信息&#xff0c;包括学生的姓名、年龄、成绩等&#xff0c;并提供添加、编辑、删除、查询等功能。这个项目涉及到数据库操作、用户界面设计、数据验证等方面的技术。 代码示例&#xff1a; import tkinter as tk # 导入 Tkinter 库 import sqli…