计算机网络之IP篇

目录

一、IP 的基本认识

二、DNS

三、ARP 

四、DHCP

五、NAT

六、ICMP

七、IGMP

七、ping 的工作原理

ping-----查询报文的使用

traceroute —— 差错报文类型的使用

八、断网了还能 ping 通 127.0.0.1 吗?

8.1、什么是 127.0.0.1 ?

8.2、为什么断网了还能 ping 通 12.0.0.1 ?

8.3、127.0.0.1 和 localhost 以及 0.0.0.0 有区别吗?


一、IP 的基本认识

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

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

有的同学可能分不清 IP(网络层)和 MAC(数据链路层)之间的区别和关系

其实很容易区分,IP 的作用是主机之间通信用的,而 MAC 地址的作用则是实现【直连】的两个设备之间通信,而 IP 则负责在【没有直连】的网络之间进行通信传输。

IP 地址的分类:

最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:

为什么减 2 呢?

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

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

广播地址用于什么?

用在同一链路中相互连接的主机之间发送数据包。广播地址分为本地广播和直接广播:

在本网络内广播的叫做本地广播,在不同网络之间的广播叫做直接广播。

IP 分类的缺陷:

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

A,B,C 类网络有个尴尬的处境就是不能很好的与现实网络匹配

  • C 类地址能包含的最大主机数量实在太少了,只有 254 个,估计一个网吧都不够
  • 而 B 类地址能包含的最大主机数量又太多了,6 万多台机器放在一个网络下面,一般企业达不到这个规模,空闲的就是浪费了

这两个缺点都可以在 CIDR 无分类解决

IP 地址与路由控制

IP 地址的网络地址这一部分是用于进行路由控制,路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在主机和路由器上会有各自的路由器控制表。在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由器控制表中找到与该地址具有相同网络地址的记录,根据该纪录将 IP 包发送给相应的下一个路由器,如果路由器表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。

注意:环回地址是不会流向网络,环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。计算机使用一个特殊的 IP 地址 127.0.0.1 作为环回地址。与该地址具有相同意义的是一个叫做 localhost 的主机名。使用这个 IP 或主机名时,数据包不会流向网络。

IP 分片与重组

每种数据链路的最大传输单元 MTU 都是不相同的,如 FDDI 数据链路 MTU 4352、以太网的 MTU 是 1500 字节等。

每种数据链路的 MTU 之所以不同,是因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。其中我们最常见数据链路是以太网,它的 MTU 是1500 字节。当 IP 数据包大小大于 MTU 时,IP 数据包就会被分片。经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行,路由器是不会进行重组的。在分片传输中,一旦某个分片丢失,则会造成整个 IP 数据报作废,所以 TCP 引入了 MSS 也就是在 TCP 层进行分片不由 IP 分片,那么对于 UDP 我们尽量不要发送一个大于 MTU 的数据报文。

二、DNS

我们在上网的时候,通常使用的方式是域名,而不是 IP 地址,因为域名方便人们记忆,那么实现这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址。

DNS 中的域名都是用句号隔开的,比如 www.server.com ,这里的句点代表了不同层次之间的界限,在域名中,越靠右的位置表示其层级越高,所有的域名层级关系都类似于一棵树状结构。而 DNS 域名解析的过程蛮有意思的,整个过程就像和我们日常生活中找人问路的过程类似,只指路不带路。

三、ARP 

在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机【路由表】确定 IP 数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道【下一跳】的 MAC 地址。由于主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议,求得下一跳的地址。

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

简单的说,ARP 是借助 ARP 请求和 ARP 响应两种类型的包确定 MAC 地址的。

  1. 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址
  2. 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。

操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。不过,MAC 地址的缓存是由一定期限的,超过这个期限,缓存的内容将被清除。

RARP 协议是什么你知道不?

