网络基础

网络基础

ISO 国际标准化组织
OSI 开放系统互联, 七层模型

  1. 物理层,二进制传输,bit位
  2. 数据链路层,访问介质,格式化数据,错误检测,frame帧,物理地址MAC
  3. 网络层,数据传输,路由,选择最佳路径,逻辑寻址,数据包,packet
  4. 传输层,传输问题,确保数据传输的可靠性,segment段(fragment片)
  5. 会话层,主机间通信,端连接
  6. 表示层,数据表示,格式化,加密解密
  7. 应用层,为应用程序进程提供网络服务

HDR 报头
数据封装 应用层 -> 物理层
数据解封 物理层 -> 应用层

vpn 虚拟专用网络

PDU: Protocol Data Unit
物理层bit -> 数据链路层frame -> 网络层packet -> 传输层segment -> 更高message
ifconfig查看 mtu 媒体传输单元

通信三种模式
1. 单播,Unicast,加密确保安全
2. 广播,Broadcast
3. 多播,Multicast

局域网LAN,Local Area Network

网络硬件

  1. 双绞线 Twisted-Pair,
    10BaseT,10最大10m位bit每秒,base表示基带传输,最大传输距离100米
    基带传输的是数字信号(1或0),宽带传输的是模拟信号
    UTP 非屏蔽双绞线,STP 屏蔽双绞线
    100M 使用 12,36 两根线传输
    交叉线. ,12 <=> 36 12TX(transmit data)发送,36RX(receive data)接收
    UTP直通线和交叉线,Straight-Through Cable,Crossover Cable
  2. 同轴电缆 Coaxial
    10Base2, 10Base5,最大传输距离200,500米
  3. 光纤 Fiber-Optic
    ethtool eth0 查看网卡速度
    Duplex: Full/Half 全双工; 半双工:轮流; 单工
  4. 千兆位电信号转光信号接口器件 GBIC, (SFP)mini-GBIC
  5. 网络适配器 Network Adapter

Ethernet 协议
Ethernet Frame结构 (Field Length in Bytes)IEEE 802.2
| Preamble/8 | Destination Address/6 | Source Address/6 | Type/2 | Data/46-1500 | FCS/4 |
IEEE 802.3标准:Preamble最后一位是SOF
TYPE
SOF(Start-of-Frame Delimiter) 定界符
FCS(Frame Check Sequence)
Preamble 电报报头
MAC占6个byte,

冲突检测的载波侦听多路访问CSMA/CD
Carrier Sense Multiple Access Collision Collision Detection
(Backoff Algorithm)等待随机时间,再发送数据

6. 集线器 Hub:多端口中继器,物理层,不记忆哪个MAC地址在Hub的哪个端口,共享带宽,半双工
所有端口在一个冲突域中
repeater 中继器,信号放大器
7. 以太网桥 分割网络冲突域,学习MAC地址,建立MAC表
8. 交换机,类似网桥的原理,每个端口占用一个带宽,隔离了冲突域, 不能分隔广播域, VLAN实现分隔广播域
10. 路由器, 分隔广播域,维护路由信息,选择到达目标的最好路径,连接广域网

route -n 查看路由表
ss -ntul 端口号
ping 1.1.1.1/ 114.114.114.114/ 223.5.5.5
ttl (time to live),经过路由器,减一,linux默认64, windows默认128
修改ttl echo 128 > /proc/sys/net/ipv4/ip_default_ttl
ping -s 65507 s表示packagesize
ping -f 尽可能发送报文,不等待
icmp_echo_ignore_all 设置为1
arp -a 查看arp表

TCP/IP 协议栈

网络访问层(数据链路层,物理层) -> Internet层 -> 传输层 -> 应用层
Ethernet -> IP -> TCP/UDP -> Application
传输层通过端口port号,确定应用层协议

TCP 特性

  • Session multiplexing 多会化,多窗口
  • 面向连接 Connection-oriented
  • Segmentation 分段
  • Flow control Sequenceing 流控制
  • Reliability 可靠性

