《网络是怎么样连接的》读书笔记 - 认识网络基础概念(一)(下)

本文涉及的产品
.cn 域名,1个 12个月
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 《网络是怎么样连接的》读书笔记 - 认识网络基础概念(一)(下)

IP地址的组成



IP地址是一个32位的Bit数,通过8个bit为一组分为4组,每一组用十进制表示并且使用小圆点断开。

但是仅凭这32个bit是无法定位IP地址和网络号的,所以需要给IP地址附加信息。

通常IP地址的组合有下面的方法:

a)IP地址主体:11.22.33.44

b)IP和子网掩码:11.22.33.44/255.255.255.0

c)网络号的比特数作为子网掩码表示:11.22.33.44/24

d)子网地址:11.22.33.0/24,此时代表了整个子网

e)子网广播地址:11.22.33.255/24

首先整个IP分为32位固定长度,每四个为一组用圆点分隔,通过 0 - 255的十进制表示,比如0就是8个0,255就是8个1,但是仅仅凭借32个位数是没法辨别这32位那一部分是网络号,那一部分是主机号的,所以下面是IP的基本组成:

  • 11.22.33.44:表示基本的IP。
  • 11.22.33.44/255.255.255.0:前面部分是基本IP,后面的部分表示子网掩码,表示方式和IP地址一致,注意最后的8位全部为0表示整个子网。
  • 11.22.33.44/24: 这个24也是子网掩码,但是表示子网的方式是使用比特数。
  • 11.22.33.0/24: 子网掩码没有变,IP地址变了,最后的8位0也是表示整个子网。
  • 11.22.33.255/24: 子网掩码没有变,IP地址变了,最后的8位全部位1表示广播 整个子网。


什么是子网掩码?


初学者可能比较难以理解的概念,这里如果看不懂建议多找找资料挑一个看得懂的解释(关键是自己理解并且能自己复述)。

下面是从书中原图,个人看完感觉并不是特别直观也不知道干嘛,所以做了一个补充说明。

实际上下面图中网络号用了AND(位操作 &)计算出网络号码,计算之后确认出网络号是10.1.2,而后面省略的部分其实是8个0的掩码掩盖主机,这里的子网就是 10.1.2.0,对应的主机IP是10.1.2.3。


网络异常,图片无法展示
|


如果看不懂上面说的是啥,这里补充解释一下:

首先我们需要清楚子网掩码这东西是干嘛的,说白了就是划分网络号和主机号的,网络号可以看作一栋楼,主机是里面的小房间,但是房间编号可能是101,也可能是0101,更有可能是00101,具体得看掩盖的房间号从0000到1111有多少个,决定能分配给多少主机,而计算机0又很特殊,所以网络号的部分+ 子网掩码掩盖的位数部分(表现全为0)组成一个子网,只有在同一个子网的主机才能互相通信

所以子网掩码不能单独存在,它必须结合IP地址一起使用,子网掩码主要分为两个部分:全为1表示网络号,全为0表示的是主机号。

那么我们随便设置一个子网掩码比如255.255.255.111行不行?

答案是不行不行不行。因为子网掩码 必须是 连续的 1和0 组成,上面的掩码255.255.255.0 才是正确的用法,再举例比如255.255.255.244也是合格的子网掩码。

我们举例说明一下:


1100 0000.1010 1000.0000 0001.1000 0001 -- 192.168.1.129
1111 1111.1111 1111.1111 1111.0000 0000 -- 255.255.255.0
———————————————————— 
1100 0000.1010 1000.0000 0001.0000 0000 -- 划分出最终子网网段:192.168.1.0
注:确认最终的网络号和主机网段使用了位操作 & (1 & 1 = 1,1 & 0 = 0)


从最终的结果来看192.168.1.0 的前面24位都为1是暴露的,而后面8位被子网掩码给遮掩住,所以他的另一种写法是192.168.1.0/24,表示24位是1代表网络号,剩余的8位用于表示主机号但是因为被掩盖了所以全部为0。