RARP 协议与 ARP 协议正好相反,是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络中就经常会用到。通常要架设一台 RARP 服务器,在这个服务器上注册设备的 MAC 地址和 IP 地址,然后再将这个设备接入网络,接着:

  1. 该设备会发送一条【我的 MAC 地址是 XXXX ,请告诉我,我的 IP 地址应该是什么】的请求信息
  2. RARP 服务器接到这个消息后返回【MAC地址为 XXXX 的设备,IP 地址为 XXXX】的信息给这个设备

最后设备就根据从 RARP 服务器所收到的应答消息设置自己的 IP 地址

四、DHCP

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

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

五、NAT

IPv4 的地址是非常紧缺的,在前面我们也提到可以通过无分类地址来减缓 IPv4 地址耗尽的速度,但是互联网的用户增速是非常惊人的,所以 IPv4 地址依然有被耗尽的危险。

于是提出了一种网络转换 NAT 的方法,缓解了 IPv4 地址耗尽的问题。

两个私有 IP 地址都转换 IP 地址为共有地址,但是是以不同端口号为区分。于是生成了一个 NAPT 路由器表的转换表,就可以正确地转换地址跟端口的组合,令客户端 A、B 同时能与服务端之间进行通信。

缺点:

  1. 外部无法主动与 NAT 内部服务器建立连接,因为 NAPT 转换表没有转换记录
  2. 转换表的生成与转换操作都会产生性能开销
  3. 通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置

解决办法:使用 IPv6 地址,NAT 穿透技术

NAT 穿透技术:能够让网络应用程序主动发现自己位于 NAT 设备后,并且会主动获得 NAT 设备的共有 IP ,并为自己建立端口映射条目,注意这些都是 NAT 设备后的应用程序自动完成的。也就是说,在 NAT 穿透技术中,NAT 设备后的应用程序处于主动地位,它已经明确知道 NAT 设备要修改它外发的数据包,于是主动配合 NAT 设备的操作,主动地建立好映射,这样就不会像以前由 NAT 设备来建立映射了。说人话就是,客户端主动从 NAT 设备中获取公有 IP ,然后自己建立端口映射条目,然后用这个条目对外通信,就不需要 NAT 设备来进行转换了。

六、ICMP

ICMP 全称是 Internet Control Message Protocol ,也就是互联网控制报文协议

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

在 IP 通信中如果某个 IP 包因为某种原因未能到达目标地址,那么这个原因将由 ICMP 负责通知。

ICMP 大致可以分为两类:

  1. 一类是用于诊断的查询消息,也就是【查询报文类型】
  2. 另一类是通知出错原因的错误消息,也就是【差错报文类型】

七、IGMP

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

  1. IGMP 报文向路由器申请加入和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机通过 IGMP 加入到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发组播包到对应的主机了。
  2. IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常为 1,因为 IGMP 是工作在主机与连接的路由器之间

七、ping 的工作原理

ping 命令执行的时候,源主机首先会构建一个 ICMP 回送请求消息数据包。

ping-----查询报文的使用

接下来我们重点看 ping 的发送和接收过程

同个子网下的主机 A 和主机 B ,主机 A 执行 ping 主机 B 后我们看看中间发送了什么?

ping 命令执行的时候,源主机首先会构建一个 ICMP 回送请求消息数据包。

ICMP 数据包内包含多个字段,最终的是两个:

  • 第一个是类型,对于回送请求消息而言该字段为 8
  • 另外一个是序号,主要用于区分连续 ping 的时候发出的多个数据包

每发出一个请求数据包,序号会自动加 1,为了能够计算往返时间 RTT ,他会在报文的数据部分插入发送时间

然后由 ICMP 协议将这个数据包连同这个地址 192.168.1.2 一起交给 IP 层。IP 层将以 192.168.1.2 作为目的地址,本机 IP 地址作为源地址,协议字段设置为 1,表示是 ICMP 协议,再加上一些其他控制信息,构建一个 IP 数据包。

