前言 运维和云计算

什么是运维?简单来说就是对系统和服务运行、维护和优化。

其核心目的就是保障系统的高可用性,可靠性和性能,同时降低运营成本和风险。

云计算是一种通过互联网提供计算资源和服务的模式。它将计算资源、存储资源和应用程序等服务通过虚拟化技术整合在一起,并通过互联网提供给用户。

计算机网络基础

OSI七层模型

imgTCP/IP五层模型
在这里插入图片描述

L1 物理层

物理层的作用:连接不同的物理设备,传输比特流。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。

物理层设备:
  1. 集线器:用于将多个计算机连接到局域网上。
  2. 网卡:将计算机与网络物理连接起来。
  3. 中继器:用于加强信号的传输距离。
  4. 光纤收发器:用于光纤的信号收发。
物理层传输的是什么:

物理层传输的是比特流,也就是由0和1组成的二进制数字序列。通信双方使用物理层提供的传输介质并以某种方式进行数据编码与解码,使得接收方能够正确地接收到发送方所传输的信息。

L2 数据链路层

数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。数据链路层在不可靠的物理介质上提供可靠的传输。

该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

基本数据单位为数据帧。

数据链路层设备:
  1. 网桥:扩展网络和通信手段,在各种传输介质中转发数据信号,扩展网络的距离。
  2. 交换机:用于连接同一局域网内的多台设备,负责在设备之间转发数据帧。
MAC地址:

MAC 地址(Media Access Control Address),又称物理地址或硬件地址,是数据链路层用于标识网络设备的唯一标识符

标准格式MAC 地址由6 字节(48 位)二进制数组成,通常以十六进制表示,格式如下:

常见表示方式:XX:XX:XX:XX:XX:XX(如00:1A:2B:3C:4D:5E)或XX-XX-XX-XX-XX-XX,部分场景也会省略分隔符直接书写(如001A2B3C4D5E)。

每字节的十六进制范围为00FF,共 12 个十六进制字符。

L3网络层

网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。

基本数据单位为数据包。

数据链路层设备:

路由器:用于在网络间转发数据包,实现不同网络之间的连接和数据传输。

包含的主要协议:

IP协议(Internet Protocol,因特网互联协议);

ICMP协议(Internet Control Message Protocol,因特网控制报文协议);

ARP协议协议(Address Resolution Protocol,地址解析协议);

RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。

IP协议是 Internet 网络层最核心的协议。

IP地址:

前面学习的MAC地址是一个物理地址相当于我们的身份证,那么IP地址就相当于我们各自的电话号码——逻辑地址。用来标识我们在网络中的逻辑位置,一共有两个版本分别是IPv4和IPv6。

IP地址本质上是32位二进制数,共四个字节。一般情况下我们看到的表现形式为点分十进制,它也可以用二进制数表示。如图两种表现形式。
img

L4 传输层

传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题。

基本数据单位为数据段。

传输层设备:

网关

包含的主要协议:

TCP协议(Transmission Control Protocol,传输控制协议);

UDP协议(User Datagram Protocol,用户数据报协议)。

TCP: 在数据传输的完整性上,更安全一些
UDP:数据传输更快,但容易丢失。

L5 应用层

为操作系统或网络应用程序提供访问网络服务的接口。

包含的主要协议:

HTTP (Hypertext Transfer Protocol )超文本传输协议 <端口号 80>, 面向事务的应用层协议。

FTP (File Transfer Protocol )文件传输协议<端口号21>减少或消除不同操作系统下处理文件的不兼容性。

TFTP(Trivial File Transfer Protocol,简单文件传输协议)

SMTP (Simple Mail Transfer Protocol )简单邮件传输协议 <端口号25> 用于发送邮件。

SNMP(Simple Network Management Protocol),简单网络管理协议)

DNS(Domain Name System,域名系统)域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

L1~L5层封装与解封装

封装过程

首先一个用户在发给电脑一个请求,先传给应用层应用将数据处理完,之后交给传出加好TCP或者UDP的报头,传给应用层网络层在添加一层IP的报头,再交给数据链路层添加mac的头部和尾部,最后送到物理链路层转为比特流进行传出,这可以玩吗可以比作寄快递或者发请求的过程,这就是封装过程。

  +---------------------+
  |       应用层         |←HTTP/FTP/DNS等应用数据         
  +---------------------+
             ↓
  +---------------------+
  |      传输层          |←添加TCP/UDP头部(端口号、序列号等) 
  +---------------------+
             ↓
  +---------------------+
  |       网络层         |←添加IP头部(源/目的IP地址)
  +---------------------+
             ↓
  +---------------------+
  |     数据链路层        |←添加MAC头部(源/目的MAC地址)
  +---------------------+
             ↓
  +---------------------+
  |      物理层          |←转换为比特流
  +---------------------+
解封装