TCP 包头
| 源端口 | 目的端口 |
| 序号 |
| 确认号 |
| 数据偏移 | 保留 |flag | 窗口 |
| 检验和 | 紧急指针|
| 选项(长度可选 | 填充 |
| 数据部分 |

三次握手 四次挥手,有限状态机

 CLOSED                                 CLOSED
 SYN-SENT       \SYN=1,seq=x            LISTEN
           SYN=1,ACK=1,seq=y,ack=x+1/   SYN-RCVD
 ESTABLISHED  \ACK=1,seq=x+1,ack=y+1    ESTABLISHED
 FIN-WAIT-1        \FIN=1,seq=u         
 FIN-WAIT-2    ACK=1,seq=v,ack=u+1/     CLOSE-WAIT
            FIN=1,ACK=1,seq=w,ack=u+1/  
 TIME-WAIT    \ACK=1,seq=u+1,ack=w+1    LAST-ACK
 CLOSED                                 CLOSED

CLOSING状态 客户端和服务器同时发出FIN=1,客户端回应ACK,收到服务端ACK,进入TIME-WAIT
TIME-WAIT,这个状态会持续2倍MSL(TCP报文段在网络中的最大生存时间),当最后一个ACK丢失时,可以再发送一次. 服务端再等待超时后会再发送一个FIN给客户端

UDP特性

  • 工作在传输层
  • 提供不可靠的网络
  • 非面向连接
  • 有限的错误检查
  • 传输性能高
  • 无数据恢复特性

UDP包头
| 16-bit source port | 16-bit destination port
| 16-bit UDP length | 16-bit UDP checksum
| Data |

Internet层
ICMP协议 Internet Control Message Protocol 控制报文协议,传输错误报告,状态信息ping命令
ARP协议 Address Resolution Protocol: IP to MAC 地址解析协议
RARP协议 Reverse Address Resolution Protocol: MAC to IP 从网关服务器的arp表上请求自己ip地址
IP协议 Internet Protocol
IP协议特征:

  • 运行在OSI网络层
  • 面向无连接协议
  • 独立处理数据包
  • 分层编址
  • 尽力而为传输
  • 无数据恢复功能

IP PDU(Protocol Data Unit)报头
| 版本 | 首部长度 | 分区服务 | 总长度 |
| 标识 |标志 |片偏移|
|生存时间 | 协议 |首部检验和 |
| 原地址 |
| 目的地址 |
| 可选字段(长度可变) | 填充 |

IP地址
IP地址有两部分构成

  • 网络ID: 标识网络,每个网段分配一个ID
  • 主机ID: 标识单个主机,由组织分配

IP地址分类

  • A类: 0 000 0000 - 0 111 1111: 1-127 网络数:126, 127 每个网络中的主机数:2^24-2 默认子网掩码:255.0.0.0 私网地址:10.0.0.0-10.255.255.255 # 减2,全为0代表本网络,全为1代表广播地址
  • B类: 10 00 0000 - 10 11 1111:128-191 网络数:2^14 每个网络中的主机数:2^16-2 默认子网掩码:255.255.0.0 私网地址:172.16.0.0-172.31.255.255
  • C类: 110 0 0000 - 110 1 1111: 192-223 网络数:2^21 每个网络中的主机数:2^8-2 默认子网掩码:255.255.255.0 私网地址:192.168.0.0-192.168.255.255
  • D类:组播 1110 0000 - 1110 1111: 224-239
  • E类: 240-255
    特殊地址
  • 0.0.0.0 : 不是真正意义上的IP地址,表示一个集合: 所有不清楚的主机和目的网络
  • 255.255.255.255 : 广播地址,对本机来说,是指本网段内(同一广播域)的所有主机
  • 127.0.0.1 ~ 127.255.255.254 : 本机回环地址(Loop back address),主要用于测试
  • 169.254.x.x : Windows主机使用
    自动分配IP地址,没有获取到时,系统主动分配的地址

CIDR 无类型地址,现在多使用
CIDR表示方法: IP/网络ID位数
netmask 子网掩码,32bit, 子网掩码与IP地址相与&,得到网络ID
子网掩码可取值
00000000 0
10000000 128
11000000 192
11100000 224
11110000 240
11111000 248
11111100 252
11111110 254
11111111 255
10.0.0.0 255.0.0.0 10.1.1.1
10.00000 000.0.0 10.0.0.0
10.11111 000.0.0 10.248.0.0(网络id) 10.249.0.0 也属于10.248.0.0这个网段
10.10000 000.0.0 10.128.0.0(网络id) 10.129.1.1 也属于10.128.0.0这个网段
划分子网,Subnet地址,主机id和网络id借位
划分超网,Supernet,主要用在路由器中,将多个子网段到相同地址的路由,合并成一个超网段到到一个地址/网段的路由

路由:跨网络通信
路由分类:
1. 主机路由
2. 网络路由
3. 默认路由 默认网关

路由表
目标的网络ID或网络IP地址 | 子网掩码 | 接口(网卡) | 网关
网关,直接相连: 0.0.0.0; 间接相连: 下一个路由器邻近本路由器的接口的IP

动态主机配置协议DHCP Dynamic Host Configuration Protocol
DHCP ip地址达到租期的一半开始续租

基本网络配置

将linux主机接入到网络,需要配置网络相关设置
一般包括以下内容:
1. 主机名
2. IP/netmask
3. DNS服务器: 主DNS服务器,次DNS服务器,第三DNS服务器
CentOS6网络接口命名相关配置文件:
/etc/udev/rules.d/70-persistent-net.rules
udev 是Linux kernel 2.6的设备管理器

查看网卡
dmesg | grep -i eth
ethtool -i eth0
卸载网卡驱动
modprobe -r e1000
rmmode e1000
装载网卡驱动
modprobe e1000
配置工具
ifconfig obsolete 推荐使用ip
ifconfig -a 全部显示,包括未激活的
ifconfig ifac [up|down] 启用禁用网卡
ifconfig ifac IP/netmask 修改ip地址,临时修改,立即生效
启用混杂模式 [-]promisc

route相关命令

route -n 查看路由表
route add 添加路由
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] ifac]
net 表示添加网段路由,需要填子网掩码,host 表示添加主机路由,不用子网掩码
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
route add default gw 172.16.0.1 添加默认路由
route del 删除路由,同添加格式