接下来加入 MAC 头。如果在本地 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可以直接使用,如果没有,则需要发送 ARP 协议查询 MAC 地址,获得 MAC 地址后,由于数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址,还要附加上一些控制信息,依据以太网的介质访问规则,将他们传送出去。

主机 B 收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层。同样 IP 层检查后,将有用的信息提取后交给 ICMP 协议。主机 B 会构建一个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0,序号为接收到的请求数据包的序号,然后再发送出去给 主机 A。

在规定时间内,源主机如果没有接到 ICMP 的应答包,则说明主机不可达,如果接收到了 ICMP 回送响应消息,则说明目标主机可达。此时源主机会检查,用当前时刻减去该数据包最初从源主机发送出的时刻,就是 ICMP 数据包的时间延迟。

traceroute —— 差错报文类型的使用

traceroute 作用一:故意设置特殊的 TTL ,来追踪去往目的地时沿途的经过的路由器

这是如何工作的呢?

它的原理就是利用 IP 报的生存期限从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。比如将 TTL 设置为 1,则遇到第一个路由器,就牺牲了,接着返回 ICMP 差错报文网络类型,类型是时间超时。接下来将 TTL 设置为 2,第一个路由器过了,遇到第二个路由器也牺牲了,同时也返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机。这样的过程,traceroute 就可以拿到了所有的路由器 IP 。

发送方如何知道发出去的 UDP 包是否到达了目的主机呢?

traceroute 在发送 UDP 包时,会填入一个不可能的端口号,作为 UDP 目标端口号,然后由于每个下一个探针,他都会增加一个,这些端口号都是通常认为不会使用,不过,没有人会知道当某些程序监听此端口会发生什么。当目的主机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是【端口不可达】,所以当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。

作用二:故意设置不分片,从而确定路径的 MTU。

这样做是为了什么?目的是为了路径 MTU 发现。

工作原理如下:首先在发送端主机发送 IP 数据报时,将 IP 包首部的分片禁止标志位设置为 1,根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。随后,通过一个 ICMP 的不可到达消息将数据链路上 MTU 的值一起发送给主机,不可到达的消息的类型为【需要进行分片但设置了不分片位】,发送主机端每次收到 ICMP 差错报文时就减少包的大小,以此来定位一个合适的 MTU 值,以便能达到目标主机。

八、断网了还能 ping 通 127.0.0.1 吗?

断网了能 ping 通 127.0.0.1 。

8.1、什么是 127.0.0.1 ?

首先这是个 IPv4 地址,IPv4 地址有 32 位,一个字节有 8 位,共 4 个字节。

其中 127 开头的都属于回环地址,也是 IPv4 的特殊地址,没什么道理,就是人为规定的。而 127.0.0.1 是众多回环地址的一个。之所以不是 127.0.0.2 ,而是 127.0.0.1 ,是因为源码里就是这个定义的,也没什么道理。

8.2、为什么断网了还能 ping 通 12.0.0.1 ?

在有网的情况下,ping 最后是通过网卡将数据发送出去的。在断网的情况下可以看一下工作原理:

从应用层到传输层再到网络层。这段路径跟 ping 外网的时候是几乎是一样的。到了网络层,系统会根据目的 IP,在路由表中获取对应的路由信息,而这其中就包含选择哪个网卡把消息发送出去。当发现目标 IP 是外网的话,会从”真网卡“ 发送出去,当发现目标 IP 是回环地址时,就会选择本地网卡。本地网卡实际上就是个”假网卡“,它不像”真网卡“一样有个 ring buffer 什么的,”假网卡“会把数据推到一个叫做 input_pkt_queue 的链表中。这个链表是所有网卡共享的,上面挂着发给本机的各种消息。消息被发送到这个链表后,会再触发一个软中断。专门处理软中断的工具人是”ksoftrqd“这是个内核线程,它在收到软中断后就会立马去链表里把消息取出,然后顺着数据链路层,网络层等层层网上传递最后到应用程序。