解封装与封装过程相反,封装是从应用层到物理层一层层加报头,解封装是在物理层到应用层的过程一层层去报头,我们可以想象层收到快递的过程,或者读取文件的过程。

  +---------------------+
  |        物理层        |←接收比特流,还原为帧
  +---------------------+
             ↑
  +---------------------+
  |       数据链路层      |←检查MAC地址
  +---------------------+
             ↑
  +---------------------+
  |        网络层        |←检查IP地址
  +---------------------+
             ↑
  +---------------------+
  |        传输层        |←根据端口号交给对应应用
  +---------------------+
             ↑
  +---------------------+
  |        应用层        |←处理HTTP请求
  +---------------------+
每一层的名字

在每一层的报头名字是都是不一样的,应用层叫做数据,传输层叫做数据段,网络层叫做数据包,数据链路层叫做数据帧,物理层叫做比特流。

封装、解封装目的:将数据安全、准确的传输到目标位置。

进制转换

二进制转十进制:

方法一:二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方(次方从0开始),再将其每个数进行相加。

例如:(1101)^2 转十进制:

在这里插入图片描述

方法二:先把2的次方依次排列出来,再将二进制数倒序依次排列,最后再把对应1的相加起来,0不加.

1 2 4 8 16 32
1 0 1 1

即1+4+8=13。

十进制转二进制:

方法一:采用"除2取余,逆序排列"。用十进制整数除2,可以得到一个商和余数;再用商去除2,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次逆序排列起来组合成二进制数。

例:把(17)10转换为二进制数。

在这里插入图片描述

即(17)10=(10001)2
方法二:十转二则与二转十相反,十转二采用与相位相减的方法,也是先把2的次方依次排列出来,然后用十进制数与其作对比,比其大或是相等就在相位下写入1,再与其相减,相减后的数再依次与前面作对比,如此进行,比其小就写入0,直至计算到2的0次方。最后从左往右排列出二进制数。

不同网络环境是怎么化分的(依靠子网掩码

子网掩码:用来区分网络位,用来判断通信双方是否位于同一个网络

子网掩码:也是以十进制表示的 255.255.255.0
192.168.110.129/24 255.255.255.0
192.168.110.130/16 255.255.0.0
0~255 256个数字
常用的子网掩码化分方式:A类、B类、C类
255.0.0.0 /8
11111111.00000000.00000000.00000000
255.255.0.0 /16
11111111.11111111.00000000.00000000
255.255.255.0 /24
11111111.11111111.11111111.00000000
255.255.255.255 /32
11111111.11111111.11111111.11111111
无类地址 /7 /13 /21
子网掩码,用于分割同一环境中的不同IP地址(分割网络环境)

TCP最重要的工作机制

TCP( Transmission control protocol )即传输控制协议,是一种面向连接可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。

TCP三次握手

为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。

举个栗子
公安局长王哥 和 陈某打电话

公安局:你好!陈某,听得到吗?(一次会话)
陈某:听到了,王哥,你能听到吗 (二次会话)
公安局:听到了,你过来自首吧 (开始会话)(三次会话)

通过这个例子我们可以知道三次会话的目的就是为了确保双方的连接正常,同理,TCP三次握手也是这个过程,下面用图文形式来解释一下TCP三次握手。

TCP建立连接过程

在这里插入图片描述

最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端,被动打开连接的是服务器。

TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态

第一次握手 TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态

第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态

第三次握手 TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手

有人可能会很疑惑为什么要进行第三次握手?
主要原因:防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

第一次握手: 客户端向服务器端发送报文
证明客户端的发送能力正常
第二次握手:服务器端接收到报文并向客户端发送报文
证明服务器端的接收能力、发送能力正常
第三次握手:客户端向服务器发送报文
证明客户端的接收能力正常
如果采用两次握手会出现以下情况:
客户端向服务器端发送的请求报文由于网络等原因滞留,未能发送到服务器端,此时连接请求报文失效,客户端会再次向服务器端发送请求报文,之后与服务器端建立连接,当连接释放后,由于网络通畅了,第一次客户端发送的请求报文又突然到达了服务器端,这条请求报文本该失效了,但此时服务器端误认为客户端又发送了一次连接请求,两次握手建立好连接,此时客户端忽略服务器端发来的确认,也不发送数据,造成不必要的错误和网络资源的浪费。

如果采用三次握手的话,就算那条失效的报文发送到服务器端,服务器端确认并向客户端发送报文,但此时客户端不会发出确认,由于客户端没有确认,由于服务器端没有接收到确认,就会知道客户端没有请求连接。

TCP四次挥手

建立TCP连接需要三次握手,终止TCP连接需要四次挥手

举个例子
张三和李四的对话

张三:好的,那我先走了
李四:好的,那你走吧
李四:那我也走了?
张三:好的,你走吧

在这里插入图片描述

数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。

第一次挥手 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态

第二次挥手 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态

第三次挥手 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

为什么客户端要等待2MSL?
主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。
挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

为什么客户端要等待2MSL?
主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