配置动态路由,安装quagga包,支持多路由协议RIP\OSPF\BGP,命令vtysh配置

netstat 被ss取代

ss [OPTION]…[FILTER]
选项: -t: tcp协议相关 -u: udp协议相关 -w: 裸套接字相关 -x:unix sock相关 -l: listen状态的连接 -a: 所有 -n: 数字格式 -p: 相关的程序及PID -e: 扩展的信息 -m:内存用量 -o:计时器信息
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
TCP的常见状态: tcp finite state machine: LISTEN: 监听 ESTABLISHED:已建立的连接 FIN_WAIT_1 FIN_WAIT_2 SYN_SENT SYN_RECV CLOSED
EXPRESSION: dport = sport = 示例:’( dport = :ssh or sport = :ssh )’

ip

ip a 查看全部
ip addr add/del 1.1.1.2 dev eth0 label eth0:2
添加或删除IP地址和网卡别名,一个网卡可以绑定多个ip地址,加别名
ip -s link 统计statistic
ip link set/show dev IFACE up/down 激活或禁用指定接口
ip flush dev IFACE 删除IFACE所有ip地址设置
ip route add/delete TARGET via Gw dev IFACE 添加网关
TARGET: 主机路由->IP; 网络路由->NETWORK/MASK
ip route show|list 显示路由表
ip route flush [Dev IFACE] [via PREFIX] 清空路由表

网络配置文件