ping 回环地址和通过 TCP 等各种协议发送数据到回环地址都是走这条路径。整条路径从发到收,都没有经过”真网卡“。之所以叫 127.0.0.1 叫本地回环地址,可以理解为,消息发出到这个本地上的话,就不会发出网络,在本机打个转就又回来了。所以断网能 ping 通 127.0.0.1

ping 回环地址和 ping 主机地址没有区别,都是在本机网络协议栈中兜一圈,就发回来了。

8.3、127.0.0.1 和 localhost 以及 0.0.0.0 有区别吗?

是有区别的:

首先 localhost 就不叫 IP ,它是一个域名,就跟 ”baidu.com“,是一个形式的东西,只不过默认会把它解析成 127.0.0.1 ,当然这可以在 /etc/hosts  文件下修改。

所以默认情况下,使用 localhost 跟使用 127.0.0.1 是没有区别的。其次就是 0.0.0.0 ,执行 ping 0.0.0.0 是会失败的,因为它在 IPv4 中是无效地址的目标地址,但是它还是很有用的,我们再启动服务器的时候,一般会 listen 一个IP 和一个端口,等待客户端的连接,如果此时 listen 的是本机的 0.0.0.0 那么它代表的是本机的所有 IPv4 地址(当然,客户端 connect 时,不能使用 0.0.0.0 ,必须要指明连接哪个服务器 IP )

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

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

相关文章

小程序1rpx边框不完美

问题展示 原因 rpx类似rem,渲染后实际转换成px之后可能存在小数,在不同的设备上多多少少会存在渲染的问题。而1rpx的问题就更加明显,因为不足1个物理像素的话,在IOS会进行四舍五入,而安卓好像统一向上取整&#xff0c…

人工智能|网络爬虫——用Python爬取电影数据并可视化分析

一、获取数据 1.技术工具 IDE编辑器:vscode 发送请求:requests 解析工具:xpath def Get_Detail(Details_Url):Detail_Url Base_Url Details_UrlOne_Detail requests.get(urlDetail_Url, headersHeaders)One_Detail_Html One_Detail.cont…

[MySQL--基础]多表查询

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录:生活中最大的挑战就是发现自己是谁。然后,坚定不移地成为那个人。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 MySQL数据库 多表查询 前言多表关系概述&#x1f…

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言?” 过去,我们的一些客户经常问这个问题,但随着时间的推移,这个问题变得越来越少。 尽管一度被忽视,但图数据库拥有无缝设计并适应其底层数据结构的查询…

四层LVS与七层Nginx负载均衡的区别

一、四层负载均衡与七层负载均衡: (1)四层负载均衡: 四层负载均衡工作在 OSI 七层模型的第四层(传输层),指的是负载均衡设备通过报文中的目标IP地址、端口和负载均衡算法,选择到达的…

赛事回顾 | 首届“智航杯“全国无人机智能算法竞赛落幕

11月28日,首届“智航杯”全国无人机智能算法竞赛实物赛在海南省三亚市成功落下帷幕。此次竞赛自2023年4月启动以来,共有来自全国145所高等院校和50多所企事业单位的1253支团队、3655人报名参赛,最终有6支队伍脱颖而出,入围了实物赛…

Elasticsearch:评估 RAG - 指标之旅

作者:Quentin Herreros,Thomas Veasey,Thanos Papaoikonomou 2020年,Meta发表了一篇题为 “知识密集型NLP任务的检索增强生成” 的论文。 本文介绍了一种通过利用外部数据库将语言模型 (LLM) 知识扩展到初始训练数据之外的方法。 …

11.9每日一题(无穷比无穷型的极限:提出并消去无穷因子、抓大头、拆多项式)

注:1、 为x的绝对值,因为x趋向负无穷,所以为 -x 2、用有理运算法则拆分式子时,注意判断极限是否存在

Python 网络爬虫(二):HTTP 基础知识

