3.1网络基础
3.1.1 OSI七层模型
# 一种理论上的网络通信模型,实践中未应用;从底层到上层分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
* 物理层:物理介质传输比特流,如电缆、光缆
* 数据链路层:相邻节点(点对点)间提供可靠的帧级数据传输服务,如通过流量控制、差错控制技术
* 网络层:实现跨网络的逻辑寻址与路由选择
* 传输层:为应用程序提供端到端的通信服务,保证数据传输过程中的可靠性和完整性
* 会话层:建立、管理和终止会话,实现数据同步
* 表示层:数据的各种编码转换,确保数据在不同系统之间的兼容
* 应用层:为应用软件提供网络服务
3.1.2 TCP/IP四层模型
# 实际网络通信中所用的模型,从底层到上层分别是物理层、数据链路层、网络层、传输层、应用层
3.1.3 以太网
# 一种基于分组交换技术的局域网通信标准,以数据帧的形式传输,数据帧包含:目的地址、源地址、数据、校验码;目的地址和源地址标识发送方和接收方,数据包含实际传输的信息,校验码检测数据在传输过程中是否发生错误
3.1.4 网关和路由器的区别
网关 | 路由器 | |
---|---|---|
功能 | 不同协议网络的连接和转换 | 主要是同类型网络的数据转发 |
工作层级 | 网络层->应用层之间 | 网络层 |
应用场景 | 不同协议网络的连接,如智能家居(蓝牙、wifi等协议)、企业网络(内部专网和运营商网络)、物联网(传感器和云端sss) | 同类型网络的互联 |
3.1.5 集线器、中继器、交换机的区别
中继器 | 集线器 | 交换机 | |
---|---|---|---|
工作层级 | 物理层 | 物理层;相当于多端口的中继器 | 数据链路层 |
核心功能 | 放大物理信号 | 放大物理信号;无差别转发数据,共享带宽 | 根据Mac地址智能转发数据帧 |
应用场景 | 延长物理距离 | 局域网核心设备 |
3.2 web基础
3.2.1 HTTP协议
# 超文本传输协议,属于应用层协议,作用于客户端和服务端之间进行信息交互,有如下显著特点:
1 无连接:完成一次数据传输后主动断开,不会一直保持连接状态,下次重连
2 无状态:每个请求独立且完整,服务器不记录历史请求;协议本身不保留客户端和服务器之间的交互状态
3 请求-响应模型:客户端发起请求,服务端根据请求内容响应
# http报文-请求报文
- 起始行:(start line),开始行,请求行,描述了请求的基本信息
- 头部字段合集:(header),首部行,使用 key: value 格式详细的说明报文
- 消息正文:(entity),实体(body),请求数据,可以没有
# http报文-相应报文
- 起始行:(start line),开始行,状态行,描述了响应的基本信息
- 头部字段合集:(header),首部行,使用 key: value 格式详细的说明报文
- 消息正文:(entity),实体(body),响应数据,可以没有
3.2.2 Socket套接字
# 网络编程中的一个概念,介于应用层和传输层之间的编程接口,用于实现不同主机间的通信
3.2.3 浏览器访问网站的简单过程
- 浏览器输入地址
- DNS解析域名得到目标服务器ip地址
- 浏览器和服务器基于TCP的三次握手协议建立连接
- 浏览器组织报文发送服务器
- 服务器收到报文后处理请求,拼接好回复报文后返给浏览器
- 浏览器解析报文,然后渲染显示
- 关闭连接,释放资源
3.2.4 https协议
# https协议=http协议+SSL/TLS协议 相当于在原有http协议基础上进行了加密处理
3.2.5 常见的前端开发框架
1. React:一款由Facebook开发的JavaScript库,最大的特点是采用组件化的开发方式,允许开发者
将用户界面拆分为可复用的独立组件,通过虚拟DOM技术优化性能,是构建大型、高性能Web应用
的首选。
2. Vue:一款轻量级、渐进式的JavaScript框架,最大的特点是提供了响应式数据绑定和双向数据绑定
的特性,能够自动追踪数据的变化并更新视图,适合构建中小型应用,学习曲线平缓,易于上手。
3. Angular:由Google维护的一款JavaScript框架,最大的特点是提供了构建Web应用所需的所有工
具,包括数据绑定、路由、表单处理、HTTP客户端等,是一个完整的解决方案,适合构建复杂的单
页应用。
4. jQuery:一款简化JavaScript操作的库,最大的特点是提供了一系列的便捷方法,使得DOM操作、
事件处理、动画效果等变得更加简单和高效。
5. Bootstrap:一个开源的前端框架,最大的特点是提供了丰富的CSS和JavaScript组件,用于快速构
建响应式网页,内置了多种样式和组件,大大简化了前端开发工作。
3.3 Server部署
3.3.1 网络配置文件
# ubuntu
/etc/netplan/*.yaml
wch@ubuntu-server-24-04:~$ ls /etc/netplan/ # ubuntu-server版,默认只有5050-cloud-init.yaml
50-cloud-init.yaml
wch@wch-ubuntu-desktop-24:~$ ls /etc/netplan/ # ubuntu-desktop版,默认只有01*.yaml和50*yaml,两个90*yaml文件是在图形化界面修改网卡信息留下的配置文件
01-network-manager-all.yaml 90-NM-14f59568-5076-387a-aef6-10adfcca2e26.yaml
50-cloud-init.yaml 90-NM-3fc91611-2585-3063-ac16-0d3e7c50d8c3.yaml
# 解读
- 1-network-manager-all.yaml(desktop版无该文件):由 Ubuntu中网络配置和管理的工具networkManager服务使用,该文件可能包含NetworkManager动态生成的配置信息。通俗讲:01-network-manager-all.yaml文件告诉Netplan使用NetworkManager来管理系统上的所有网络设备。这意味着可以通过NetworkManager的图形界面或命令行工具来配置、监控和管理网络连接,而不用直接编辑Netplan的配置文件
- 50-cloud-init.yaml:Ubuntu 24.04及更高版本的默认网络配置文件
- 90-NM-xxx.yaml(desktop版无该文件):该文件是NetworkManager为手工图形创建网络设备时候添加的配置文件,会覆盖01-network-manager-all.yaml或50-cloud-init.yaml中的全局设置
# 注:在Ubuntu系统中,可以有多个Netplan配置文件,但通常只有一个会被用作活动配置。Netplan会根据文件名的数字前缀(在这个例子中是01-)来确定哪个文件是活动配置。数字越小,优先级越高。如果存在多个配置文件,Netplan将合并它们的内容,但如果有冲突,优先级高的文件将覆盖优先级低的文件中的设置
3.3.2 静态IP和动态IP配置⭐️
# 在ubuntu-server主机下修改ip信息
[wch@ubuntu-server-24-04]$ sudo cat /etc/netplan/50-cloud-init.yaml
network:version: 2ethernets:ens33:dhcp4: true
18:30:11-[当前目录:~]
[wch@ubuntu-server-24-04]$ vim /etc/netplan/50-cloud-init.yaml
network:version: 2ethernets:ens33:dhcp4: noaddresses:- "10.0.0.16/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2
sudo netplan apply # 让修改后的网卡信息生效
# 给ubuntu-server新增一张虚拟网卡,并配置相应网络地址信息# 首先是在VMware中给Ubuntu-server主机新增一个虚拟网卡,然后查看虚拟网卡名称后进行如下配置
[wch@ubuntu-server-24-04]$ sudo vim /etc/netplan/50-cloud-init.yaml
network:version: 2ethernets:ens33:dhcp4: noaddresses:- "10.0.0.16/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2ens37: # 新增一张名为ens37的虚拟网卡dhcp4: noaddresses:- "10.0.0.111/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2
sudo netplan apply
[wch@ubuntu-server-24-04]$ ifconfig ens37 # 查看ens37网卡信息
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.0.111 netmask 255.255.255.0 broadcast 10.0.0.255inet6 fe80::20c:29ff:fe69:a492 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:69:a4:92 txqueuelen 1000 (Ethernet)RX packets 4 bytes 295 (295.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 14 bytes 1096 (1.0 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.3.3 网络配置相关命令
3.3.3.1 主机名配置
# 临时修改主机名 -> hostname命令
[wch@ubuntu-server-24-04]$ hostname # 显示当前主机名
ubuntu-server-24-04
19:42:42-[当前目录:~]
[wch@ubuntu-server-24-04]$ hostname temp
hostname: you must be root to change the host name
19:42:49-[当前目录:~]
[wch@ubuntu-server-24-04]$ sudo hostname temp # 临时修改主机名
[sudo] password for wch:
19:43:00-[当前目录:~]
[wch@ubuntu-server-24-04]$ hostname
temp
19:43:48-[当前目录:~]
[wch@ubuntu-server-24-04]$ exec /bin/bash # 立即生效
19:45:02-[当前目录:~]
[wch@temp]$ # 可看到当前显示主机名temp
19:42:03-[当前目录:~]
[wch@ubuntu-desktop-24]$ # exit退出后再进入temp主机名失效# 永久修改主机名 -> hostnamectl命令
[wch@ubuntu-desktop-24]$ hostnamectl status # 输出主机信息,同hostnamectl命令效果Static hostname: wch-ubuntu-desktop-24.04
Transient hostname: ubuntu-desktop-24Icon name: computer-vmChassis: vm 🖴Machine ID: 3c2aae15fbeb42ad9f34197b061f6fe5Boot ID: 3e850da7ff184a3d9aca2945f1606f4cVirtualization: vmwareOperating System: Ubuntu 24.04 LTSKernel: Linux 6.8.0-31-genericArchitecture: x86-64Hardware Vendor: VMware, Inc.Hardware Model: VMware Virtual PlatformFirmware Version: 6.00Firmware Date: Thu 2020-11-12Firmware Age: 4y 10month 1w 1d
[wch@ubuntu-desktop-24]$ hostnamectl hostname # hostname子命令显示当前主机名
ubuntu-desktop-24
[wch@ubuntu-desktop-24]$ hostnamectl set-hostname xxxxxxxxxxxxxx # set-hostname子命令用于永久修改主机名,目前已被废弃,使用hostname子命令
==== AUTHENTICATING FOR org.freedesktop.hostname1.set-static-hostname ====
Authentication is required to set the statically configured local hostname, as well as the pretty hostname.
Authenticating as: wch
Password:
==== AUTHENTICATION COMPLETE ====
19:54:11-[当前目录:~]
[wch@ubuntu-desktop-24]$ exec /bin/bash
19:54:25-[当前目录:~]
[wch@xxxxxxxxxxxxxx]$
[wch@xxxxxxxxxxxxxx]$ sudo hostnamectl hostname Ubuntu-Desktop-24 # 使用hostname子命令永久修改主机名
[sudo] wch 的密码:
19:56:08-[当前目录:~]
[wch@xxxxxxxxxxxxxx]$ exec /bin/bash
19:56:15-[当前目录:~]
[wch@Ubuntu-Desktop-24]$
3.3.3.2 net-tools相关命令
# ifconfig
[wch@Ubuntu-Server-24]$ ifconfig # 查看所有启用的网卡信息,-a参数可多显示被禁用的网卡
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.0.16 netmask 255.255.255.0 broadcast 10.0.0.255inet6 fe80::20c:29ff:fe69:a488 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:69:a4:88 txqueuelen 1000 (Ethernet)RX packets 267021 bytes 235336964 (235.3 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 224173 bytes 24827183 (24.8 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.0.111 netmask 255.255.255.0 broadcast 10.0.0.255inet6 fe80::20c:29ff:fe69:a492 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:69:a4:92 txqueuelen 1000 (Ethernet)RX packets 22 bytes 2693 (2.6 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 25 bytes 1890 (1.8 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 402 bytes 42892 (42.8 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 402 bytes 42892 (42.8 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# route
[wch@Ubuntu-Server-24]$ route # 查看路由表 (0.0.0.0表示默认路由)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 0 0 0 ens33
default _gateway 0.0.0.0 UG 0 0 0 ens37
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
20:09:00-[当前目录:~]
[wch@Ubuntu-Server-24]$ route -n # 以ip格式查看路由表
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 ens33
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 ens37
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
3.3.3.3 IP命令
可取代ifconfig和route命令,主要用于管理和配置网络接口和路由表,在没有安装net-tools包就可以使用该命令
# 命令格式:ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
格式解读: OPTIONS: 一些修改ip行为或者改变其输出的选项,以“-”字符开头,分为长、短两种形式。 例如,-V(或--Version)用于打印ip的版本并退出,。 OBJECT: 要管理或者获取信息的对象, 如link(网络设备)、address(设备的协议地址)、route(路由表条目)等。 COMMAND: 对指定对象执行的具体命令,如show(显示信息)、set(设置属性)等。 ARGUMENTS: 命令的附加参数,用于进一步指定命令的行为。
# 案例
[wch@Ubuntu-Server-24]$ ip addr show # 显示所有网卡信息
[wch@Ubuntu-Server-24]$ ip addr show ens33 # 显示指定网卡信息
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:69:a4:88 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 10.0.0.16/24 brd 10.0.0.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe69:a488/64 scope linkvalid_lft forever preferred_lft forever
[wch@Ubuntu-Desktop-24]$ ip route list # 列出当前路由表信息
default via 10.0.0.2 dev ens33 proto static metric 100
10.0.0.0/24 dev ens33 proto kernel scope link src 10.0.0.13 metric 100
3.3.3.4 网络连接状态查看
# netstat命令(用于显示网络连接、路由表、接口统计、伪装连接和多播成员资格等信息)
[wch@Ubuntu-Server-24]$ netstat -tnulp # -t:显示tcp端口数据 -u:显示udp端口数据 -n:以数字形式显示ip和端口 -p:显示相关进程和pid -l:仅显示监听状态的端口
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN -
tcp6 0 0 ::1:6010 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
udp 0 0 127.0.0.54:53 0.0.0.0:* -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
[wch@Ubuntu-Server-24]$ netstat -r # 显示路由表信息
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default _gateway 0.0.0.0 UG 0 0 0 ens33
default _gateway 0.0.0.0 UG 0 0 0 ens37
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37# ss命令
Socket Statistics的缩写,主要用于获取系统中socket的统计信息,可以帮助系统管理员诊断和排查网络问题,包括检查当前网络连接及端口状态、搜索网络问题、统计网络情况等;可代替netstat命令
[wch@Ubuntu-Server-24]$ ss -tnulp # 选项参数和netstat类似
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.54:53 0.0.0.0:*
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6010 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6010 [::]:*
tcp LISTEN 0 511 [::]:80 [::]:*
3.3.4 Web站点环境部署
3.3.4.1 常见的Web server软件
- Apache
- Tomcat
- Nginx
3.3.4.2 Ubuntu环境部署Nginx
[wch@Ubuntu-Server-24]$ apt list nginx -a # 列出nginx所有可用版本
Listing... Done
nginx/noble-updates,noble-security,now 1.24.0-2ubuntu7.5 amd64 [installed]
nginx/noble 1.24.0-2ubuntu7 amd64
sudo apt install nginx -y # 安装nginx
# 推荐安装的命令是: apt install nginx nginx-core fcgiwrap nginx-doc
[wch@Ubuntu-Server-24]$ systemctl is-active nginx.service # 查看nginx服务的启动状态,也可使用命令systemctl status nginx查看
active
[wch@Ubuntu-Server-24]$ sudo netstat -tunlp | grep nginx # 使用netstat命令查看nginx端口
[sudo] password for wch:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 834/nginx: master p
tcp6 0 0 :::80 :::* LISTEN 834/nginx: master p
浏览器访问:
# 若无法访问web页面,尝试关闭防火墙:sudo systemctl disable --now ufw.service
3.3.4.3 Nginx⭐️
# 1 nginx首页的配置目录:/var/WWW/html/
# 2 nginx相关命令
[wch@Ubuntu-Server-24]$ nginx -v # 查看nginx版本
nginx version: nginx/1.24.0 (Ubuntu)
-V: #在显示基础版本信息的基础上,额外输出编译时的详细配置参数(如编译器版本、依赖库信息、启用模块、安装路径等)
-h #显示帮助信息
-t #检查并测试配置文件
-q #在配置文件测试期间禁止显示非错误消息
# 3 Nginx配置文件
-nginx.conf:nginx的主配置文件
-conf.d:nginx的其他配置文件,会导入到主配置文件使用
-default.d:nginx的其他配置文件,会导入到主配置文件使用(存在于rokey系统)
-modules-available:nginx的其他配置文件,会导入到主配置文件使用(存在于ubuntu系统)
-sites-enabled:nginx的其他配置文件,会导入到主配置文件使用(存在于ubuntu系统)
......
3.3.4.4Nginx配置结构解读⭐️
# 1 Server配置段内的关键信息:
-listen:指定server监听的ip地址和端口
-root:请求的根目录路径
...
# 2 location配置段的关键信息:
-try-files:根据顺序查找文件,如:$uri $uri/ =404;这个执行顺序表示先查找请求的文件,找不到再找请求的目录下的默认index.html,还找不到返回404错误
3.3.4.5 Nginx web实践
# 基于端口号实现多server# 1 首先删除nginx下默认的配置文件:/etc/nginx/sites-enabled/default
[wch@Ubuntu-Server-24]$ sudo rm -f /etc/nginx/sites-enabled/default
# 2 定制3个站点的web页面
[wch@Ubuntu-Server-24]$ sudo mkdir -p /data/server/nginx/web{1..3} # 创建3个站点的资源目录
[wch@Ubuntu-Server-24]$ sudo chmod -R o+w /data/server/nginx # 增加其他用户对该文件夹所有文件的写权限
16:47:27-[当前目录:~]
[wch@Ubuntu-Server-24]$ ll /data/server/nginx
total 20
drwxr-xrwx 5 root root 4096 Sep 22 16:36 ./
drwxr-xr-x 3 root root 4096 Sep 22 16:36 ../
drwxr-xrwx 2 root root 4096 Sep 22 16:36 web1/
drwxr-xrwx 2 root root 4096 Sep 22 16:36 web2/
drwxr-xrwx 2 root root 4096 Sep 22 16:36 web3/
16:47:37-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo echo "nginx web1" > /data/server/nginx/web1/index.html # 定制化web首页内容
16:48:08-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo echo "nginx web2" > /data/server/nginx/web2/index.html
16:48:20-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo echo "nginx web3" > /data/server/nginx/web3/index.html
# 3 定制配置文件,实现端口号访问多server
[wch@Ubuntu-Server-24]$ sudo vim /etc/nginx/conf.d/vhost.conf # 编辑配置文件
server { listen 80; root /data/server/nginx/web1;
}
server { listen 81;
root /data/server/nginx/web2;
}
server { listen 82; root /data/server/nginx/web3;
}
# 4 重启nginx服务进行验证
[wch@Ubuntu-Server-24]$ sudo nginx -t # -t参数验证配置文件的语法格式是否正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
17:12:24-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo systemctl restart nginx.service # 重启nginx服务
17:12:50-[当前目录:~]
[wch@Ubuntu-Server-24]$ curl 10.0.0.16:80 # 访问不同端口对应的默认站点页面
nginx web1
17:13:07-[当前目录:~]
[wch@Ubuntu-Server-24]$ curl 10.0.0.16:81
nginx web2
17:13:10-[当前目录:~]
[wch@Ubuntu-Server-24]$ curl 10.0.0.16:82
nginx web3