IP、MASK、GW、DNS相关配置文件:/etc/sysconfig/networkscripts/ifcfg-IFACE
DEVICE:此配置文件应用到的设备
HWADDR:对应的设备的MAC地址
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp NM_CONTROLLED:NM是NetworkManager的简写,此网卡是否接受 NM控制;建议CentOS6为“no”
ONBOOT:在系统引导时是否激活此设备
TYPE:接口类型;常见有的Ethernet, Bridge
UUID:设备的惟一标识
IPADDR:指明IP地址
NETMASK:子网掩码
GATEWAY: 默认网关
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的 dns服务器指向信息直接覆盖至/etc/resolv.conf文件

Centos6 hostname修改
/etc/sysconfig/netowrk 和 /etc/hosts 修改两处
Centos7 hostname修改
hostnamectl set-hostname centos7.localdomain
同样要修改/etc/hosts
删除/etc/hostname 就恢复默认主机名localhost.localdomain

DNS名字解析
/etc/resolv.conf
正向解析domain -> ip
反向解析ip -> domain

Centos 7修改网卡名
1. 编辑/etc/default/grub, GRUB_CMDLINE_LINUX=”rhgb quiet net.ifnames=0”
2. 生成配置文件,grub2-mkconfig -o /etc/grub2.cfg
3. 重启系统

虚拟机配置NAT连接上网
添加虚拟网卡,配置子网IP(网络IP),子网掩码
NAT设置,配置网关 e.g. 192.168.18.1
DHCP设置子网ip地址范围
配置宿主机ip地址,子网掩码,网关,dns服务器 e.g.8.8.8.8

CentOS7 网络配置工具

nm-connection-editor;nmtui
nmcli
nmcli device help :show and manage network interfaces
nmcli connection help:start,stop and manage network connections
nmcli con show [–active]
nmcli con up/down/del NAME
nmcli dev status
nmcli con modify IFAC [+|-] setting.property value
nmcli con reload/systemctl restart network 使修改的配置
文件生效

nmcli con modify 和 ifcfg-文件对应关系
ipv4.method manual BOOTPROTO=none
ipv4.method auto BOOTPROTO=dhcp
ipv4.addresses “192.0.2.1/24 192.0.2.254” IPADDR0=192.0.2.1 PREFIX0=24 GATEWAY=192.0.2.254
ipv4.dns 8.8.8.8 DNS0=8.8.8.8
ipv4.dns-search example.com DOMAIN=example.com
ipv4.ignore-auto-dns true PEERDNS=no
connection.autoconnect yes ONBOOT=yes
connection.id eth0 NAME=eth0
connection.interface-name eth0 DEVICE=eth0
802-3-ethernet.mac-address … HWADDR= …

其他命令

ping, mtr(my tracroute) 测试网络连通性
traceroute,tracepath查看经过的路由器
host: 查看域名ip地址

socket

是进程间通信IPC的一种实现,允许位于不同主机(或相同主机)上不同进程之间进行通信和数据交换
在建立通信连接的每一端,进程间的传输要有两个标志:
IP地址和端口号,合称为套接字地址 socket address
客户机套接字地址定义了一个唯一的客户进程
服务器套接字地址定义了一个唯一的服务器进程
Socket Domain: 根据其所使用的地址

  1. AF_INET: Address Family, IPv4
  2. AF_INET6: IPv6
  3. AF_UNIX: 同一主机上不同进程间通信

Socket Type: 根据使用的传输层协议

  1. SOCK_STREAM: 流,tcp套接字,可靠的传递,面向连接
  2. SOCK_DGRAM: 数据报,udp套接字,不可靠的传递,无连接
  3. SOCK_RAW: 裸套接字,无须tcp或udp,APP直接通过IP包通信

python socket模块

socket.socket(ip_protocol, tcp_protocol)
socket.bind(ip_addr, port)
listen()
accept() -> client_sock, client_addr(ip,port)
socket.recv(BUFFER) -> content
connect()
send()
write()
read()
close()


HTTP协议

Http协议 Hyper Text Transfer Protocol , 80端口, 基于TCP协议
MIME: Multipurpose Internet Mail Extensions
多用途互联网邮件扩展, content-type值,每个值包括一级类型和二级类型,可以使用预定义的类型,也可自定义类型。
http/1.1

