计算机网络基础

BS架构和CS架构 #

CS(Client/Server):客户端—-服务器结构。CS结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、相应速度快、利于处理大量数据。因为客户端要负责绝大多数的业务逻辑和UI展示,又称为胖客户端。它充分利用两端硬件,将任务分配到Client和Server两端,降低了系统的通讯开销。

CS架构是一种典型的两层架构,其客户端包含一个或多个在用户电脑上运行的程序,而服务端游两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。

BS(Browser/Server):浏览器—-服务器结构,是目前应用系统的发展方向。BS是伴随着Internet技术的兴起,对CS架构的改进,为了区别于传统的CS 模式,特意称为BS模式。在这种结构下,通过浏览器来进入工作界面,极少部分事务逻辑在前端(Browser)实现,主要事务逻辑在服务器端(Server)实现,形成三层结构。这样使得客户端电脑负荷大大简化(因此被称为瘦客户端),减轻了系统维护、升级的支出成本,降低了用户的总体成本(TCO)。 BS的主要特点是分布性强、维护方便、开发简单且共享性强、总体拥有成本低。但存在数据安全性问题、对服务器要求过高、数据传输速度慢、软件的个性化特点明显降低,难以实现传统模式下的特殊功能要求。它是瘦客户端,对大量的数据输入以及报表的应答等都需要通过浏览器与服务器进行交互,通信开销大,而且对于实现复杂的应用构造有较大的困难。

小结:CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。所以有些单位日常办公应用BS,在实际生产中使用CS结构。

HTTP #

HTTP(HyperText Transfer Protocol)是超文本传输协议

HTT报文结构 #

请求行 #

请求行的格式为:Method Request-URI HTTP-version CRLF

method为大写,有以下几种:GETPOST、HEAD、OPTIONS、PUT、DELETE

Request-URI是一个统一资源标识符

HTTP-version为请求的HTTP的协议版本

请求头 #

请求头的格式为键值对。一般常见的请求头如下:

User-Agent:PostmanRuntime/7.26.8 表示产生请求的客户端程序

Accept:/ 表示可接受的响应的类型为全部类型

Accept-Language:zh 表示可接受的响应的语言为中文

Accept-Encoding:gzip 表示客户端请求的压缩方式

Cookie:value 值由登陆之后服务端下发

token:value 值由登陆之后服务端下发

请求正文 #

一般为空

HTTP五大类状态码 #

1xx 提示信息,表示目前协议处理的中间状态,还需要后续的操作

2xx 成功,报文已经收到并被正确处理

3xx 重定向,资源位置发生变动,需要客户端重新发送请求

4xx 客户端错误,请求报文有误,服务器无法处理

5xx 服务器错误,服务器在处理请求时内部发生了错误

HTTP的特性 #

1、简单,易于理解

2、灵活和易于扩展

​ HTTP协议里的各类请求方法、URI/UPL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。

​ 同时,HTTP由于是工作在应用层(OSI第七层),则它下层可以随意变化。

3、应用广泛和跨平台

缺点

  • 无状态双刃剑

    无状态的好处:因为服务器不回去记忆HTTP的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的CPU和内存用来对外提供服务。

    无状态的坏处:既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。

    例如登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。

    这样每操作一次,都要验证信息,这样的购物体验还能愉快吗?别问,问就是酸爽

    对于无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术。

  • 明文传输双刃剑

    明文意味着在传输过程中的信息,是可方便阅读的。通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。

    但是正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于信息裸奔。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取。

  • 不安全

    HTTP最严重的缺点就是不安全:

    • 通信使用明文,内容可能会被窃听。
    • 不验证通信方的身份,因此有可能遭遇伪装。
    • 无法证明明文报文的完整性,有可能已经被篡改。

HTTPS #

HTTP与HTTPS有哪些区别? #

1、HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS解决了HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。

2、HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需要进行SSL/TLS的握手过程,才可以进入加密报文传输。

