计算机网络基础及红帽6和7的区别
前言:对于计算机网络部分,我们主要学习的是TCP/IP协议栈。而TCP/IP协议栈并无法将各种的协议进行一个合理的区分,因此,在大学本科教育中我们通常讲解的是IOS七层网络模型。
协议:简单的理解就是通信双方相互交流的一种约定,也就是说只有通信双方满足这样的约定才能够相互通信。然而,我们也说过,各种协议必须要被软件实现,才能够被我们所使用。
那么,对于我们的http协议而言,实现http协议的客户端程序有curl,浏览器等工具,服务端有Apache、Nginx等这样的静态服务器软件
(二)
什么是Mac地址、什么是网桥、什么是交换机
前言:MAC地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位),使用ifconfig命令可以查看: ether 08:00:27:c1:cd:2b。其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位),也称为“编制上唯一的标识符”(Organizationally Unique Identifier),后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。
网桥:网桥(Bridge)是早期的两端口二层网络设备,用来连接不同网段。使得同一个网段内的通信不会冲突,而不同网段内的通信可以顺利进行。
交换机:多功能交换机,在局域网内,交换机和网桥的功能几乎一样。
路由器:路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络。当数据从一个网段传输到另一个网段时,可通过路由器的路由功能来完成。
(1)交换机通过Mac地址表使得网段内的所有的主机可以相互通信
(2)路由器通过路由表使得不同网段之间的主机可以相互通信
- 什么是IP
IP = 网络号+主机号一个字节(byte)是8位(bit),IP由32位组成,一共是4个字节例如:IP: 172.16.19.245 netmask 255.255.255.0 broadcast 172.16.19.255网络号:172.16.19.0主机号:172.16.19.245那么IP一共有:0.0.0.0 ---- 255.255.255.255256 x 256 x 256 x 256 = 4294967296
- IP划分
A 类地址第一段为网络号,后三段为主机号 0000000-01111111 1-127其中:127用为本地lo还回地址 那么A类地址的网络地址有:127那么A类地址的主机地址有:2^24 - 网络地址 - 广播地址 = 2^24 - 2netmask:255.0.0.0(用户标示网络地址) broadcast 255.255.255.255私有地址:10.0.0.0网段为私有地址网络B 类地址前两段为网路号,后两段为主机号 1000000.00000000-10111111.11111111 128-191那么B类地址的网络地址有:2^14(前两个位不变,只是后14位变化)那么B类地址的主机地址有:2^16 - 网络地址 - 广播地址 = 2^16 - 2netmask:255.255.0.0(用户标示网络地址) 私有地址:172.0.0.0-172.31.0.0 网段为私有地址网络C 类地址前三段为网路号,后一段为主机号 11000000.00000000.00000000-11011111.11111111.11111111 192-223那么C类地址的网络地址有:2^21(前三位不变,只是后21位变化)那么C类地址的主机地址有:2^8 - 网络地址 - 广播地址 = 2^8 - 2netmask:255.255.255.0(用户标示网络地址) 私有地址: 192.168.0.0~192.168.255.0 网段为私有地址网络D 类地址:组播地址E 类地址:大学等科研机构作为科学研究使用
(三)
简单的聊聊什么是路由表
前言:对于路由表而言,可以认为的写,也可以是路由器自动记录识别
- 路由器是如何通过路由表实现不同网段之间的通信
目标地址由 "下一跳(网关)" 来实现
(四)
单台主机之间的通信如何实现
前言:单台主机站在内核空间和用户空间
将主机间的通信画图给大家描绘一下,并且解释TCP/IP协议栈的解包和封包的过程
给大家画图介绍,ARP地址如何解析
- 主机间通信
Mac地址:本地通信实现本地局域网,不跨路由器的网络通信IP地址:标示主机通信,实现源主机和目标主机之间的通信主机内核端口:标示进程通信,实现一个主机上的哪个进程进行通信
基于TCP/IP协议栈解析封包与解包
物理层:封装帧报文首部以太网帧:MTU(1500字节)互联网层:封装IP报文首部传输层:封装TCP报文首部应用层:各种应用协议的报文首部
(五)
网络配置工具详解(这里很重要)
前言:ifcfg类命令,ip类命令, nm类命令
一:ifcfg类命令 (需要安装 net-tools 包) 适用于红帽5、6、7
ifconfig :查看或设置IP地址route :查看或设置路由表netstat :通常查看主机的服务,端口,和服务的状态ifup、ifdown:启用网卡或关闭网卡
- (1)ifconfig命令
对比6、7的网络信息
enp0s3: flags=4163 mtu 1500inet 192.168.23.11 netmask 255.255.255.0 broadcast 192.168.23.255inet6 fe80::a00:27ff:fec1:cd2b prefixlen 64 scopeid 0x20ether 08:00:27:c1:cd:2b txqueuelen 1000(传输队列长度) (Ethernet)RX(接受的数据包) packets 28355 bytes 10835366 (10.3 MiB)RX errors(错误包数量) 0 dropped(丢包数量) 0 overruns 0 frame 0TX(传出的数据包) packets 15286 bytes 2489410 (2.3 MiB)TX errors(错误包数量) 0 dropped(丢包数量) 0 overruns 0 carrier 0 collisions 0eth0 Link encap:Ethernet HWaddr 08:00:27:23:C1:E7 inet addr:192.168.23.4 Bcast:192.168.23.255 Mask:255.255.255.0inet6 addr: fe80::a00:27ff:fe23:c1e7/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:104 errors:0 dropped:0 overruns:0 frame:0TX packets:68 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12969 (12.6 KiB) TX bytes:11936 (11.6 KiB)
ifconfig命令使用(设置IP地址可以立即生效)
(1)显示激活网卡,以及网络信息ifconfig(2)显示激活网卡,以及网络信息ifconfig eth0(3)显示所有网卡,以及网络信息ifconfig -a(4)启用网卡地址ifconfig eth0 upifconfig enp0s3 up(5)停止网卡地址ifconfig eth0 down ifconfig enp0s3 down (6)网卡取别名的两种写法ifconfig eth0:0 192.168.23.10/24ifconfig enp0s3:0 192.168.23.100 netmask 255.255.255.0 broadcast 192.168.23.255
- (2)route命令
1:增添加主机地址路由route add -host 192.168.24.100 gw 192.168.23.1 dev eth0 添加网络地址路由route add -net 192.168.24.0/24 gw 192.168.23.1 dev eth0 添加默认地址路由route add -net 0.0.0.0/0.0.0.0 gw 192.168.23.1 dev eth0 2:删删除主机地址路由route del -host 192.168.24.100删除网络地址路由route del -net 192.168.24.0/24删除默认地址路由route del default 3:改先删除,再修改4:查route -n Kernel IP routing tableDestination(目的地址) Gateway(网关,吓一跳) Genmask(子网掩码) Flags Metric Ref Use Iface(接口)192.168.23.0 0.0.0.0(同一个网段无需网关) 255.255.255.0 U 0 0 0 eth0192.168.23.0 0.0.0.0 255.255.255.0 U(up:表示启用状态) 0 0 0 eth1169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth00.0.0.0 192.168.23.1 0.0.0.0 UG(G表示网关) 0 0 0 eth0
- (3)netstat命令(对应的ss命令请自行总结)
会经常使用必备技能:netstat -lntup-u:UDP-t:TCP-l:查看监听状态-n:以数字的形式显示-p:显示进程、服务名称-a:显示all信息[root@6 ~]# netstat -lentupaActive Internet connections (servers and established)Proto(协议) Recv-Q(接收) Send-Q(发送) Local Address(本地监听的套接字) Foreign Address(客户端连接的套接字) State(进程状态) User(用户的id) Inode(文件的inode号) PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 9197 1090/sshd tcp 0 0 192.168.23.4:22 192.168.23.2:65106 ESTABLISHED 0 9567 1191/sshd tcp 0 0 :::22 :::* LISTEN 0 9199 1090/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 0 8497 856/dhclient
- (4)ifup、ifdown命令
需要添加/etc/sysconfig/network-scripts/ifcfg-eth1网卡配置文件,才能给ifup、ifdown控制ifup eth1ifdown eth1
二:ip类命令 适用于红帽5、6、7(需要安装 iproute 包)
ip link:管理网卡接口ip addr :查看或设置IP地址ip route:配置路由
ip link show:显示设备属性 ip link set dev eth0 up:开启网卡设备ip link set dev eth0 down:关闭网卡设备ip addr add 192.168.23.4/24 dev eth1: 添加IP地址ip addr add 192.168.23.4/24 dev eth1 label eth1:0 : 添加别名ip addr del 192.168.23.4/24 dev eth1: 删除IP地址ip addr show:显示IP地址ip route add 192.168.24.0/24 via 192.168.23.1 dev eth1 src 192.168.23.10: 添加网络路由地址ip route add default via 192.168.23.1 :添加默认路由ip route del 192.168.24.0/24 :删除路由地址ip route show :显示路由地址
三:nm类命令 适用于红帽 7
nmcli:命令行工具nmtui:就像红帽6的setup工具一样,是一个图形化的文本工具必须启动 Neworkmanagersystemctl status NetworkManager
四:setup命令 适用于红帽 6
必须启动 network 服务service network status
(六)
系统默认的网卡命名方式(了解)
前言:
对于红帽6而言
eth0、eth1、eth2 等
对于红帽7而言
(1)如果BIOS为主板上集成的设备提供的设备编号可用,则根据设备编号进行命名,如eno0, eno1。例如:苹果Mac电脑,网卡名为en0(2)如果BIOS为PCI-E扩展槽所提供的设备编号可用,则根据设备编号进行命名,如:ens1 ens2(3)如果硬件接口的物理位置信息可用,则根据此信息命名,如:enp0s3、enp0s8,有些虚拟机是这样命令。(4)对于Mac电脑而言,en0、en1en0: flags=8863 mtu 1500ether a4:d1:8c:cd:a0:8c inet6 fe80::181a:b72a:631f:69d2%en0 prefixlen 64 secured scopeid 0x4 inet 192.168.23.2 netmask 0xffffff00 broadcast 192.168.23.255nd6 options=201 media: autoselect status: active红帽6系列关闭SElinux和防火墙步骤
关闭selinux(1)编辑 /etc/selinux/config文件,修改如下配置SELINUX=disabled(2)临时关闭SElinuxsetenforce 0关闭防火墙(1)关闭防火墙service iptables stop(2)让防火墙开机不自启chkconfig iptables off
红帽7系列关闭SElinux和防火墙步骤
关闭selinux(1)编辑 /etc/selinux/config文件,修改如下配置SELINUX=disabled(2)临时关闭SElinuxsetenforce 0关闭防火墙(1)关闭防火墙systemctl stop firewalld.service(2)让防火墙开机不自启systemctl disable firewalld.service
(二)操作系统启动流程、systemd的特性详细讲解
前言:第一次讲解系统的启动流程,如果听不懂,请先不要急躁,后面会详细的讲解启动流程和安装流程
1:当用户按下电源键的时候,首先在主板上ROM芯片上的BIOS程序会被启动,BIOS程序会读取CMOS中的BIOS设置信息。2:BIOS会对计算机的硬件进行检查,并且设置一个启动顺序,这里以启动流程为例,第一个启动的设备是硬盘设备3:BIOS程序会读取硬盘中的MBR中的grub1阶段的程序,这个程序就是bootloader程序,并且读取MBR之后的扇区(grub1.5阶段程序),让grub1阶段能够识别grub2阶段所在的分区上的文件系统4:grub2在硬盘的/boot/grub目录下,在读取到grub2阶段时,grub2就能够加载kernel文件(以vmlinuz开头的文件)到内存,并且展开。由于内核中没有驱动根文件系统所在分区的驱动,需要借助于initramfs.XXX.img文件(虚拟文件系统),让这个虚拟文件系统挂载到内核成为根文件系统,虚拟文件系统中有真正的根文件系统所在分区的驱动,能够识别根文件系统所在的分区,这样就使得内核可以通过只读方式挂载真正的根文件系统,并且卸载虚拟文件系统。那么现在就完成了内核空间的初始化工作5:在完成内核空间的初始化工作之后,接下来内核呼叫/sbin/init初始化程序,并且将控制大全移交给/sbin/init程序6:/sbin/init程序首先会读取其配置文件/etc/inittab,将系统在默认运行级别下启动,并且读取/etc/rc.d/rc#.d/目录下的文件,以K开头的脚本文件停止对应的服务,以S开头的脚本文件开启对应的服务7:在所有的自启动服务启动运行之后,会执行/etc/rc.d/rc.sysinit程序对系统空间进行一次初始化,启动一个登入终端让用户登入
初始化init程序讲解
红帽5: Sysvinit红帽6: Upstart红帽7: Systemd(Systemd 的很多概念来源于苹果 Mac OSX 操作系统上的 launchd, launchd还有个图形化工具叫做launchpad,这个launchpad非常了不起,可以启动所有Mac OSX上安装的所有的程序,比systemd有牛逼多了)
Systemd较Upstart、sysvinit所具有的优势
系统引导时实现服务并行启动用到某个服务在启动或激活某个服务系统状态快照,就像 Mac OSX上的 Time Machine(时空穿梭机)基于依赖关系定义的服务控制逻辑可以控制/etc/rc.d/init.d/下的脚本文件
- systemd使用
unit file 文件进行控制程序的启动和关闭
1:所有的 unit file 文件都保存在/usr/lib/systemd/system/目录下面,而/etc/systemd/system下的都是unit file 文件的软连接 2:使用yum安装的程序会自带/usr/lib/systemd/system/httpd.service这个unit file文件, 且保存在/usr/lib/systemd/system/目录下,例如:/usr/lib/systemd/system/httpd.service如果 3:如果让某个服务开机自启,使用:systemctl enable httpd.service,那么此时系统会提示:Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service。意思是在系统运行为多用户模式下就开机自启httpd服务
/usr/lib/systemd/system/目录下面的unit file文件常见的文件类型
Service unit :文件扩展名为.service,用于定义系统服务Target unit:文件扩展名为.target,用于模拟实现“运行级别”Device unit: 文件扩展名为.device , 用于定义内核识别的设备Mount unit:文件扩展名为.mount,用于定义文件系统的挂载点Socket unit:文件扩展名为.socket,用于表示进程间通信用到的socket文件Snapshot:文件扩展名为.snapshot,用于管理系统快照Swap unit:文件扩展名为.swap,用于管理Swap设备Automount unit:文件扩展名为.automount,用于文件系统自动挂载点设备Path unit:文件扩展名为.path,用于定义文件系统中的某一文件或目录
- systemd的其他特性
1:systemctl对于服务的启动、关闭等管理命令是固定不变的2:如果不是yum安装的程序,程序的启动、关闭无法被systemd管控,因此就无法使用systemctl来启动,但是我们可以自己编写一个 unit file,实现让systemctl来管理非yum安装的程序。(如果想了解unit file文件的简单编写过程,请移步到8月29日上课内容,在编译安装mariadb后,就编写了一个mariadb.service文件)
(三)systemd对linux系统服务的管理详解
前言:
红帽7系列
服务程序管理主要是依赖于 /usr/lib/systemd/system/目录下的以.service结尾的文件来管理的例如:在/usr/lib/systemd/system/目录下有一个httpd.service的unit file文件,那么我们就可以使用systemctl start httpd.service来调用这个httpd.service文件,使httpd服务启动
红帽6系列
服务程序管理主要是依赖于/etc/rc.d/init.d/目录下的所有的脚本文件例如:/etc/rc.d/init.d/network,那么我们就可以使用service network start来调用这个network脚本文件,使network服务启动
对于启动、关闭、查看状态、平滑重启、重启等操作在红帽6和红帽7上对比(这里以httpd服务为例)
启动对比CentOS 6:service httpd startCentOS 7:systemctl start httpd.service关闭对比CentOS 6:service httpd stopCentOS 7:systemctl stop httpd.service重启对比CentOS 6:service httpd restartCentOS 7:systemctl restart httpd.service查看服务状态对比CentOS 6:service NAME statusCentOS 7:systemctl status NAME.service条件重启服务对比 CentOS 6:service httpd condrestartCentOS 7:systemctl try-restart httpd.service (只有服务启动是才会生效)查看单个服务激活与否的对比 CentOS 6:无CentOS 7:systemctl is-active httpd.service查看当前所有激活启动的服务对比 CentOS 6:无CentOS 7:systemctl list-units -t service开机自动启动服务对比CentOS 6:chkconfig httpd onCentOS 7:systemctl enable httpd.service开机禁止服务启动对比CentOS 6:chkconfig httpd offCentOS 7:systemctl disable httpd.service查看某服务是否开机启动对比CentOS 6:chkconfig --list httpdCentOS 7:systemctl is-enabled NAME.service查看某服务的依赖关系对比CentOS 6:无CentOS 7:systemctl list-dependencies httpd.service
红帽6、红帽7 运行级别对比
红帽6: 0,1,2,3,4,5,6 红帽7:poweroff.targetrescue.targetmulti-user.targetmulti-user.targetmulti-user.targetgraphical.targetreboot.target
红帽6、红帽7 切换运行级别对比
CentOS 6init 3CentOS 7systemctl isolate multi-user.target
红帽6、红帽7 查看当前级别对比
CentOS 6 runlevel
CentOS 7 systemctl list-units -t target
红帽6、红帽7 获取默认运行级别对比
CentOS 6编辑/etc/inittab文件查看CentOS 7systemctl get-default
红帽6、红帽7 修改默认运行级别对比
CentOS 6编辑/etc/inittab文件修改CentOS 7 systemctl set-default multi-user.target
红帽6、红帽7 进入紧急救援模式对比
CentOS 6借助于光盘镜像进入紧急救援模式CentOS 7systemctl rescue (依然会启动服务)systemctl emergency (什么服务都不会启动)
红帽7 关机、重启、挂起、创建快照
关机:systemctl halt , systemctl poweroff重启:systemctl reboot挂起:systemctl suspend快照:systemctl hibernate快照并挂起:systemctl hybrid-sleep
查看默认运行级别下开机启动的服务
/etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
(四)unit file文件详细讲解
前言:这里对于unit file文件详细讲解以httpd.service为例,希望大家可以举一反三
编辑文件查看
[Unit]# 指定描述信息 Description=The Apache HTTP Server# 定义unit的启动次序,表示当前unit应该晚于哪些unit启动After=network.target remote-fs.target nss-lookup.targetDocumentation=man:httpd(8)Documentation=man:apachectl(8)# 指定服务启动、重载、停止、[Service]# 用于指定ExecStart启动进程的方式Type=notify# 运行程序前执行的环境配置文件EnvironmentFile=/etc/sysconfig/httpd# 启动、重载、停止服务执行的脚本程序ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUNDExecReload=/usr/sbin/httpd $OPTIONS -k gracefulExecStop=/bin/kill -WINCH ${MAINPID}# We want systemd to give httpd some time to finish gracefully, but still want# it to kill httpd after TimeoutStopSec if something went wrong during the# graceful stop. Normally, Systemd sends SIGTERM signal right after the# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give# httpd time to finish.KillSignal=SIGCONTPrivateTmp=true# 仅对unit file的启用|禁用命令在"systemctl enable|disable ..."中有意义[Install]# 指明强依赖于哪个文件WantedBy=multi-user.target
Unit段的常用选项说明
Description:描述信息,意义性描述After:定义unit的启动次序,表示当前unit应该晚于哪些unit功能,其功能与before相反Wants:依赖到的其他units,这是弱依赖,如果没有启动依赖的服务,当前定义的这个服务可以启动Requires:依赖到的其他units ,这是强依赖,如果没有启动依赖的服务,当前定义的这个服务不能启动Confilicts:定义units间的冲突关系
Service段的常用选项说明
Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型 simple:表示ExecStart启动的进程为主进程forKing:表示ExecStart生成的一个子进程为主进程,父进程将会退出oneshot:表示启动后续的unit进程,此进程会退出dbus:类似与simplenotify:类似与simpleidle:类似与simpleExecStart:指定启动要执行的脚本程序。ExecStop:指定停止要执行的脚本程序EnvironmentFile:环境配置文件
Install段的常用选项
Alias:RequiredBy: 被哪些unit file所依赖WantedBy: 被哪些units所依赖
对于编译安装的Mariadb服务,自建的unit file文件示例
# Don't forget to reload systemd daemon after you change unit configuration:# root> systemctl --system daemon-reload
[Unit]Description=MariaDB database serverAfter=syslog.targetAfter=network.target
[Service]Type=simpleUser=mysqlGroup=mysql# 下面这一项是指明启动mariadb服务之前的配置阶段(不知道是干什么的)# ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n# Note: we set --basedir to prevent probes that might trigger SELinux alarms,# per bug #547485# 下面这一项是指明启动mariadb的程序路径,且指明安装路径,因此需要将RPM包的默认安装路径修改为源码包的指定安装路径# 需要注意的是这里的/usr/local/mysql是连接文件的连接,因此编译安装mariadb之后需要把安装路径连接至/usr/local/mysql# ExecStart=/usr/bin/mysqld_safe --basedir=/usrExecStart=/usr/local/mysql/bin/mysqld_safe --basedir=/usr/local/mysql# 下面这一项是指明启动mariadb服务之后的配置阶段(不知道是干什么的)#ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID# Give a reasonable amount of time for the server to start up/shut down# 指定mariadb启动的超时时长TimeoutSec=300# Place temp files in a secure directory, not /tmp# 下面这项是说,是否启用公共的临时目录,由于编译的时候定义sock文件保存的位置在/tmp目录下面,因此,我们需要将true改为false# 因为RPM包安装的Mariadb的sock文件默认保存在/var/lib/mysql/mysql.sock,数据库保存在/var/lib/mysql目录下,因此这里需要改为falsePrivateTmp=false# 下面这一项表示当我们使用systemctl enable mariadb.service 的时候,就会在/etc/systemd/system/multi-user.target.wants/mariadb.service创建一个链接文件,实现开机自启动
[Install]WantedBy=multi-user.target
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