头信息是ASCII码,后面数据为任何格式,MIME
引入了持久连接(persistent connection), tcp连接默认不关闭,可以被多个请求复用
管道机制(pipelining),即在同一个TCP连接里,客户端可以同时发送多个请求
队头堵塞(Head-of-line blocking), 同一个tcp连接里, 服务器只能按顺序处理请求,前面回应的慢,造成拥堵
http协议不带状态,每次请求都必须附上所有信息,请求的很多字段都是重复的,浪费带宽,影响速度

http2.0

头信息和数据体都是二进制, 称为头信息帧和数据帧
复用tcp连接,一个连接里,客户端和浏览器都可以同时发送多个请求和回应,且不用按顺序意义对应,避免了队头堵塞,双向的实时通信称为多工(Multiplexing)
引入头信息压缩机制(header compression),构建头信息表,相同字段只发送索引号
允许服务器未经请求,主动向客户端发送资源,即服务器推送(sever push)

持久连接:keep-alive,长连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
管道化连接:通过共享TCP连接发起并发的HTTP请求
复用的连接:交替传送请求和响应报文(实验阶段)

URI: Uniform Resource Identifier 统一资源标识,分为URL和URN
URN: Uniform Resource Name 统一资源命名
URL: Uniform Resource Locator 统一资源定位符
URL组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<anchor>
query string查询字符串,问号开头,key=value形式,&连接
#anchor 指向网页中的具体标签位置, 标签的id或name
url中的path和query string放在GET请求行
方法POST,提交的数据放在请求体Body里

PV(Page View) 页面点击量
UV(Unique Visitor) 根据cookies统计来访客户端

解决http协议无状态方法: 1) cookie 客户端存放, 2) session 服务端存放

http请求报文结构

method URL version  -----请求行
key1: value1 CRLF
key2: value2 CRLF   -----首部行,请求头
CRLF
实体(通常不用)        -----Body

http响应报文

version status reason-phrase  -----状态行
key1: value1 CRLF
key2: value2 CRLF             -----首部行,响应头

CRLF
实体(有先响应报文不用)  -----Body

Method方法

GET:从服务器获取一个资源
HEAD:只从服务器获取文档的响应首部
POST:向服务器输入数据,通常会再由网关程序继续处理 ,提交数据放在body里
PUT:将请求的主体部分存储在服务器中,如上传文件
DELETE:请求删除服务器上指定的文档
TRACE:追踪请求到达服务器中间经过的代理服务器
OPTIONS:请求服务器返回对指定资源支持使用的f请求方法

状态码status

200: 成功,请求数据通过响应报文的entity-body部分发送;OK
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部 Location指明了资源现在所处的新位置;Moved Permanently
302: 响应报文Location指明资源临时新位置 Moved Temporarily
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过 响应此响应状态码通知客户端;Not Modified
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden
404: 服务器无法找到客户端请求的资源;Not Found
500: 服务器内部错误;Internal Server Error
502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求
504 – 网关超时

首部的分类: 通用首部:请求报文和响应报文两方都会使用的首部 请求首部:从客户端向服务器端发送请求报文时使用的首部。补充了请求的附 加内容、客户端信息、请求内容相关优先级等信息 响应首部:从服务器端向客户端返回响应报文时使用的首部。补充了响应的 附加内容,也会要求客户端附加额外的内容信息 实体首部:针对请求报文和响应报文的实体部分使用的首部。补充了资源内 容更新时间等与实体有关的的信息 扩展首部

http协议首部

通用首部: Date: 报文的创建时间 Connection:连接状态,如keep-alive, close Via:显示报文经过的中间节点(代理,网关) Cache-Control:控制缓存,如缓存时长 MIME-Version:发送端使用的MIME版本 Warning:错误通知