《Python入门核心技术》专栏总目录・点这里 文章目录 1. HTTP 协议简述2. HTTP 请求过程3. HTTP 的结构3.1 请求行3.2 请求头3.3 请求体3.4 状态行3.5 响应头3.6 响应体 4. Cookie 状态管理5. HTTP 请求示例6. 总结 大家好,我是水滴~~ 在准备学习网络爬虫之前&…

springboot慢性胃炎管理系统-计算机毕设 附源码 35541

SpringBoot慢性胃炎管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,医疗行业当然也不例外。慢性胃炎管理系统是以实际运用为开发背景,运用软件工程…

PLC通过485Modbus转Profinet网关与温控表通讯在发酵罐的应用

前提:在自动化控制系统中,PLC通常需要和各种设备进行数据通讯,其中就包括温控表。而这些设备之间的通讯常常需要通过485Modbus转Profinet网关(XD-MDPN100)来实现。 方案:在一些应用场合中,Profi…

Spring Boot 3 整合 Spring Cache 与 Redis 缓存实战

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

2023/11/30JAVAweb学习(postman,各种参数,统一响应数据,三层架构,分层解耦,bean组件扫描,Bean注入及解决方式)

数组json形式 想切换实现类,只需要只在你需要的类上添加 Component 如果在同一层,可以更改扫描范围,但是不推荐这种方法 注入时存在多个同类型bean解决方式

C++不同平台下的RTTI实现

给定一个含有虚函数的对象的地址&#xff0c;找到对应的类名&#xff0c;不同平台下方法也不同&#xff0c;这是由于RTTI实现并没有统一的标准。 Linux&#xff1a; #include <iostream> #include <typeinfo>class Person { public:virtual void func(){std::cout…

正则表达式(3):入门

正则表达式&#xff08;3&#xff09;&#xff1a;入门 小结 本博文转载自 从这篇文章开始&#xff0c;我们将介绍怎样在Linux中使用”正则表达式”&#xff0c;如果你想要学习怎样在Linux中使用正则表达式&#xff0c;这些文章就是你所需要的。 在认识”正则表达式”之前&am…

ODN光纤链路全程衰减如何计算

在FTTH等宽带光纤接入工程设计中&#xff0c;需根据应用系统的相应波长计算ODN光纤链路的全程衰减&#xff0c;一方面验证是否满足系统的光功率预算指标要求&#xff0c;另一方面作为工程验收的参考指标。 1 计算方法 ODN光纤链路的全程衰减是指从OLT至ONU的光纤链路中&#xf…

LinuxBasicsForHackers笔记 -- 控制文件和目录权限

对于每个文件和目录&#xff0c;我们可以指定文件所有者、特定用户组以及所有其他用户的权限状态。 不同类型的用户 在Linux中&#xff0c;root用户是拥有一切权力的。 root 用户基本上可以在系统上执行任何操作。 系统上的其他用户具有有限的能力和权限&#xff0c;并且几乎…

PHP项目启动记录

PHP项目启动记录 1. 项目整体目录2. bash_profile3. nginx的conf配置4. vim /etc/hosts5. php -v6.修改nginx后重新加载nginx7. npm run watch-app --moduleattendance --platformmobile8. vim ~/.zshrc 1. 项目整体目录 2. bash_profile ~/.bash_profile是Mac系统中的一个配置…

JVM之垃圾回收与算法(四)

垃圾回收与算法 1.如何确定垃圾 1.1. 引用计数法 在 Java 中&#xff0c;引用和对象是有关联的。如果要操作对象则必须用引用进行。因此&#xff0c;很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说&#xff0c;即一个对象如果没有任何与之关联的引用…

网页文章采集工具-人工智能AI功能

简数采集器是一款支持人工智能AI功能的网页文章采集工具&#xff0c;它可以调用百度的文心一言AI对采集的数据进行分析&#xff0c;处理&#xff0c;内容创作等等&#xff0c;根据你的需求进行更加灵活的数据采集和处理。 文心一言人工智能AI功能使用方法&#xff1a; 1. 填写…