3、HTTP的端口号是80,HTTPS的端口号是443.

4、HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

HTTPS解决了HTTP的那些问题? #

HTTP是明文传输,存在以下三个风险:

  • 窃听风险
  • 篡改风险
  • 冒充风险

HTTPS在HTTP与TCP层之间加入了SSL/TLS协议。

可以很好的解决上述的风险:

  • 信息加密
  • 校验机制
  • 身份证书

HTTPS如何解决上面的三个风险的? #

  • 混合加密的方式实现信息的机密性。

    在通信建立前使用非对称加密,在通信过程中全部使用对称加密。

  • 摘要算法的方式来实现完整性。

    客户端在发送明文前通过摘要算法算出明文的【指纹】,发送时一起发送给服务器,服务器解密明文后,在用相同的摘要算法计算,对比指纹。

  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

    客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

    这就存在些问题,如何保证公钥不被篡改和信任度?

    所以这里就需要借助第三方权威机构 CA (数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。

HTTPS的工作原理 #

  1. 用户通过浏览器请求https网站,服务器收到请求,选择浏览器支持的加密和hash算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息。
  2. 浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告。否则,就生成一个随机数X,同时使用证书中的公钥进行加密,并且发送给服务器。
  3. 服务器收到之后,使用私钥解密,得到随机数X,然后使用X对网页内容进行加密,返回给浏览器。
  4. 浏览器则使用X和之前约定的加密算法进行解密,得到最终的网页内容。

UDP与TCP #

UDP与TCP的特点与区别 #

**用户数据报协议UDP(User Datagram Protocol)**是无连接的,尽最大可能交付,没有拥塞控制,面向报文,支持一对一、一对多、多对一和多对多的交互通信。

**传输控制协议TCP(Transmission Control Protocol)**是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流,每一条TCP连接只能是点对点的(一对一)。

什么时候选择 TCP,什么时候选 UDP? #

  • UDP 一般用于即时通信,比如: 语音、 视频 、直播等等。这些场景对传输数据的准确性要求不是特别高,比如你看视频即使少个一两帧,实际给人的感觉区别也不大。
  • TCP 用于对传输准确性要求特别高的场景,比如文件传输、发送和接收邮件、远程登录等等。

HTTP 基于 TCP 还是 UDP? #

HTTP 协议是基于 TCP 协议的,所以发送 HTTP 请求之前首先要建立 TCP 连接也就是要经历 3 次握手。

使用 TCP 的协议有哪些?使用 UDP 的协议有哪些? #

运行于 TCP 协议之上的协议

  1. HTTP 协议 :超文本传输协议(HTTP,HyperText Transfer Protocol)主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的。
  2. HTTPS 协议 :更安全的超文本传输协议(HTTPS,Hypertext Transfer Protocol Secure),身披 SSL 外衣的 HTTP 协议
  3. FTP 协议:文件传输协议 FTP(File Transfer Protocol),提供文件传输服务,基于 TCP 实现可靠的传输。使用 FTP 传输文件的好处是可以屏蔽操作系统和文件存储方式。
  4. SMTP 协议:简单邮件传输协议(SMTP,Simple Mail Transfer Protocol)的缩写,基于 TCP 协议,用来发送电子邮件。注意 ⚠️:接受邮件的协议不是 SMTP 而是 POP3 协议。
  5. POP3/IMAP 协议: POP3 和 IMAP 两者都是负责邮件接收的协议。
  6. Telent 协议:远程登陆协议,通过一个终端登陆到其他服务器。被一种称为 SSH 的非常安全的协议所取代。
  7. SSH 协议 : SSH( Secure Shell)是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH 建立在可靠的传输协议 TCP 之上。
  8. ……

运行于 UDP 协议之上的协议

  1. DHCP 协议:动态主机配置协议,动态配置 IP 地址
  2. DNS域名系统(DNS,Domain Name System)将人类可读的域名 (例如,www.baidu.com) 转换为机器可读的 IP 地址 (例如,220.181.38.148)。 我们可以将其理解为专为互联网设计的电话薄。实际上 DNS 同时支持 UDP 和 TCP 协议。

什么是粘包 #

粘包:多个数据包被连续存储于连续的缓存中,在对数据包进行读取时由于无法确定发送方的发送边界,而采用某一估测值大小来进行数据读取,若双方的size不一致时就会使指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

出现粘包的原因?

出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。

先说简单的接收方原因, 接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。

再说由发送导致的粘包, 这个比较有意思.

粘包并不是 TCP 协议造成的,它的出现是因为应用层协议设计者对 TCP 协议的错误理解,忽略了 TCP 协议的定义并且缺乏设计应用层协议的经验。我们将从 TCP 协议以及应用层协议出发,分析我们经常提到的 TCP 协议中的粘包是如何发生的:

  • TCP 协议是面向字节流的协议,它可能会组合或者拆分应用层协议的数据;
  • 应用层协议的没有定义消息的边界导致数据的接收方无法拼接数据;

解决办法:设置边界

TCP的三次握手 #

建立连接前server端需要监听端口,所以初始状态是LISTEN。

  1. client端建立连接,发送一个SYN同步包,发送之后状态变成SYN_SENT
  2. server端收到SYN之后,同意建立连接,返回一个ACK响应,同时也会给client发送一个SYN包,发送完成之后状态变为SYN_RCVD
  3. client端收到server的ACK之后,状态变为ESTABLISHED,返回ACK给server端。server收到之后状态也变为ESTABLISHED,连接建立完成。

假设 A 为客户端,B 为服务器端。

首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。

  • A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
  • B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
  • A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。

B 收到 A 的确认后,连接建立。

为什么是三次? #

1、第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

2、“3次握手”的作用就是双方都能明确自己和对方的收、发能力是正常的。

第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。从客户端的视角来看,我接到了服务端发送过来的响应数据包,说明服务端接收到了我在第一次握手时发送的网络包,并且成功发送了响应数据包,这就说明,服务端的接收、发送能力正常。而另一方面,我收到了服务端的响应数据包,说明我第一次发送的网络包成功到达服务端,这样,我自己的发送和接收能力也是正常的。

第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。第一、二次握手后,服务端并不知道客户端的接收能力以及自己的发送能力是否正常。

而在第三次握手时,服务端收到了客户端对第二次握手作的回应。从服务端的角度,我在第二次握手时的响应数据发送出去了,客户端接收到了。所以,我的发送能力是正常的。而客户端的接收能力也是正常的。

经历了上面的三次握手过程,客户端和服务端都确认了自己的接收、发送能力是正常的。之后就可以正常通信了。

第二次握手传回了ACK,为什么还要传回SYN? #

服务端传回发送端所发送的ACK是为了告诉客户端:“我接收到的信息确实就是你所发送的信号了”,这表明客户端到服务端的通信是正常的。回传SYN则是为两建立确认从服务端到客户端的通信。

TCP的四次挥手 #

  1. client端向server发送FIN包,进入FIN_WAIT_1状态,这代表client端已经没有数据要发送了
  2. server端收到之后,返回一个ACK,进入CLOSE_WAIT等待关闭的状态,因为server端可能还有没有发送完成的数据
  3. 等到server端数据都发送完毕之后,server端就向client发送FIN,进入LAST_ACK状态
  4. client收到ACK之后,进入TIME_WAIT的状态,同时回复ACK,server收到之后直接进入CLOSED状态,连接关闭。但是client要等待2MSL(报文最大生存时间)的时间,才会进入CLOSED状态。

四次挥手:

  • 客户端发送一个 FIN 段,并包含一个希望接收者看到的自己当前的序列号 K. 同时还包含一个 ACK 表示确认对方最近一次发过来的数据。
  • 服务端将 K 值加 1 作为 ACK 序号值,表明收到了上一个包。这时上层的应用程序会被告知另一端发起了关闭操作,通常这将引起应用程序发起自己的关闭操作。
  • 服务端发起自己的 FIN 段,ACK=K+1, Seq=L。
  • 客户端确认。进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。ACK=L+1。
为什么建立连接是三次握手,而关闭连接却是四次挥手呢? #
  1. TCP连接是双向传输的对等模式,就是说双方都可以同时向对方发送或接收数据。当有一方要关闭连接的时候,会发送指令告知对方,我要关闭连接了。
  2. 这时对方会回一个ACK,此时一个方向的连接关闭。但是另一个方向仍然可以继续传输数据,也就是说,服务端收到客户端的FIN标志,知道客户端想要断开这次连接了,但是,我服务端还想发送数据呢?我等到发送完所有数据后,会发送一个FIN段来关闭此方向上的连接。接收方发送ACK确认关闭连接。
  3. 客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
  4. 因为服务端在 LISTEN 状态下,收到建立连接请求的 SYN 报文后,把 ACK 和 SYN 放在一个报文里发送给客户端。而关闭连接时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发。

TIME_WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

  • 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
  • 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

TCP如何保证传输的可靠性? #

  • 基于数据块传输:应用数据被分割成TCP认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。
  • **对失序数据包重新排列以及去重:**TCP为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重。
  • **教验和:**TCP将保持它首部和数据的校验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
  • **超时重传:**当发送方发送数据之后,它启动一个定时器,等待目的端确认收到这个报文段。接收端实体对已成功收到的包发回一个相应的确认信息(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设为已丢失并进行重传。
  • **流量控制:**CP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议(TCP 利用滑动窗口实现流量控制)。
  • **拥塞控制:**当网络拥塞时,减少数据的发送。

OSI和TCP/IP网络分层模型 #

OSI七层模型和TCP/IP四层模型 #

物理层:通过网线、光缆等物理方式将电脑连接起来。传递的数据是比特流,0101001

数据链路层:首先,把比特流封装成数据帧的格式,对0、1进行分组。电脑连接起来之后,数据都经过网卡来传输,而网卡上定义了全世界唯一的MAC地址然后再通过广播的形式向局域网内所有电脑发送数据,再根据数据中MAC地址和自身对比判断是否是发给自己的。

网络层:广播的形式太低效,为了区分哪些MAC地址属于同一个子网,网络层定义了IP和子网掩码,通过对IP和子网掩码进行与运算就知道是否是同一个子网,再通过路由器和交换机进行传输。IP协议属于网络层协议。

传输层:有了网络层的MAC和IP地址之后,为了确定数据包是从哪个进程发送过来的,就需要端口号,通过端口来建立通信,比如TCP和UDP属于这一层的协议。

会话层:负责建立和断开连接。

表示层:为了使得数据能够被其他的计算机理解,再次将数据转换成另外一种格式,比如文字、视频、图片等。

应用层:最高层,面对用户,提供计算机网络与最终呈现给用户的界面。

TCP/IP则是四层的结构,相当于是对OSI模型的简化。

  1. 数据链路层,也有称作网络访问层、网络接口层。
  2. 网络层,也叫做IP层,处理IP数据包的传输、路由,建立主机间的通信。
  3. 传输层,就是为两台主机设备提供端到端的通信。
  4. 应用层,包含OSI的会话层、表示层和应用层,提供了一些常用的协议规范,比如FTP、SMPT、HTTP等。

总结下来,就是物理层通过物理手段把电脑连接起来,数据链路层则对比特流的数据进行分组,网络层来建立主机到主机到通信,传输层建立端口到端口的通信,应用层最终负责建立连接,数据格式转换,最终呈现给用户。

局域网中的通信协议 #

局域网中常用的三种通信协议分别是TCP/IP协议、NetBEUI协议和IPX/SPX协议。

TCP/IP协议是三种协议中配置起来最麻烦的一种,单机上网还好,通过局域网访问互联网的话,就要详细设置IP地址,网关,子网掩码,DNS服务器等参数。

TCP/IP尽管是目前最流行的网络协议,但TCP/IP协议在局域网中的通信效率并不高,使用它在浏览器“网上邻居”中的计算机时,经常会出现不能正常浏览的现象。此时安装NetEUI协议就会解决这个问题。

什么是MAC地址?(永远的痛) #

MAC地址全称是媒体访问控制地址(Media Access Control Address)。如果说,互联网中每一个资源都有IP地址唯一标识(IP协议内容),那么一切网络设备都有MAC地址唯一标识。

可以理解为,MAC地址是一个网络设备真正的身份证号,IP地址只是一种不重复的定位方式,也可以理解为MAC地址是身份证号,IP地址是邮政地址。MAC地址有一些别称,如LAN地址、物理地址、以太网地址等。

还有一点要知道的是,不仅仅是网络资源才有 IP 地址,网络设备也有 IP 地址,比如路由器。但从结构上说,路由器等网络设备的作用是组成一个网络,而且通常是内网,所以它们使用的 IP 地址通常是内网 IP,内网的设备在与内网以外的设备进行通信时,需要用到 NAT 协议。

MAC 地址的长度为 6 字节(48 比特),地址空间大小有 280 万亿之多($2^{48}$),MAC 地址由 IEEE 统一管理与分配,理论上,一个网络设备中的网卡上的 MAC 地址是永久的。不同的网卡生产商从 IEEE 那里购买自己的 MAC 地址空间(MAC 的前 24 比特),也就是前 24 比特由 IEEE 统一管理,保证不会重复。而后 24 比特,由各家生产商自己管理,同样保证生产的两块网卡的 MAC 地址不会重复。

MAC 地址具有可携带性、永久性,身份证号永久地标识一个人的身份,不论他到哪里都不会改变。而 IP 地址不具有这些性质,当一台设备更换了网络,它的 IP 地址也就可能发生改变,也就是它在互联网中的定位发生了变化。

最后,记住,MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址。

内网连接的IPv4地址为什么会变 #

内网连接(Intranet)中的IPv4地址之所以会变化,是因为使用动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)来分配和管理内部网络中的IP地址。

DHCP是一种网络协议,它允许网络设备(如路由器、交换机或DHCP服务器)自动分配和管理IP地址、子网掩码、默认网关和其他网络配置参数。当设备加入网络时,它可以通过DHCP协议向DHCP服务器请求一个可用的IP地址。

在典型的内网环境中,当设备启动或重新连接到网络时,DHCP客户端将向DHCP服务器发送一个IP地址请求。DHCP服务器从可用的IP地址池中分配一个IP地址给该设备,并返回给设备。设备接收到IP地址后,将配置为使用该地址进行通信。

由于内网中的IP地址是通过DHCP动态分配的,因此每次设备重新连接到网络时,它可能会分配一个不同的IP地址。这可能是因为设备之前分配的IP地址已经被其他设备使用,或者DHCP服务器采用了一种轮换机制来分配IP地址。

此外,有些网络环境中还可能存在IP地址保留时间的限制。在一些配置中,DHCP服务器可能会为设备分配一个IP地址,并在一段时间后释放该地址,以便其他设备可以使用。因此,即使设备保持连接,其IP地址也可能会在一定时间后发生变化。

总结起来,内网连接中的IPv4地址会发生变化,是因为使用了DHCP协议来动态分配和管理IP地址,以提高网络资源的利用率和灵活性。

ip地址不是唯一的吗 #

IP地址在特定的时间点上是唯一的。每个设备在网络中都应具有唯一的IP地址,以便进行正确的通信和数据传输。

然而,在内网环境中,使用动态主机配置协议(DHCP)时,IP地址可以在不同的时间点上发生变化。这是因为DHCP服务器通过为设备提供临时分配的IP地址,实现了IP地址的动态分配和管理。当设备重新连接到网络时,它可能会向DHCP服务器请求一个新的IP地址,并且服务器可以为其分配一个不同的可用地址。

需要注意的是,IP地址的唯一性是在一个特定的网络范围内保证的。在全球范围内,每个IP地址应该是唯一的,以确保全球互联网的正常运行。然而,在特定的内网环境中,由于使用了DHCP协议和临时分配的IP地址,设备的IP地址可以在不同的时间点上发生变化,但这些变化仅限于内网范围内。

因此,当我们讨论IP地址的唯一性时,我们通常是指在全球范围内的唯一性。在内网环境中,由于动态分配和管理的特性,设备的IP地址可能会变化,但在给定的时间点上,仍然可以通过IP地址进行唯一的标识和通信。

IPv6地址和IPv4地址的区别 #

IPv6地址和IPv4地址是两种不同的IP地址格式,用于标识网络中的设备和主机。它们之间的主要区别如下:

  1. 地址长度:IPv4地址由32位二进制数组成,通常表示为带有四个点分隔的十进制数(例如,192.168.0.1)。而IPv6地址由128位二进制数组成,通常表示为带有冒号分隔的十六进制数(例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334)。
  2. 地址空间:IPv4地址提供了大约40亿个可用地址,这在当前的互联网规模下已经不足以满足需求。IPv6地址提供了巨大的地址空间,约为2^128个地址,这几乎可以满足未来的需求。
  3. 地址表示:IPv4地址使用点分十进制表示法,其中每个8位二进制组被转换为一个十进制数。IPv6地址使用冒号分隔的十六进制表示法,其中每个16位二进制组被转换为一个四位十六进制数。
  4. 地址分配:IPv4地址通常通过静态配置或动态主机配置协议(DHCP)进行分配。IPv6地址的分配通常通过无状态地址自动配置(SLAAC)或动态主机配置协议(DHCPv6)进行。
  5. 支持的特性:IPv6地址在设计上考虑了许多新的功能和特性,例如内置的安全性、移动性支持、多播支持等。IPv4则相对较为简单,缺乏这些特性。

尽管IPv6具有更大的地址空间和更多的特性,但由于历史原因和现有的基础设施,IPv4仍然是互联网上广泛使用的协议。然而,随着IPv4地址枯竭问题的加剧,IPv6的部署和采用也在逐渐增加。目前,IPv4和IPv6通常同时存在,并且通过协议转换技术可以进行互操作性。

子网掩码是做什么用的 #

子网掩码(Subnet Mask)是一个用于确定一个IP地址的网络部分和主机部分的掩码。它与IP地址结合使用,用于划分一个IP地址所在的网络和主机。

子网掩码的作用如下:

  1. 确定网络标识:子网掩码将IP地址分成两部分,网络部分和主机部分。它通过将网络部分的位设置为1,主机部分的位设置为0,来定义网络标识。在进行网络通信时,子网掩码用于判断两个IP地址是否在同一个网络中。
  2. 分割网络:子网掩码允许将一个较大的IP地址空间划分为多个子网。通过调整子网掩码的位数,可以确定每个子网中可用的IP地址范围。这样可以更有效地管理IP地址,并对不同的子网进行灵活的配置和管理。
  3. 确定主机数量:子网掩码中主机部分的位数决定了每个子网中可用的主机数量。更多的主机位意味着可以容纳更多的主机设备。
  4. 路由选择:子网掩码在路由选择过程中起着重要的作用。路由器使用子网掩码来确定数据包的目标地址所在的网络,从而根据路由表选择正确的路径将数据包发送到目标网络。

总之,子网掩码与IP地址结合使用,用于划分网络和主机部分,并确定网络标识、分割网络、确定主机数量以及在路由选择中起作用。它是实现有效IP地址管理和网络通信的重要工具。