请求首部: Accept:通知服务器自己可接受的媒体类型 Accept-Charset: 客户端可接受的字符集 Accept-Encoding:客户端可接受编码格式,如gzip Accept-Language:客户端可接受的语言
Client-IP: 请求的客户端IP Host: 请求的服务器名称和端口号 Referer:跳转至当前URI的前一个URL User-Agent:客户端代理,浏览器版本

响应首部:
信息性: Age:从最初创建开始,响应持续时长 Server:服务器程序软件名称和版本
协商首部:某资源有多种表示方法时使用 Accept-Ranges:服务器可接受的请求范围类型 Vary:服务器查看的其它首部列表
安全响应首部: Set-Cookie:向客户端设置cookie WWW-Authenticate:来自服务器对客户端的质询列表

实体首部: Allow: 列出对此资源实体可使用的请求方法 Location:告诉客户端真正的实体位于何处 Content-Encoding:对主体执行的编码 Content-Language:理解主体时最适合的语言 Content-Length: 主体的长度 Content-Location: 实体真正所处位置 Content-Type:主体的对象类型,如text 缓存相关: ETag:实体的扩展标签 Expires:实体的过期时间 Last-Modified:最后一次修改的时间

Cookie 响应首部,Set-Cookie

curl 工具是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认 证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上 传,代理服务器,cookies,用户名/密码认证, 下载文件断点续传,上载文件断 点续传, http代理服务器管道( proxy tunneling),还支持IPv6,socks5代理服 务器,通过http代理服务器上传文件到FTP服务器等,功能十分强大
curl ip.gs 查看联网ip
elink工具 字符界面

使用mod_deflate模块压缩页面优化传输速