虽然被掩盖了,但是主机号位置是0是1不需要关心的,主机号如果落在192.168.1.0192.168.1.255表示同在一个网段内子网一视同仁,比如192.168.1.129表示其中的129位,包含在这个网段之内。


小结

  1. 子网掩码 必须是 连续的 1和0 组成,简单记忆为1的部分来分割网络号,为0的部分用于掩盖主机号,同一个子网内的主机可以互相通信。
  2. 子网掩码有两种写入方式一种是使用和I P 地址一样的32位完全表示方式,另一种是使用数字计算1比特数进行替换,比如24就是下面图中的24个1。
  3. IP 地址的主机号,全 0表示整个子网,全 1表示向子网上所有设备发送包。这里补充一下全为1的情况 - “广播”。

广播是什么意思?广播地址是专门用于同时向该网络中所有主机进行广播的一个地址,只要是在同一个网段的主机都可以收听到广播。(例如192.168.211.32/24的广播地址为:192.168.211.255


DNS


DNS: Domain Name System域名服务系统,最常见的用法是将服务器名称和 IP 地址进行关联,当然只是它的主业,他有一些副业也挺重要但是不是关键感兴趣了解即可。

IP是难以记忆的,而简短域名更容易被人记住。你可能会觉得域名长了也难记忆啊,虽然解析IP的速度要比解析域名来的快的很多,但是显然网民为了访问一个网站要记住一串数字显然是不可能的,同时域名实际上对于当时的互联网发展来说也是有意义的。

所以谁来告诉主机域名的真实IP是多少?这时候DNS就上场了,DNS的作用是说白了就是用来映射IP和域名的一个东西。

DNS是如何完成映射的?对于用户主机来说一定存在一个用于解析DNS的客户端,这个客户端通常被称为解析器,通过域名解析出IP地址的过程也被称为域名解析


调用解析器

那么如何调用解析器?解析器实际上就是一段程序代码,这一段程序代码包含在底层操作系统的Socket库当中,通过Socket库调用解析器,然后解析器会向 DNS 服务器发送查询消息, DNS 服 务器根据请求查询IP然后返回响应消息。

Socket 解析域名的过程非常简单,只需要一行代码就可以完成:gethostbyname("www.lab.glasscom.com");

库:指的是通用程序组件的集合,用于规范程序代码的规范组建。以解析器为例,Socket 库是用于调用网络功能的程序组件集合。


解析器内部又是如何工作的?


在应用程序调用解析器的时候,此时控制权会转移到解析器,当控制权转为解析器之后解析器会生成要发送给 DNS 服务器的查询消息,生成过程类似构建一条“请告诉XXX的IP地址”的消息,并且发给DNS服务器完成解析。

特别注意注意发送请求不是由解析器完成,而是需要再次委托给操作系统的协议栈完成,所以此时权限会再次转移到协议栈,协议栈最终通过网卡把消息发给DNS,然后DNS查到IP返回消息,至此一次DNS解析请求就完成了。

值得注意的是 解析器会将取出的 IP 地址写入应用程序指定的内存地址中,此外还需要注意请求DNS服务器本身IP也是需要配置的,只不过这个 IP 地址是作为 TCP/IP 的项目事先设置好的,不需要再去查询直接就可以获取。

最后在不同的操作系统中获取DNS服务器的地址方式会有差别。

根据上面的描述,总结DNS解析流程:

  1. WEB浏览器发送域名解析请求,通过Socket向解析器进行请求解析,此时应用程序将会挂起。
  2. 解析器负责“翻译”应用程序的DNS解析请求,但是把具体的请求操作委托给系统栈。
  3. 系统栈负责将请求通过网卡发送给DNS服务器,等待DNS反馈结果。
  4. DNS获取真实IP之后将结果通过链路反向回送到应用程序。


网络异常,图片无法展示
|


DNS工作

接下来我们看看dns要如何工作,dns需要查询用户消息包含下面几个部分:

  • 域名:用来替代IP方便记忆。
  • class:考虑到互联网之外的情况,当然外部网络现在只有标识为in的互联网。
  • type:表示记录类型用于区分dns的解析方式,不同类型结果不同。

需要注意的是所有a类型的记录在DNS上注册了,再比如所有邮件类型都是MX的类型,整个DNS工作其实就简单的根据类型和域名进行查表,找到匹配的就回传,否则就会找不到。

域名层次:所谓域名层次就是DNS不可能是一台服务器,而是需要多台服务器配合,各自管理自己范围的内容,而对于域名来说越靠右边的部分在域名的层次里面越高。

这样看来是不是有点意思,以日常生活举例并不是我们认为的www是最高,其实他是最低的等级,.com才是最高的。


DNS查找步骤


首先将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中,然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中,以此类推。

举个例子,需要解析等域名为www.baidu.com,DNS需要事先把整个www.baidu.com整个域名注册到baidu.com,再把baidu.com注册到com域名,再把com注册到根域,这样就可以通过上级找下级。

这里提到DNS有一个根域,根域名指的是就是一个句点 . ,和Linux的根路径意义表现形式上类似。

根据根域可以解释为什么任何奇怪等域名都可以被访问到,原因是所有的下级都会注册到上级中,最后都有一个共同的 ,如果所有下级要找到根域,自然需要注册根域这个句点。

DNS查找的过程是自下而上找最近的DNS然后自上而下找根域向下查找的的,也就是先找最近的dns找,没有找到就需要直接从根域进行查找,一路通过层级下探找到最终的ip,这也是为什么访问国外ip慢的原因,因为路由链路实在是很长,可能需要几十次dns搜索查找。


网络异常,图片无法展示
|


DNS缓存

如果每个主机每次请求总是要通过DNS获取域名对应的IP信息,是不可能每次都DNS让找一遍的,实际上解析到的真实IP会预先缓存起来下次访问重复的数据直接返回即可。

另外虽然前面介绍的是查找自上而下从根域向下查找,实际上DNS还可以利用缓存特性通过多个层级的共享域名加快访问速度跨级查找,比如www.baidu.comwww.baidu 可以共享缓存直接跳两个层级快速找到(当然这里其实找最近的一个DNS就能找到,这里仅仅是举例)。

但是缓存有个副作用,就是不存在的ip地址消息也会缓存,不过为了防止这种情况一般会有过期时间,过期之后依然需要再次走一遍DNS查找流程。

问题引导:问题

表示的是HTTP 协议

  • 下面两个网址有什么不同?

a. www.nikkeibp.co.jp/sample

b. www.nikkeibp.co.jp/sample/

区别点在于sample 可能被解析出和预期不符合的结果。

用来识别连接在互联网上的计算机和服务器的地址叫什么?

IP地址

根据 Web 服务器的域名来查询 IP 地址时所使用的服务器叫什么?

DNHS服务器

向 DNS 服务器发送请求消息的程序叫什么?

解析器。

相关文章
|
1月前
|
Kubernetes 负载均衡 安全
在k8S中,网络模型概念是什么?
在k8S中,网络模型概念是什么?
|
30天前
|
网络协议 Linux
在Linux中,如何分析网络连接和端口占用情况?
在Linux中,如何分析网络连接和端口占用情况?
|
1月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
34 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
23天前
|
监控 安全 网络安全
非军事区 (DMZ) 在网络安全中的概念
【8月更文挑战第27天】
26 0
|
27天前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
|
30天前
|
机器学习/深度学习 网络协议 安全
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
|
1月前
|
网络协议 网络性能优化 UED
|
2月前
|
网络协议 程序员 视频直播
|
2月前
|
机器学习/深度学习 自然语言处理 算法
深度学习的关键概念和网络结构
度学习是人工智能和机器学习的一个重要分支,它通过模拟人脑神经元的工作方式来处理复杂的模式识别和数据分析任务。深度学习已经在许多领域取得了显著的成果,如图像识别、语音识别和自然语言处理。
38 1
|
1月前
|
JavaScript 前端开发 应用服务中间件
【qkl】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
【区块链】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能