https
https:http over ssl
SSL会话的简化过程
(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端
(3) 客户端取得证书并进行证书验证 如果信任给其发证书的CA
(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
(b) 验证证书的内容的合法性:完整性验证
(c) 检查证书的有效期限
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器, 完成密钥交换
(5) 服务用此密钥加密用户请求的资源,响应给客户端
注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

http重定向https
HSTS:HTTP Strict Transport Security ,响应报文首部添加HSTS,浏览器获取到该信息,自动做跳转https
HSTS preload list: Chrome浏览器中的HSTS预列表载入


httpd

资源放置于本地文件系统特定的路径: DocRoot -> /var/www/html
web服务器资源路径映射方式: (a) docroot (b) alias (c) 虚拟主机docroot (d) 用户家目录docroot

httpd特性
高度模块化: core + modules
DOS: Dynamic Shared Object 动态加/卸载
MPM: multi-processing module 多路处理模块
MPM工作模式

prefork: 多进程I/0模型,一个主进程,多个子进程
worker: 复用多进程, 一个主进程,多个子进程,每个子进程产生n个线程
event: 事件驱动,类似worker,有专门线程管理keep-alive类型的线程,增强高并发场景下的请求处理能力.centos默认

httpd 编译安装

APR(Apache portable Run-time libraries, Apache可移植运行库)

安装开发环境包组: Development Tool, 相关包pcre-devel, openssl-devel, expat-devel
cp -av apr-util-1.6.0 httpd-2.4.27/srclib/apr-util
cp -av apr-1.6.2 httpd-2.4.27/srclib/apr
cd httpd-2.4.27/ ./configure –prefix=/usr/local/httpd24 –enable-so –enable-ssl -enable-cgi –enable-rewrite –with-zlib –with-pcre –with-includedapr –enable-modules=most –enable-mpms-shared=all –withmpm=prefork
make && make install
新建 /etc/profile.d/httpd.sh 添加pash路径 PATH=/usr/local/httpd24/bin: PATH./etc/profile.d/httpd.sh,使httpd2.2/etc/rc.d/init.d/httpdapachectl=/usr/local/httpd24/bin/apachectlhttpd= P A T H . / e t c / p r o f i l e . d / h t t p d . s h 执 行 添 加 服 务 脚 本 , 使 用 h t t p d − 2.2 服 务 脚 本 / e t c / r c . d / i n i t . d / h t t p d 修 改 以 下 内 容 a p a c h e c t l = / u s r / l o c a l / h t t p d 24 / b i n / a p a c h e c t l h t t p d = {HTTPD-/usr/local/httpd24/bin/httpd} pidfile= PIDFILE/usr/local/httpd24/logs/httpd.pidlockfile= P I D F I L E − / u s r / l o c a l / h t t p d 24 / l o g s / h t t p d . p i d l o c k f i l e = {LOCKFILE-/var/lock/subsys/httpd24}
chkconfig –add httpd;chkconfig –list httpd
启动服务 systemctl start httpd

httpd功能特性
虚拟主机 IP、Port、FQDN
CGI:Common Gateway Interface,通用网关接口
反向代理
负载均衡
路径别名
丰富的用户认证机制 basic digest
支持第三方模块

httpd常见配置

配置文件: /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
检查配置语法: httpd –t service httpd configtest
服务脚本:/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
服务控制和启动: chkconfig httpd on|off service
{start|stop|restart|status|configtest|reload} httpd
站点网页文档根目录: /var/www/html
模块文件路径: /etc/httpd/modules /usr/lib64/httpd/modules
主程序文件: /usr/sbin/httpd /usr/sbin/httpd.worker /usr/sbin/httpd.event
主进程文件: /etc/httpd/run/httpd.pid
日志文件目录: /var/log/httpd access_log: 访问日志 error_log:错误日志
帮助文档包: httpd-manual

httpd2.4 启动apachectl start

  1. 显示服务器版本信息 ServerTokens Prod
  2. 修改监听IP和Port Listen
  3. 持久连接 Persistent Connection
  4. 多路处理模块MPM prefork, worker, envent
    查看静态编译的模块 httpd -L 查看静态编译及动态装载的模块 httpd -M
    默认为/usr/sbin/httpd,即prefork
    httpd 2.2修改主配置文件HTTPD=/usr/sbin/httpd.worker
    httpd 2.4修改配置文件:/etc/httpd/conf.modules.d/00-mpm.con
    5.DSO Dynamic Shared Object, 加载动态模块配置
    6.DocumentRoot 定义文档页面路径,起始位置
    7.DirectoryIndex 定义站点主页面
    8.站点访问控制
    访问控制机制有两种:客户端来源地址,用户账号

    directory 在指定目录下放入.htaccess, AllowOverride 选项
  5. 基于用户的访问控制 AuthType
     认证方式两种: basic:明文 digest:消息摘要认证,兼容性差
    生成密码文件htpasswd
    基于组账号进行认证
  6. 日志设定
    Errorlog: LogLevel warn
    LogLevel 可选值: debug, info, notice, warn,error crit, alert, emerg
    accesslog:
    定义日志格式:LogFormat format strings LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
    使用日志格式: CustomLog logs/access_log combined
  7. 设定默认字符集 AddDefaultCharset UTF-8
  8. 定义路径别名 Alias /URL/ “/PATH”
  9. 实现用户家目录的http共享,基于mod_userdir.so实现
  10. status页面, 查看服务器状态
  11. 虚拟主机
    有三种实现方案: 基于ip:为每个虚拟主机准备至少一个ip地址 基于port:为每个虚拟主机使用至少一个独立的port 基于FQDN:为每个虚拟主机使用至少一个FQDN
  12. 反向代理 ProxyPass,ProxyPassReverse,离服务端近
    正向代理,离客户端近

LVS

系统扩展方式:
Scale UP: 向上扩展,增强性能
Scale Out: 向外扩展,增加设备,调度分配问题,Cluster集群
Linux Cluster类型:
LB: Load Balancing, 负载均衡 (F5 Big-IP) lvs,ngix,haproxy,
HA: High Availability, 高可用性, 避免SPOF(single point of failure),keepalived
HPC: High-performance computing, 高性能, 超级计算机
分布式系统
分布式存储: 云盘
分布式计算: hadoop, Spark
会话保持:
session sticky, LVS sh算法,同一用户绑定服务器
session replication: 复制,每台服务器拥有全部session
session server: 专门的session服务器
Linux Virtual Server
缺少基本功能,后端服务器挂掉后,lvs无法获得消息.
iptables/netfilter:
iptables: 用户空间的管理工具
netfilter: 内核空间上的框架
lvs集群类型术语:
VS: Virtual Server, Director Server(DS),Dispatcher,Load Balancer
RS: Real Server(lvs),upstream server(nginx),backend server(haproxy)
CIP: Client IP
VIP: Virtual server IP,VS外网IP
DIP: Director IP, VS内网IP
RIP: Real Server IP
lvs集群的类型:
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT(destination network address translation 目的地址转换),请求和响应都经由Director
lvs-dr: 操纵封装新的MAC地址,Direct Routing,直接路由,Director和各RS都配置有VIP,响应报文不经由Directior,而由RS直接发往Client,RS要修改arp_announce,arp_ignore
lvs-tun: 再原请求IP报文之外新加一个IP首部,IP tunnel隧道,RS直接响应Client
lvs-fullnat: 修改请求报文的源和目标IP,可以跨网络,请求和响应都经由Director

ipvsadm/ipvs管理
ipvsadm:用户空间的命令行工具
ipvs: 工作于内核空间netfilter的INPUT钩子

ipvs scheduler: 根据调度时是否考虑各RS当前负载状态分为静态和动态方法
静态方法:

  1. RR: RoundRobin 轮询
  2. WRR: Weighted RR 加权轮询
  3. SH: Source Hashing,实现session sticky,源IP地址hash,指向统一RS
  4. DH: Destination Hashing,目标地址hash,正向代理中使用,将发往同一个目标地址的请求始终转发至第一次选中的RS

动态方法: 根据负载状态调度,Overhead=value,值越小,越容易被调度

  1. LC: least connection 最少连接
    Overhead=activeconns*256+inactiveconns
  2. WLC: Weighted LC 加权最少连接 overhead/weight
  3. SED: Shortest Expection Delay, 初始连接高权重优先,activeconns+1/weight
  4. NQ: Never Queue,第一轮均匀分配, 后续SED
  5. LBLC: Locality-Based LC,使用场景:根据负载状态实现正向代理
  6. LBLCR: LBLC with Replication,

Nginx

基本功能:
静态资源的web服务器
http协议反向代理服务器
pop3/imap4协议反向代理服务器
FastCGI(lnmp),uWSGI(python)等协议
模块化(非DSO),如zip,SSL模块


KeepAlived


I/0模型

同步/异步,被调用者是否主动通知调用者运行状态
阻塞/非阻塞,调用者是否阻塞,直到被调用者返回结果
I/O模型:
1. 同步阻塞,
2. 同步非阻塞
3. 多路复用: 同步阻塞,多个连接共用一个等待机制,进程阻塞在select或者poll这两个系统调用上,而不是阻塞在真正的IO操作上
4. 信号驱动IO: signal-driven I/O, 只在数据拷贝到应用缓冲区期间进程阻塞
5. 异步IO: 在数据拷贝到应用缓冲区期间进程阻塞也不阻塞,都在内核中完成

相比于IO多路复用模型,异步IO并不十分常用,不少高性能并发服务程序使用 IO多路复用模型+多线程任务处理的架构基本可以满足需求。况且目前操作系统 对异步IO的支持并非特别完善,更多的是采用IO多路复用模型模拟异步IO的方式(IO事件触发时不直接通知用户线程,而是将数据读写完毕后放到用户指定的缓冲区中)

I/O模型的具体实现
1. Select:Linux实现对应,I/O复用模型,底层实现是数组,线性遍历,连接数有上限,Httpd实现
2. Poll:Linux实现,对应I/O复用模型,底层实现是链表,线性遍历,连接数无上限
3. Epoll:Linux实现,对应I/O复用模型,具有信号驱动I/O模型的某些特性,底层实现是哈希表,时间复杂度O(1),内存拷贝,Nginx实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值