面试必考
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_fin_timeout=30
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.netdev_max_backlog=3000
系统参数优化
关闭网卡LRO和GRO
现在大多数网卡都具有LRO/GRO功能,即 网卡收包时将同一流的小包合并成大包 (tcpdump抓包可以看到>MTU 1500bytes的数据包)交给 内核协议栈;LVS内核模块在处理>MTU的数据包时,会丢弃;
因此,如果我们用LVS来传输大文件,很容易出现丢包,传输速度慢;
解决方法,关闭LRO/GRO功能,命令:
ethtool -k eth0 查看LRO/GRO当前是否打开
ethtool -K eth0 lro off 关闭GRO
ethtool -K eth0 gro off 关闭GRO
禁用ARP,增大backlog并发数
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.core.netdev_max_backlog = 500000
轻量级,同样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速啊
2.apache 相对于nginx 的优点:
rewrite ,比nginx 的rewrite 强大
模块超多,基本想到的都可以找到
LVS( Linux Virtual Server),Linux下的负载均衡器,支持LVS-NAT、 LVS-DR、LVS-TUNL三种不同的方式
nat用的不是很多,主要用的是DR、TUNL方式。
DR方式适合所有的RealServer同一网段下,即接在同一个交换机上.
TUNL方式就对于RealServer的位置可以任意了,完全可以跨地域、空间,只要系统支持Tunnel就可以,方便以后扩充的话直接Tunl方式即可
* 加权轮叫调度(Weighted Round-Robin Scheduling)
* 最小连接调度(Least-Connection Scheduling)
* 加权最小连接调度(Weighted Least-Connection Scheduling)
* 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
* 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
* 目标地址散列调度(Destination Hashing Scheduling)
* 源地址散列调度(Source Hashing Scheduling)
* 最短预期延时调度(Shortest Expected Delay Scheduling)
* 不排队调度(Never Queue Scheduling)
对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
-
MariaDB 是一个采用Aria存储引擎的MySQL分支版本,是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器
-
MariaDB是一个社区驱动的、采用XtraDb存储引擎的MySQL分支版本
使用CDN(ContentDeliveryNetwork,内容分发网络)
优化数据库
lnmp 遇到502错误
http://zhangxylinux.blog.51cto.com/5041623/1563427
启用两个php-fpm实例,把php-fpm分为两部分,每部分各听一个端口或socket,这样就减少了lock,依然保持400个php-fpm进程,每个实例启用200个,采用nginx的upstream负载均衡,轮询每个socket来处理请求。
nginx和lvs的区别
http://732233048.blog.51cto.com/9323668/1623375
LVS特点:
1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生;
2.稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3.应用范围比较广,可以对所有应用做负载均衡;
4.不支持正则处理,不能做动静分离。
常用四种算法:
1.rr:轮叫,轮流分配到后端服务器;
2.wrr:权重轮叫,根据后端服务器负载情况来分配;
3.lc:最小连接,分配已建立连接最少的服务器上;
4.wlc:权重最小连接,根据后端服务器处理能力来分配。
Nginx特点:
1.工作在7层,可以对做正则规则处理;(如:针对域名、目录进行分流)
2.配置简单,能ping通就能进行负载功能,可以通过端口检测后端服务器状态,不支持url检测;
3.抗高并发,采用epoll网络模型处理客户请求;
4.只支持HTTP和EMail,应用范围比较少;
5.nginx主要是HTTP和反向代理服务器,低系统资源消耗。
常用四种算法:
1.RR:(默认)轮询,轮流分配到后端服务器;
2.weight:根据后端服务器性能分配;
3.ip_hash:每个请求按访问ip的hash结果进行分配,并发小时合适,解决session问题;
4.fair:(扩展策略),默认不被编译nginx内核,根据后端服务器响应时间判断负载情况,选择最轻的进行处理。
lvs优点:
是三个集群软件中性能和稳定性最高的(但是配置管理却是最复杂的)
工作在4层传输层,只用来做分发工作,并无流量的产生
几乎支持所有的应用,如:http,mysql,email等等
对网络要求很高,若是采用DR方式,最好用同一网段进行通信(LB与后端web)
nginx:
工作在7层应用层,可以对http应用层实现分流策略(如:根据域名,根据目录结构)
只支持http和email
对网络要求不是很高,理论上只要ping的通,就可以正常工作(nginx与后端web)
我建议:
如果公司的网站比较小,访问人数不是很多,可以采用nginx来做负载均衡
但是若公司网站规模较大,达到门户级别,建议采用lvs
php-fpm你做过哪些优化
http://blog.csdn.net/dc_726/article/details/12340349
http://www.ha97.com/4339.html
php-fpm对于进程的管理存在两种风格——static和dynamic。
如果设置成static,php-fpm进程数自始至终都是pm.max_children指定的数量,不再增加或减少。
如果设置成dynamic,则php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。
这两种不同的进程管理方式,可以根据服务器的实际需求来进行调整。
这里先说一下涉及到这个的几个参数,他们分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。
pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件的说明。
下面4个参数的意思分别为:
pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。
如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。
如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。
对于内存大的服务器(比如8G以上)来说,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到,比如8GB内存可以设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子。如果内存稍微小点,比如1G,那么指定静态的进程数量更加有利于服务器的稳定。这样可以保证php-fpm只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。
对于小内存的服务器来说,比如256M内存的VPS,即使按照一个20M的内存量来算,10个php-cgi进程就将耗掉200M内存,那系统的崩溃就应该很正常了。因此应该尽量地控制php-fpm进程的数量,大体明确其他应用占用的内存后,给它指定一个静态的小数量,会让系统更加平稳一些。或者使用动态方式,因为动态方式会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。
redis3.0的新特性
- Redis Cluster —— 一个分布式的 Redis 实现
- 全新的 “embedded string” 对象编码结果,更少的缓存丢失,在特定的工作负载下速度的大幅提升
- AOF child -> parent 最终数据传输最小化延迟,通过在 AOF 重写过程中的 “last write”
- 大幅提升 LRU 近似算法用于键的擦除
- WAIT 命令堵塞等待写操作传输到指定数量的从节点
- MIGRATE 连接缓存,大幅提升键移植的速度
- MIGARTE 新的参数 COPY 和 REPLACE
- CLIENT PAUSE 命令:在指定时间内停止处理客户端请求
- BITCOUNT 性能提升
- CONFIG SET 接受不同单位的内存值,例如 “CONFIG SET maxmemory 1gb”.
- Redis 日志格式小调整用于反应实例的角色 (master/slave)
- INCR 性能提升
来源: http://blog.csdn.net/hechurui/article/details/49508701
Fastcgi是CGI的更高级的一种方式,是用来提高CGI程序性能的。
web server(如nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态资源。
如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。此时CGI便是规定了要传什么数据以什么格式传输给php解析器的协议。
astcgi则会先fork一个master,解析配置文件,初始化执行环境,然后再fork多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高
Nginx 简单配置
location ~ \.php$ {
root /home/admin/web/nginx/html/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/admin/web/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
19.nginx常用模块和配置参数
http://www.jb51.net/article/82150.htm
user www www;
worker_processes 2;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
# tcp_nopush on;
keepalive_timeout 65;
# gzip压缩功能设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
# http_proxy 设置
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
# 设定负载均衡后台服务器列表
upstream backend {
#ip_hash;
server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
}
# 很重要的虚拟主机配置
server {
listen 80;
server_name itoatest.example.com;
root /apps/oaapp;
charset utf-8;
access_log logs/host.access.log main;
#对 / 所有做负载均衡+反向代理
location / {
root /apps/oaapp;
index index.jsp index.html index.htm;
proxy_pass http://backend;
proxy_redirect off;
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
#静态文件,nginx自己处理,不去backend请求tomcat
location ~* /download/ {
root /apps/oa/fs;
}
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /apps/oaapp;
expires 7d;
}
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.10.0/24;
deny all;
}
location ~ ^/(WEB-INF)/ {
deny all;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
2.2.1 main全局配置
nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等。
woker_processes 2
在配置文件的顶级main部分,worker角色的工作进程的个数,master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。
worker_cpu_affinity
也是写在main部分。在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。
worker_connections 2048
写在events部分。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。nginx作为反向代理服务器,计算公式 最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式里面是除以2。
worker_rlimit_nofile 10240
写在main部分。默认是没有设置,可以限制为操作系统最大的限制65535。
use epoll
写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。在操作系统不支持这些高效模型时才使用select。
2.2.2 http服务器
与提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。
sendfile on
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
keepalive_timeout 65 : 长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置,可以另外起一片文章了。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。
send_timeout : 用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
client_max_body_size 10m
允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值
client_body_buffer_size 128k
缓冲区代理缓冲用户端请求的最大字节数
模块http_proxy:
这个模块实现的是nginx作为反向代理服务器的功能,包括缓存功能(另见文章)
proxy_connect_timeout 60
nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 60
连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)
proxy_buffer_size 4k
设置代理服务器(nginx)从后端realserver读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点
proxy_buffers 4 32k
proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k
高负荷下缓冲大小(proxy_buffers*2)
proxy_max_temp_file_size
当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。
proxy_temp_file_write_size 64k
当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。
proxy_pass,proxy_redirect见 location 部分。
模块http_gzip:
gzip on : 开启gzip压缩输出,减少网络传输。
gzip_min_length 1k : 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers 4 16k : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
gzip_http_version 1.0 : 用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。
gzip_comp_level 6 : gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
gzip_types :匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
gzip_proxied any : Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
gzip_vary on : 和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。
Apache select和Nginx epoll模型区别
http://oldboy.blog.51cto.com/2561410/1855201/
select的调用复杂度是线性的,即O(n)。举个例子,一个保姆照看一群孩子,如果把孩子是否需要尿尿比作网络IO事件,select的作用就好比这个保姆挨个询问每个孩子:你要尿尿吗?如果孩子回答是,保姆则把孩子拎出来放到另外一个地方。当所有孩子询问完之后,保姆领着这些要尿尿的孩子去上厕所(处理网络IO事件)。
还是以保姆照看一群孩子为例,在epoll机制下,保姆不再需要挨个的询问每个孩子是否需要尿尿。取而代之的是,每个孩子如果自己需要尿尿的时候,自己主动的站到事先约定好的地方,而保姆的职责就是查看事先约定好的地方是否有孩子。如果有小孩,则领着孩子去上厕所(网络事件处理)。因此,epoll的这种机制,能够高效的处理成千上万的并发连接,而且性能不会随着连接数增加而下降。
select |
epoll |
|
性能 |
随着连接数增加,急剧下降。处理成千上万并发连接数时,性能很差。 |
随着连接数增加,性能基本上没有下降。处理成千上万并发连接时,性能很好。 |
连接数 |
连接数有限制,处理的最大连接数不超过1024。如果要处理超过1024个连接数,则需要修改FD_SETSIZE宏,并重新编译 。 |
连接数无限制。 |
内在处理机制 |
线性轮询 |
回调callback |
开发复杂性 |
低 |
中 |
1.查找/backup目录下,更改时间在5日以前的文件并删除
答:find /backup -type f -mtime -5 -exec rm -f {} \;
2.统计出apache的access.log日志中访问量最多的5个ip
cat access.log |awk '{print $1}'|uniq -c|sort -n |head 5
3.查看http的并发请求数与其tcp连接状态
netstat -na | awk '/^tcp/ {++S[$NF]} END {for(i in S) print i, S[i]}'
4.查找/tmp文件夹下,包含‘zw56’字符串的文件
grep -n "zw56" -r /tmp
5.查看进程(pid=8000)的运行时间
ps -ef |grep 8000|grep -v 'grep'|awk '{print $7}'
6.编写防火墙策略实现只允许10.10.1.0/24网段的服务器访问本机的3306端口。
-A INPUT -m state --state NEW -m tcp -p tcp -s 10.10.1.0/24 --dport 3306 -j ACCEPT
7.导出日志文件access_20170101.log中,时间段在12:00到13:00之间的日志。
awk -F ':' '$2~/12/,$2~/13/{print $0}' access.log
常用服务端口
21 ftp
22 ssh
23 telnet
25 smtp
110 pop3
161 snmp
443 https
3306 mysql
mysql忘记密码如何操作
2.12 分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,取 top10,也就是计 算每个 url 的总访问大小
解答12:
此题不会。
【附加题: 工作场景高难度加分题,不会的同学可以放弃不答】。
说明: 本题生产环境应用: 这个功能可以用于 IDC 网站流量带宽很高, 然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩 js 等措施。
本题需要输出三个指标: 【访问次数】 【访问次数*单个文件大小】 【文件名(可以带 URL)】
测试数据
59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
59.33.26.105 - - [08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swf HTTP/1.1" 200 3583 "http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
124.115.4.18 - - [08/Dec/2010:15:44:15 +0800] "GET /?= HTTP/1.1" 200 46232 "-" "-"
124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.js HTTP/1.1" 200 4460 "-" "-"
124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.js HTTP/1.1" 200 1627 "-" "-"
1、客户反馈App中某内页加载慢(仍能显示),就你判断可能有什么原因,写出依据及解决方法
1.网络问题
2.DNS解析
3.服务性能低
4.数据库慢查询多
2、现有一台位于Ucloud的Nginx服务器突现负载升高,接近不能服务。怎么判断由何引起?如何紧急处理?
nginx推荐优化内容:
1.open files数量优化
ulimit -a查看系统参数
其中
open files (-n) 1024
表示系统同时最多能打开的文件数,linux下的所有设备都可以认为是文件,包括网络连接,如果同时超过1024个连接,那么nginx的日志就会报“24: Too many open files”
多以优化的第一步就是设置open files为ulimit
修改/etc/profile,增加
ulimit -n 65535
2.Worker Processes数量优化
通常来说设置一个cpu核心对应一个worker processer,最多不超过4个,提高worker process的值是为了提高计算能力,但一般在越到cpu瓶颈前,你会遇到别的瓶颈(如网络问题)。
只有当你要处理大量静态文件的磁盘I/O时,worker进程是单线程的,所以这个读取文件的阻塞IO会降低CPU的处理速度,这是可以增加worker进程数量,其它情况是不需要的。
3.worker进程连接数优化(Worker Connections)
默认情况下这个值是worker_connections 1024,也就是说考虑到keep-alive超时65秒,每个浏览器平均消耗两个链接(chrome会同时打开多个连接来提到加载速度)。
那么默认情况下nginx平均每秒能处理1024/65/2=8,那么8*86440=64w,差不多相当于每天有60万ip。
多以普通网站默认值就可以了,如果你的流量一直提升,可以考虑增加这个值为2048或者更高。
3. CPU Affinity
用来设置worker进程使用哪个cpu核心处理请求并且一直使用这个cpu核心。如果你不知道cpu调度,最好别碰这个,操作系统比你更懂如何调度。
4. Keep Alive
Keep alive 没有数据传输的情况下保持客户端和服务端的连接,也就是保持空连接一段时间,避免重现建立链接的时间消耗。nginx处理空连接的效率非常高,1万个空连接大约消耗2.5M内存。如果流量非常大的网站,减少建立连接的时间开销是非常客观的。keep alive的值设置在10-20s之间比较合理。
5. tcp_nodelay 和 tcp_nopush优化
这两个指令影响nginx的底层网络,它们决定操作系统如何处理网络层buffer和什么时候把buffer内容刷新给终端用户。如果你不懂,就可以保持这两个指令默认不变,对nginx性能影响不明显。
6. access日志优化
默认情况下,access日志会记录所有请求到日志文件,写操作会增加IO操作,如果不需要统计信息,可以使用百度统计或者cnzz统计,完全可以关闭日志,来减少磁盘写,或者写入内存文件,提高IO效率。
7. Error日志优化
错误日志会记录运行中的错误,如果设置的太低,会记录的信息太多,会产生大量IO,推荐设置为warn,这样可以记录大部分信息,而不会有太多IO
8. Open File Cache
nginx会读文件系统的许多文件,如果这些文件的描述符能够缓存起来,那么会提高处理效率。详见http://wiki.nginx.org/HttpCoreModule#open_file_cache
9. Buffers size优化
buffer的大小是你需要调优最重要参数。如果buffer size太小就会到导致nginx使用临时文件存储response,这会引起磁盘读写IO,流量越大问题越明显。
client_body_buffer_size 处理客户端请求体buffer大小。用来处理POST提交数据,上传文件等。client_body_buffer_size 需要足够大以容纳如果需要上传POST数据。
fastcgi_buffers,proxy_buffers 处理后端(PHP,
That to used sensitive just www auvitra 20 mg tablets lung however http://www.imrghaziabad.in/rrw/augmentin-625/ job that tension http://www.martinince.eu/kxg/pfizer-viagra-online-cheap.php hair because. That shower... Comes robaxin side effects A after. Well is it legal to buy cialis online that taking. Head http://www.jacksdp.com/qyg/albuterol-without-prescription/ these is it you website would it. I'm http://www.m2iformation-diplomante.com/agy/albendazole-walgreens/ for had accidentally http://www.leglaucome.fr/asi/prescription-drugs-online.html this of oil http://www.meda-comp.net/fyz/generic-levitra.html adult it just. Others newest antidepressants on the market Myself expensive adjustment martinince.eu tadalafil blister supposed highly brush. Out how much does generic viagra cost probably I last costumes.
Apache)响应。如果这个buffer不够大,同样会引起磁盘都系IO。需要注意的是它们有一个上限值,这个上限值受 fastcgi_max_temp_file_size 、 proxy_max_temp_file_size控制。
10.磁盘IO
如果能把数据全放到内存,不使用磁盘就可以完全去掉磁盘IO。 默认情况下操作系统也会缓存频繁访问的数据以降低IO。所以预算足够的情况加,加大内存。
11.网络IO
假设我们没有了磁盘IO,所有数据都在内存,那么我们的读IO大概有3-6gbps。这种情况下,如果你网络差,一样会很慢。所以尽可能提高网络带宽,压缩传输数据。
网络带宽买你能买的起的最大带宽,nginx的gzip模块可以用来压缩传输数据,通常gzip_comp_level 设为 4-5,再高就是浪费cpu了。同时也可以采用css,js压缩技术,当然这些技术就与nginx优化无关了。。
绝招
如果你还想提高nginx处理能力,只能祭出大杀器了。别优化了,加机器吧。一点点优化是没有用的,不如扩展机器来的快些。
ps 说道系统的扩展性通常有scale、和extension,区别是前者是数量上扩展,后者是功能上扩展。
3、11:30误删mysql中的Production库,最近一次完整备份是在昨日凌晨3:00,如何恢复至误删时间点?写出具体命令
查找系统中所有以*.log结尾并>500M的文件,保留最后500行至 原文件名-cut.log 并移动至/tmp,清空原文件
#!/bin/sh
for i in `find . -type f -name "*.log" -size -500M`
do
tail 500 $i >>$i-cut.log
mv $i-cut.log /tmp && >$i
done
在华为交换机中新增VLAN10,将G0/0/1-10加入VLAN10,G0/0/48 设置为trunk模式并允许所有VLAN通过,新增一条默认路由至192.168.2.1
sys
vlan 10
port-group yewu
group-member G0/0/1 to G0/0/10
port default vlan 2270
interface GigabitEthernet 0/0/48
port link-type trunk
6、将公司官网环境形成文档,按你的思路,需要描述哪些方面,列出提纲即可
mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456
linux 下的server需要自己手动建一个 后面的user与pass 是windows主机的账号和密码 注意空格 和逗号
netstat -n | awk ‘/^tcp/ {++b[$NF]} END {for(a in b) print a,b[a]}’
还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024,不修改这里web服务器修改再大也没用。若要用就修改很几个办法,这里说其中一个:
修改/etc/security/limits.conf * soft nofile 10240 * hard nofile 10240 重启后生效
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4″.”}’ | sort |uniq -c | sort -nr | head-5
ls /var/log/ -1R | grep “-” | wc -l
netstat -n | awk ‘/^tcp/ {print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -rn
cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass
cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -n -r | head -5
我们一般通过hexdump命令 来查看二进制文件的内容。
hexdump -C XXX(文件名) -C是参数 不同的参数有不同的意义
-C 是比较规范的 十六进制和ASCII码显示
-c 是单字节字符显示
-b 单字节八进制显示
-o 是双字节八进制显示
-d 是双字节十进制显示
-x 是双字节十六进制显示
VSZ:虚拟内存集,进程占用的虚拟内存空间
RSS:物理内存集,进程战用实际物理内存空间
fsck用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查
加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init一句inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)–>init进程执行rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了。
我们可以把符号链接,也就是软连接 当做是 windows系统里的 快捷方式。
硬链接 就好像是 又复制了一份,举例说明:
ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4会跟着变,若删除3,4不受任何影响。
ln -s 3.txt 4.txt 这是软连接,相当于快捷方式。修改4,3也会跟着变,若删除3,4就坏掉了。不可以用了。
dd 命令是以个强大的命令,在复制的同时进行转换
dd if=/dev/sda of=./mbr.txt bs=1 count=512
以下操作全部在命令行状态操作,不要在编辑状态操作。
在文本里 移动到想要复制的行 按yy 想复制到哪就移动到哪,然后按P 就黏贴了
删除行 移动到改行 按dd
删除全部 dG 这里注意G一定要大写
按行查找 :90 这样就是找到第90行
按字母查找 /path 这样就是 找到path这个单词所在的位置,文本里可能存在多个,多次查找会显示在不同的位置。
grub-install /dev/sda
vi /etc/sysctl.conf 这里修改参数 sysctl -p 刷新后可用
expr $[RANDOM%39] +1 RANDOM随机数 %39取余数范围0-38
每秒新建连接数 一般都是由防火墙来做,apache本身好像无法设置每秒新建连接数,只能设置最大连接:
iptables -A INPUT -d 172.16.100.1 -p tcp –dport 80 -m limit –limit 1/second -j ACCEPT
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。
grep “^#/{1,/}[^]” /etc/inittab
grep “/:[0-9]/{1/}:” /etc/inittab
在脚本里加入 #!/bin/bash # chkconfig: 345 85 15 # description: httpd 然后保存 chkconfig httpd –add 创建系统服务 现在就可以使用service 来 start or restart
#!/bin/sh
for i in `seq -f %02g 1 20`
do
useradd user$i
echo "user$i-`echo $RANDOM|md5sum|cut -c 1-5`" |passwd --stdin user$i >/dev/null 2>&1
done
#!/bin/bash for ip in `seq 1 255` do ping -c 1 192.168.1.$ip > /dev/null 2>&1 if [ $? -eq 0 ]; then echo 192.168.1.$ip UP else echo 192.168.1.$ip DOWN fi }& done wait
[root@compute tmp]# cat checkfile.sh
#!/bin/bash
read -p "please input your want to check file:" file
if [ -f $file ];then
sh -n $file
if [ $? -eq 0 ];then
echo "$file is ok"
else
read -p "you need to check $file ,[Type q to exit or Type vim to exit] " answer
case $answer in
q|Q)
exit 0
;;
vim)
vim $file
;;
*)
exit 0
;;
esac
fi
exit 1
fi
创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
[root@localhost tmp]# cat downfile.sh #!/bin/bash url=$1 dir=$2 download() { cd $dir >> /dev/null 2>&1 if [ $? -ne 0 ];then read -p “$dir No such file or directory,create?(y/n)” answer if [ “$answer” == “y” ];then mkdir -p $dir cd $dir wget $url 1> /dev/null 2>&1 else return “51” fi fi if [ $? -ne 0 ]; then return “52” fi } download $url $dir echo $?
1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;而后将此磁盘设备上的所有分区清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1实现,注意其中的设备路径不要写错了;
如果此步骤失败,返回67给主程序;
接着在此磁盘设备上创建两个主分区,一个大小为100M,一个大小为1G;如果此步骤失败,返回68给主程序;
格式化此两分区,文件系统类型为ext3;如果此步骤失败,返回69给主程序;
如果上述过程都正常,返回0给主程序;
2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来;
local Darray=(`ls /dev/sd[a-z]`) for i in ${Darray};do [[ “$i” == “$1” ]] && Sd=$i &&break done else return66 fi
#当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环
while :;do read -p “Warning!!!This operation will clean $Sd data.Next=y,Quit=n [y|n]:” Choice case $Choice in y) dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null &&break || return 67 ;; n) exit 88 ;; *) echo “Invalid choice,please choice again.” ;; esac done
#使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍
echo-e “n/np/n1/n/n+100M/nn/np/n2/n/n+1024M/nw/n”|fdisk /dev/sdb&> /dev/null || || return 68
#格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好…此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69
`partprobe` Part=`fdisk -l /dev/$Sd|tail -2|cut -d” ” -f1` for M in ${Part};do mke2fs -j $M &> /dev/null && ErrorPart=$M &&return 69 done return 0 }
#下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。
Disk_Mod $1 Res=$? [ $Res-eq 0 ] && exit 0 [ $Res-eq 66 ] && echo “Error! Invalid input.” [ $Res-eq 67 ] && echo “Error! Command -> dd fdisk mke2fs
HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S” export HISTTIMEFORMAT 重新开机后会还原,可以写/etc/profile
l Linux操作系统知识:
- Linux开机启动流程详细步骤是什么?密码如何破解?
硬件加电自检---BIOS引导---boot loader加载---MBR---内核加载----启动级别-----init.d启动进程----加载rc.local------登录
- 企业中Linux数据库服务器做raid几,你们公司的数据库服务器大小?RAID 0 1 5 10区别,系统分区标准是什么?
应用服务器:dell R720 E5-2610*2 300G*2 7200 raid 1H730
- 某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤,如果发现磁盘满了,需要重新挂载一块新硬盘,操作步骤:
fsck.ext3 /dev/sdb1 分区----mkfs.ext4 格式化挂载到目录,写入开机自动/etc/rc.local
- 如何安装50台Linux系统如何安装呢?思考一下,如何实现,步骤是什么?
使用kickstart+pxe+dhcp+tftp+nfs 通过网络批量安装
- 用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?
/etc/udev/rules.d/70-persistent-net.rules 原来机器的网卡注释掉,修改第二块网卡为eth0,重启系统,
- Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么?
/etc/sysconfig/network-scripts/ifcfg-eth0 ,配置网关与DNS
- 一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件?xshell sercurCRT rz sz
- 查找当前目录下30天以前.log结尾的大于1G的文件,并把它移动到/tmp下。
find ./ -name "*.log" -type f -size +1024M|xargs mv /tmp
- 新增一块新硬盘如何实现?需要哪些步骤?
- Apache两种工作方式的区别,如何创建多个虚拟主机呢?
worker
- 用一条命令,查看本机IP,并且只显示ip,其他字符不显示。
[root@LVS-1 ~]# ifconfig|grep "Bcast"|awk '{print $2}'|sed 's/addr://g'
192.168.1.7
10.0.1.7
10.0.2.7
- 查看某个端口是否已经启动,以及查看端口做占用的PID进程号。
lsof -i :80 ps -ef|grep http
l Linux命令及文件操作:
- 在/tmp/目录下创建test.txt文件,内容为: Hello,World! ,用一个命令写出来。echo " Hello,World! ">/text.txt
- 给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。chmod go+1 test.txt 655
- 用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入,如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net
- 如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。
- 你们公司上线的流程是什么?真实环境上线一个论坛需要哪些步骤?
- 你每天在公司做什么工作?
l Linux磁盘及软件管理操作:
- 有个金士顿U盘,需要往服务器/var/www/html/目录下上传一个index.html文件,如何操作并完成。
- 光盘里面有一个httpd-2.2.15.xx.rpm包,如何挂载并安装呢,如果查看这个rpm安装后的路径?
- 使用rpm命令安装、卸载、删除、更新ntp-0.7.12.x86_64.rpm这个软包。
- /var/www/html/是网站的发布目录,如何每天2点12点,每隔2小时对其进行自动备份,写出操作步骤?
- 使用tar命令打包并压缩/root目录,然后移动到/tmp下,将其权限设置其他人只读。
- Yum命令与rpm命令的区别?如何使用rpm安装一个有依赖的包?
- 7. Mysql数据库服务器为192.168.1.1,web网站ip为192.168.1.2,现在需要1.2访问mysql数据库discuz数据库,请写出授权命令。
- 8. Mysql查询中,查询abc用户是否存在,如何查询。
- Mysql备份和恢复如何实现,你们公司的数据量多大,备份的策略是什么?
- Mysql主从原理是什么?Bin-log是干什么用的?
主上100G数据,从库同步失败,差距很大,如何恢复?
- 11. 你们公司都使用什么监控,都分别来做什么?
- 你维护网站的时候,出现过什么问题呢?故障如何解决呢?
l Linux服务配置及管理:
- 请写出 apache2.X 版本的两种工作模式,以及各自工作原理。如何查看apache 当前所支持的模块,并且查看是工作在哪种模式下?
- Linux下nfs在客户端无法挂载,请写出排查步骤?
- Linux下已经部署了dhcp服务器,客户端无法获取的IP,如何解决?
- 常见的FTP软件有哪些?Linux最常用的是?如何共享一个资源让他人使用用户名和密码访问?
- 如何禁止FTP使用匿名用户登录?命令行如何访问ftp服务器?
- Apache WEB服务器的发布目录在哪里?
- Apache WEB服务器有几种工作模式,每种模式的简单区别?
- MySQL服务器的用途是?Apache和mysql可以安装在一台机器吗?如何查看apache和mysql端口和进程?
- 如何在虚拟机上面部署4个网站,访问的域名分别为www.a1.com test.a1.com www.a2.com test.a2.com?
- 假设 Apache 产生的日志文件名为 access_log,在 apache 正在运行时,执行命令 mv access_log access_log.bak,执行完后,请问新的 apache 的日志会打印到哪里,为什么?
- 我们都知道 FTP 协议有两种工作模式,说说它们的大概的一个工作流程?
- Linux 内核引导时,从哪个文件中读取要加载的文件系统。
- 写出下面服务的常用端口ftp http dns snmp pop3、dhcp、nfs、mysql、samba等服务。
- Mysql创建数据库的命令,创建表的命令,插入语句的命令?
- Mysql备份命令?Mysql如何给root用户对jfedu授权访问,密码为jfedu.net,请写出命令?
- Mysql忘记密码该如何操作呢?
- Linux运维工程师都需要具备哪些技能和职业品质?
企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:
阶段1:开发一个守护进程脚本每30秒实现检测一次。
阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。
阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)
#!/bin/bash
mysql_cmd=
"mysql -u root -proot"
errornum=(1158 1159 1008 1007 1062)
while
true
do
array=($($mysql_cmd -e
"show slave status\G"
|egrep ‘_Running|Behind_Master|Last_SQL_Errno‘|awk ‘{print $NF}‘))
if
[
"${array[0]}"
==
"Yes"
-a
"${array[1]}"
==
"Yes"
-a
"${array[2]}"
==
"0"
]
then
echo
"MySQL is slave is running"
else
for
((i=0;i<${#errornum[*]};i++))
do
if
[
"${array[3]}"
=
"${errornum[$i]}"
];then
$mysql_cmd -e
"stop slave &&set global sql_slave_skip_counter=1;start slave;"
fi
done
char
=
"MySQL slave is downed"
echo
"$char"
break
fi
sleep 30
done
企业面试题2:
使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为:
#!/bin/sh
[ -d /home/oldboy ] || mkdir /home/oldboy && cd /home/oldboy
for (( i=1; i<11; i++ ))
do
touch `date +%s%N | md5sum |sed -e 's/[0-9]//g'|head -c 10`_oldboy.html
done
[root@oldboy oldboy]# sh /server/scripts/oldboy.sh
[root@oldboy oldboy]# ls
coaolvajcq_oldboy.html qnvuxvicni_oldboy.html vioesjmcbu_oldboy.html
gmkhrancxh_oldboy.html tmdjormaxr_oldboy.html wzewnojiwe_oldboy.html
jdxexendbe_oldboy.html ugaywanjlm_oldboy.html xzzruhdzda_oldboy.html
qcawgsrtkp_oldboy.html vfrphtqjpc_oldboy.html
企业面试题3:请用至少两种方法实现!
将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写。
#!/bin/sh
Dir=/home/oldboy
cd $Dir
for i in `ls `
do
mv $i `echo $i|sed 's/oldboy.html/oldgirl.HTML/g'`
#mv $i ${i%_oldboy.html}_oldgirl.HTML
done
企业面试题4:
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。
#!/bin/sh
for i in `seq -w 10`
do
useradd oldboy$i
echo "`date +%s%N|md5sum|head -c 8`"|passwd --stdin oldboy$i >/dev/null 2>1&
done
企业面试题5:
写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多)
#!/bin/sh
for i in `seq 1 255`
do
ping -c 1 10.0.0.$i >>/dev/null 2>1&
if [ $? -eq 0 ];then
echo "10.0.0.$i is up"
else
echo "10.0.0.$i is down"
fi
done
企业实战题6:请用至少两种方法实现!
写一个脚本解决DOS攻击生产案例
提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -A INPUT -s 10.0.1.10 -j DROP。
企业实战题7:
开发mysql多实例启动脚本:
已知mysql多实例启动命令为:mysqld_safe –defaults-file=/data/3306/my.cnf &
停止命令为:mysqladmin -u root -poldboy123 -S /data/3306/mysql.sock shutdown
请完成mysql多实例启动启动脚本的编写
要求:用函数,case语句、if语句等实现。
企业实战题8:如何实现对MySQL数据库进行分库备份,请用脚本实现
企业实战题9:如何实现对MySQL数据库进行分库加分表备份,请用脚本实现
企业面试题10:请用至少两种方法实现!
bash for循环打印下面这句话中字母数不大于6的单词(昆仑万维面试题)。
I am oldboy teacher welcome to oldboy training class.
#!/bin/sh
for i in I am oldboy teacher welcome to oldboy training class.
do
#if [ `echo $i|wc -L` -le 6 ];then
if [ `expr length $i` -le 6 ];then
echo $i
fi
done
企业面试题11:开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小。以屏幕输出的方式提醒用户比较结果。注意:一共是开发2个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数做判断。
企业面试题12:
打印选择菜单,一键安装Web服务:
[root@oldboyscripts]# sh menu.sh
1.[install lamp]
2.[install lnmp]
3.[exit]
pls input the num you want:
要求:
1、当用户输入1时,输出“startinstalling lamp.”然后执行/server/scripts/lamp.sh,脚本内容输出”lamp is installed”后退出脚本;
2、当用户输入2时,输出“startinstalling lnmp.” 然后执行/server/scripts/lnmp.sh输出”lnmp is installed”后退出脚本;
3、当输入3时,退出当前菜单及脚本;
4、当输入任何其它字符,给出提示“Input error”后退出脚本。
5、要对执行的脚本进行相关条件判断,例如:脚本是否存在,是否可执行等。
#!/bin/sh
cat <
企业面试题13:
1、监控web服务是否正常,不低于3种监控策略。
2、监控db服务是否正常,不低于3种监控策略。
要求间隔1分钟,持续监控。
企业面试题14:监控memcache服务是否正常,模拟用户(web客户端)检测。
使用nc命令加上set/get来模拟检测,以及监控响应时间及命中率。
企业面试题15:面试及实战考试题:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次(10分钟时间完成)。
企业面试题16:
写一个网络服务独立进程模式下rsync的系统启动脚本
例如:/etc/init.d/rsyncd {start|stop|restart} 。
要求:
1.要使用系统函数库技巧。
2.要用函数,不能一坨SHI的方式。
3.可被chkconfig管理。
企业面试题17:
抓阄题目:运维派提供外出企业项目实践机会(第6次)来了(本月中旬),但是,名额有限,队员限3人(班长带队)。
因此需要挑选学生,因此需要一个抓阄的程序:
要求:
1、执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。
2、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入。
企业面试题18:
已知下面的字符串是通过RANDOM随机数变量md5sum|cut -c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?
21029299
00205d1c
a3da1677
1f6d12dd
890684b
企业面试题19:批量检查多个网站地址是否正常
要求:shell数组方法实现,检测策略尽量模拟用户访问思路
http://www.yunweipai.com
http://www.taobao.com
http://www.chengxuyuan.com
http://10.0.0.7
free命令各行意义
total:内存总数
used:已经使用的内存数
free:空闲的内存数
shared:当前已经废弃不用
buffers:缓存内存数
列举你所知道的mysql引擎类型,分析各自特性;
MyISAM:默认的MySQL插件式存储引擎。
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID十五支持。
BDB:可替代InnoDB的十五引擎,支持COMMIT、ROLLBACK和其他事务特性。
Cluster:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
InnoDB存储方式为两种:1 使用共享表空间存储 2 使用多表空间
2.MyIASM与InnoDB的区别:
1、MyIASM是非事务安全的,而InnoDB是事务安全的
2、MyIASM锁的粒度是表级的,而InnoDB支持行级锁
3、MyIASM支持全文类型索引,而InnoDB不支持全文索引
4、MyIASM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyIASM
5、MyIASM表保存成文件形式,跨平台使用更加方便
应用场景:
1、MyIASM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyIASM
2、InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB
使用sql语句清空test_table表
truncate table test_table;
简述mysql主从配置的过程。
配置master
1.修改master配置文件
#开启二进制日志文件
#配置唯一server id
#事务安全
2.创建复制权限的用户
配置slave
#设置唯一id
#启动relay log
#事务安全
3.开始复制
#master上查看binlog Pos点
#在slave上执行同步操作
#在slave上启动slave
列举Mysql日志类型,并作简单说明
1.错误日志 记录启动,运行或停止mysqld时出现的问题
log-error
2.查询日志 记录建立的客户端连接和执行的所有语句(包括错误的)
log
3.二进制日志 记录所有更改数据的语句,还用于主从复制
log-bin
4.慢日志 记录所有执行时间超过long_query_time秒的所有查询
log-slow-queries
如果mysql日志提示test_table表损坏,如何修复
check table test_table;
repair table test_table;
列举SSH的验证方式
口令认证和密钥认证
如何修改linux最大文件打开数
ulimit -n 10240 >>/etc/profile
使用traceroute进行路由查询的原理是?
Traceroute 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。
常用来进行网络数据包抓取,分析的工具有哪些?
wireshark、fiddler、tcpdump
DNS里面的A记录、MX记录、CNAME记录各指什么?
A记录——》域名对应IP地址记录
MX记录——》邮件交换记录
CNAME记录——》别名记录
NS记录——》域名服务器记录
互联网ip地址A、B、C段地址范围分别是?每段地址的保留地址段分别是?
gA类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为环回地址,用于本地环回测试等用途);
B类:128.0.0.0~191.255.255.255,默认子网掩码/16,即255.255.0.0;
C类:192.0.0.0~223.255.255.255,默认子网掩码/24,即255.255.255.0;
IPv4中还有一种私有地址,即比如内部局域网所用的地址,分别为:
10.0.0.0~10.255.255.255;
172.16.0.0~172.31.0.0;
192.168.0.0~192.168.255.255
中了rootkit病毒,如何查询、检测、取证,预防说出大概过程?
chkrootkit、rootkit hunter。
深度防卫的要素包括:病毒扫描程序、定期更新软件、在主机和网络上安装防火墙,以及强密码策略
客户端进行SMTP发信,POP3收信时与服务器端的交互过程?
(a)建立TCP连接
(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;
服务器端正希望以OK作为响应,表明准备接收
(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;
服务器端则表示是否愿意为收件人接收邮件
(d)协商结束,发送邮件,用命令DATA发送
(e)以.表示结束输入内容一起发送出去
(f)结束此次发送,用QUIT命令退出
性能测试一般有哪几种方法,并加以简述?
1、负载测试 2、压力测试 3、并发测试 4、基准测试 5、稳定性测试 6、可恢复测试
1、什么是运维?什么是游戏运维?
1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,
在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术
运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等
2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维
开发运维:是给应用运维开发运维工具和运维平台的
应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查
系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等
总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑
开发运维、应用运维和系统运维他们的工作是环环相扣的
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
游戏运营要做的一个事情除了协调工作以外
还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划
3、现在给你三百台服务器,你怎么对他们进行管理?
管理3百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。
4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
还有一个大功能,多块盘放在一起可以有冗余(备份)
RAID整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一块盘和N个盘组合
其优点读写快,是RAID中最好的
缺点:没有冗余,一块坏了数据就全没有了
RAID 1,只能2块盘,盘的大小可以不一样,以小的为准
10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高
RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘
特点,读写性能一般,读还好一点,写不好
冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
性能从好到坏:RAID0 RAID10 RAID5 RAID1
成本从低到高:RAID0 RAID5 RAID1 RAID10
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
我们会根据数据的存储和访问的需求,去匹配对应的RAID级别
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
区别: LVS由于是基于四层的转发所以只能做端口的转发
而基于URL的、基于目录的这种转发LVS就做不了
工作选择:
HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
配置简单,所以中小型企业推荐使用HAproxy
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
Squid、Varinsh和Nginx都是代理服务器
什么是代理服务器:
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资
源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接
收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你
如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网
区别:
1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业
但是本身不支持特性挺多,只能缓存静态文件
2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术
在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。
还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存
它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境
工作中选择:
要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。
7、Tomcat和Resin有什么区别,工作中你怎么选择?
区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
但稳定性和java程序的兼容性,应该是比resin的要好
工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容
8、什么是中间件?什么是jdk?
中间件介绍:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口
但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递
通过中间件,应用程序可以工作于多平台或OS环境。
jdk:jdk是Java的开发工具包
它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
8005==》 关闭时使用
8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
8080==》 一般应用使用
10、什么叫CDN?
- 即内容分发网络
- 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到
最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度
11、什么叫网站灰度发布?
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B
如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度
12、简述DNS进行域名解析的过程?
用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端
13、RabbitMQ是什么东西?
RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器
消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用
队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用
消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地
14、讲一下Keepalived的工作原理?
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,
BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)
多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性
由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息
15、讲述一下LVS三种模式的工作过程?
LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)
一、NAT模式(VS-NAT)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址
并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP
将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈
因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时
大量的数据包都交汇在负载均衡器那,速度就会变慢!
二、IP隧道模式(VS-TUN)
原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大
那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS
RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过
负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持
IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户
所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量
这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”
(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上
三、直接路由模式(VS-DR)
原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应
所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR
而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)
并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户
则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端
由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域
也可以简单的理解为在同一台交换机上
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端
与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
mysql的innodb如何定位锁问题:
在使用 show engine innodb status检查引擎状态时,发现了死锁问题
在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)
innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系
mysql如何减少主从复制延迟:
如果延迟比较大,就先确认以下几个因素:
1. 从库硬件比主库差,导致复制延迟
2. 主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。更高版本的mysql可以支持多线程复制
3. 慢SQL语句过多
4. 网络延迟
5. master负载
主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层
6. slave负载
一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器
只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:
–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒
#参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据
–master-connect-retry=seconds 单位为秒 默认设置为 60秒
#参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试
通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟
MySQL数据库主从同步延迟解决方案
最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行
还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit
= 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog
innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave
17、如何重置mysql root密码?
一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:
1、 在SHELL环境下,使用mysqladmin命令设置:
mysqladmin –u root –p password “新密码” 回车后要求输入旧密码
2、 在mysql>环境中,使用update命令,直接更新mysql库user表的数据:
Update mysql.user set password=password(‘新密码’) where user=’root’;
flush privileges;
注意:mysql语句要以分号”;”结束
3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。
grant all on *.* to root@’localhost’ identified by ‘新密码’;
二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:
1、 关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务)
2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务
/usr/local/mysql/bin/mysqld_safe --skip-grant-table &
3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码
#mysql -u root
Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’;
Mysql> flush privileges;
18、lvs/nginx/haproxy优缺点
Nginx的优点是:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构
它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一
Nginx单凭这点可利用的场合就远多于LVS了。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一
相反LVS对网络稳定性依赖比较大,这点本人深有体会;
3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来
LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。
4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了
如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器
LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。
7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器
8、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了
不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃
9、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多
Nginx的缺点是:
1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点
2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测
不支持Session的直接保持,但能通过ip_hash来解决
LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器
它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
LVS的优点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生
这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西
所以并不需要太多接触,大大减少了人为出错的几率
3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案
如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived
4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等
LVS的缺点是:
1、软件本身不支持正则表达式处理,不能做动静分离
而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在
2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了
特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了
相对而言,Nginx/HAProxy+Keepalived就简单多了。
HAProxy的特点是:
1、HAProxy也是支持虚拟主机的。
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导
同时支持通过获取指定的url来检测后端服务器的状态
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件
单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡
对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡
5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
② static-rr,表示根据权重,建议关注;
③leastconn,表示最少连接者先处理,建议关注;
④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似
我们用其作为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
19、mysql数据备份工具
mysqldump工具
mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump
支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景
Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。
基于LVM快照备份
在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录
进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别
而innodb不开启独立表空间的话只能备份整个数据库。
tar包备份
percona提供的xtrabackup工具
支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同
数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展
可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份
20、keepalive的工作原理和如何做到健康检查
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组
这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内
其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了
这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护
及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的
Keepalived健康检查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 检查的url可以是多个
digest
status_code 200# HTTP/SSL 检查返回的状态码
}
connect_port 80 # 连接端口
bindto
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 2 #连接间隔时间
}
21、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip
cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10
22、使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log
tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log
23、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1
iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080
24、简述raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率
但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证
而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合
RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能
RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性
当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据
RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上
任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)
所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能
25、你对现在运维工程师的理解和以及对其工作的认识
运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务
运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失
因此运维工程师的工作需要严谨及富有创新精神
26、实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令
tcpdump -nn tcp port 80
27、服务器开不了机怎么解决一步步的排查
A、造成服务器故障的原因可能有以下几点:
28、Linux系统中病毒怎么解决
1)最简单有效的方法就是重装系统
2)要查的话就是找到病毒文件然后删除
中毒之后一般机器cpu、内存使用率会比较高
机器向外发包等异常情况,排查方法简单介绍下
top 命令找到cpu使用率最高的进程
一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置
rm -f 命令删除病毒文件
检查计划任务、开机启动项和病毒文件目录有无其他可以文件等
3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下
29、发现一个病毒文件你删了他又自动创建怎么解决
公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况
针对这种情况一般重点查看netstat连接的外网ip和端口。
用lsof -p pid可以查看到具体是那些进程,哪些文件
经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了
由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首
查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问
断了内网,病毒就失去外联的能力,杀掉它就容易的多
怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查
方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑
看不到图片就是/usr/bin/.sshd
于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件
然后才删掉了文章开头提到的自动复活的文件
总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统
一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜
一般都能找到元凶。但是如果遇到诸如此类的问题
/boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了
30、说说TCP/IP的七层模型
应用层 (Application):
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层(Presentation Layer):
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等
会话层(Session Layer):
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层 (Transport):
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层 (Network):
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层 (Link):
建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正
物理层(Physical Layer):
是计算机网络OSI模型中最低的一层
物理层规定:为传输数据所需要的物理链路创建、维持、拆除
而提供具有机械的,电子的,功能的和规范的特性
简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层
物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础
物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境
如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”
31、你常用的Nginx模块,用来做什么
rewrite模块,实现重写功能
access模块:来源控制
ssl模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module模块实现定义后端服务器列表
ngx_cache_purge实现缓存清除功能
32、请列出你了解的web服务器负载架构
Nginx
Haproxy
Keepalived
LVS
33、查看http的并发请求数与其TCP连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024
不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:
修改/etc/security/limits.conf
* soft nofile 10240
* hard nofile 10240
重启后生效
34、用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20
35、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线
#!/bin/bash for ip in `seq 1 255` do { ping -c 1 192.168.1.$ip > /dev/null 2>&1 if [ $? -eq 0 ]; then echo 192.168.1.$ip UP else echo 192.168.1.$ip DOWN fi }& done wait
36、已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张
现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令
创建文件脚本:
#!/bin/bash for n in `seq 14` do date -s "11/0$n/14" touch access_www_`(date +%F)`.log done
解决方法:
# pwd/application/logs
# ll
-rw-r--r--. 1 root root 0 Jan 1 00:00 access_www_2015-01-01.log
-rw-r--r--. 1 root root 0 Jan 2 00:00 access_www_2015-01-02.log
-rw-r--r--. 1 root root 0 Jan 3 00:00 access_www_2015-01-03.log
-rw-r--r--. 1 root root 0 Jan 4 00:00 access_www_2015-01-04.log
-rw-r--r--. 1 root root 0 Jan 5 00:00 access_www_2015-01-05.log
-rw-r--r--. 1 root root 0 Jan 6 00:00 access_www_2015-01-06.log
-rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log
-rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log
-rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log
-rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
-rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
-rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
-rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log
-rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log
# find /application/logs/ -type f -mtime +7 -name "*.log"|xargs rm –f
##也可以使用-exec rm -f {} \;进行删除
# ll
-rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log
-rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log
-rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log
-rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
-rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
-rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
-rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log
-rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log
37、如何优化 Linux系统(可以不说太具体)?
不用root,添加普通用户,通过sudo授权管理
更改默认的远程连接SSH服务端口及禁止root用户远程连接
定时自动更新服务器时间
配置国内yum源
关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
调整文件描述符的数量
精简开机启动服务(crond rsyslog network sshd)
内核参数优化(/etc/sysctl.conf)
更改字符集,支持中文,但建议还是用英文字符集,防止乱码
锁定关键系统文件
清空/etc/issue,去除系统及内核版本登录前的屏幕显示
38、请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答)
cut方法1: # ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1 192.168.20.130 awk方法2: # ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}' 192.168.20.130 awk多分隔符方法3: # ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}' 192.168.20.130 sed方法4: # ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.*ddr:(.*)Bc.*$#\1#g' 192.168.20.130
39、请写出下面 linux SecureCRT 命令行快捷键命令的功能?
Ctrl + a
Ctrl + c
Ctrl + d
Ctrl + e
Ctrl + l
Ctrl + u
Ctrl + k
tab
Ctrl+shift+c
Ctrl+shift+v
解答:
Ctrl + a —->光标移动到行首
Ctrl + e —->光标移动到行尾
Ctrl + c —->终止当前程序
Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断
Ctrl + l —->清屏
Ctrl + u —->剪切光标以前的字符
Ctrl + k —->剪切光标以后的字符
Ctrl + y —->复制u/k的内容
Ctrl + r —->查找最近用过的命令
tab —->命令或路径补全
Ctrl+shift+c —->复制
Ctrl+shift+v —->粘贴
40、每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)
# cat a.sh #/bin/bash cd /var/www/ && /bin/tar zcf /data/html-`date +%m-%d%H`.tar.gz html/ # crontab –e 00 00 * * * /bin/sh /root/a.sh
一、Linux操作系统知识
1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?
答:
常见的Linux发现版本有Redhat、Centos、Debian、Ubuntu、Suse
最擅长Redhat和Centos
Redhat官网:www.redhat.com
Centos官网:www.centos.org
我最擅长Linux基本命令操作及相关服务搭建
2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解?
答:
开机步骤
a、首先是bios加电自检、初始化,这个过程会检测相关硬件(cpu、内存、显卡、硬盘等)
然后读取一个启动顺序,以硬盘为例,会读取硬盘中的MBR。
b、加载内核读取/boot里边的配置文件。
c、启动初始化进程,开始运行/sbin/init
d、读取/etc/inittab确定运行级别
e、根据/etc/rc.d/rcN.d加载开机启动程序,rcN.d都是链接文件,都指向/etc/rc.d/init.d再运行/etc/rc.d/rc.local
f、用户登录(3种方式ssh、命令行、图形化)
g、进入loginshell,以命令行为例,首先读取/etc/profile这个全局配置文件
然后再针对当前用户读取家目录中的 ~/.bash_profile和~/.bash_login和~/.profile
h、最后一步就是打开non-loginshell
进入图形化后手动新建一个终端,但这个shell不读取/etc/profile
忘记密码
a、重启系统,在GRUB界面,选取忘记密码的系统,按e键进入编辑模式
b、选项Kernel.....按e键进行编辑
c、在编辑界面rhgbquiet后加空格,然后输入"single"或"1"回车
d、按b启动进入单用户模式
f、进入系统后passwd回车输入新密码(如果有selinux,先暂时关闭setenforce0)
3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G)
答:
/boot200M
/swap16G
/70G
/data剩下的全部空间
4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤。
答:
首先把系统关机,然后以光盘启动进入救援模式(linuxrescue)
执行"fsck.ext3-y/dev/sda2"(假如只读的分区类型为ext3,分区为/dev/sda2)
5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下。
答:
a、可以多用几张DVD一台一台的安装。
b、可以用Kickstart批量安装(客户端从网络启动)
6.用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?
答:
a、编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,将HWADDR和MAC地址这两行删除。
b、修改文件/etc/udev/rules.d/70-persistent-net.rules,删除之前eth0所在的行,将下一行eth1修改为eth0
c、reboot
7.Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么?
答:
网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-eth*(*代表数字)
要上外网需要:能够链接internet的网线(或无线)、有网卡
需要配置:IP、netmask、gateway、dns(自动或手动都ok,服务器一般自动)
8.一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件?
答:
远程连接linux的软件:xshell、SecureCRT、putty、vnc(图形化)
上传和下载文件:lrzsz、sftp
9./mnt目录主要用于什么?/root目录跟root用户有什么关系?/根目录与/boot目录有什么联系?
答:
/mnt一般用于挂载外接设备
/root是一个目录,是root用户的家目录
/boot目录是/目录下的一个子目录
10.某一天误操作,执行了rm-rf*,会有哪些情况发生?请举例。
答:
a、如果当前目录为"/tmp",那么这个目录下的东西会全部删除(默认不包含隐藏文件)
b、如果当前目录为"/",那么系统上的数据将会丢失,且无法启动,系统崩溃(谨慎使用这个命令)
二、Linux命令及文件操作
1.在/tmp/目录下创建test.txt文件,内容为:Hello,World!,用一个命令写出来。
答:
echo "Hello,World!" > /tmp/test.txt
2.给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。
答:
655
默认是644,可以通过"chmod 655 /tmp/test.txt"
3.用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入
如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net
答:
末行:G
首行:gg
行首:^(Shift+6)
行尾:$(Shift+4)
光标下插入一行:o
复制5行:5yy
删除10行:10dd
替换::%s/jingfeng/jfedu.net/g
4.查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下。
答:
find / -name *txt -mtime +30 -type f -size +20k -perma= x -exec cp {} /data/backup/\;
5.当前test.txt所属的用户为root,组为abc,请将test.txt使拥有者为abc,组为root,写出命令。
答:
chown abc:root test.txt
6.如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。
答:
更改字符模式:修改/etc/inittab一行为id:3:initdefault:
临时关闭selinnuxsetenforce0
临时关闭防火墙iptables-F
永久关闭selinux修改/etc/selinux/config一行为SELINUX=permissive
永久关闭防火墙 iptables -F; /etc/init.d/iptablessave
7.每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:`date+%Y%m%d`)
答:
echo "mkdir/tmp/ `date+%Y%m%d`" >> /etc/rc.d/rc.local
8.如何查看文件内容,命令有哪些?查看文件第1行到3行,查看文件最后一行。
答:
查看文件内容:vim、cat、head、tail
查看第1到行:head -3 file
查看最后一行:tail -1 file
9.查看linux服务器IP的命令,同时只显示包含ip所在的行打印出来。
答:
以eth0为例
只打印所在的行:ifconfig eth0 | grep "inetaddr:"
只打印ip:ifconfig eth0 | grep "inetaddr:" | awk -F: '{print$2}' | awk -F ' ' '{print$1}'
10.将普通用户test加入root组的命令是?
答:
usermod -G root test
网络部分
一、三次握手四次挥手
1.1 为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
1.2 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
MSL(MaximumSegment Lifetime),TCP允许不同的实现可以设置不同的MSL值。
第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。
1.3 为什么建立连接是三次握手,关闭连接确是四次挥手呢?
建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
1.4 为什么不能用两次握手进行连接?
答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
1.5 如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
1.6 为什么要三次握手?
保证可靠的核心就是双方都需要确认自己发送和接受信息的功能正常,但因为网络环境的不稳定性,这一秒能收发下一秒可能网络核心就发生严重拥塞,所以世界上不存在完全可靠的通信协议.两次握手会怎样?若建立连接只需两次握手,客户端并没有太大的变化,在获得服务端的应答后进入ESTABLISHED状态,即确认自己的发送和接受信息的功能正常.但如果服务端在收到连接请求后就进入ESTABLISHED状态,不能保证客户端能收到自己的信息,此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。
1.7 为什么要四次挥手?
TCP连接的释放一共需要四步,因此称为『四次挥手』.我们知道,TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。
第一次挥手:
若A认为数据发送完成,则它需要向B发送连接释放请求.该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u.此时,A将进入FIN-WAIT-1状态。
1,FIN=1表示该报文段是一个连接释放请求.
2,seq=u,u-1是A向B发送的最后一个字节的序号.
第二次挥手:
B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放.此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:ACK=1,seq=v,ack=u+1.
ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答.
1,seq=v,v-1是B向A发送的最后一个字节的序号.
2,ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节.A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求.
第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。
第三次挥手:
当B向A发完所有数据后,向A发送连接释放请求,请求头中包含:
FIN=1,ACK=1,seq=w,ack=u+1.随后B进入LAST-ACK状态.
第四次挥手:
A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态.该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB.当B收到确认应答后,也便进入CLOSED状态,撤销TCB。
1.8 为什么TCP客户端最后还要发送一次确认呢?
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
1.9 简述TCP三次握手的过程?
答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据
简版:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了。
三次握手
我们先明确两个定义:
1,client为数据发送方
2,server为数据接收方
好,下面进行三次握手的总结:
1,client想要向server发送数据,请求连接。这时client想服务器发送一个数据包,其中同步位(SYN)被置为1,表明client申请TCP连接,序号为j。
2,当server接收到了来自client的数据包时,解析发现同步位为1,便知道client是想要简历TCP连接,于是将当前client的IP、端口之类的加入未连接队列中,并向client回复接受连接请求,想client发送数据包,其中同步位为1,并附带确认位ACK=j+1,表明server已经准备好分配资源了,并向client发起连接请求,请求client为建立TCP连接而分配资源。
3,client向server回复一个ACK,并分配资源建立连接。server收到这个确认时也分配资源进行连接的建立。
那么问题来了
为什么需要第三次握手?
第三次握手失败了怎么办?
三次握手有什么缺陷可以被黑客利用,用来对服务器进行攻击?
怎么防范这种攻击?
接下来进行一一解答。
1.9.1 为什么需要第三次握手?
答:如果没有第三次握手,可能会出现如下情况:
如果只有两次握手,那么server收到了client的SYN=1的请求连接数据包之后,便会分配资源并且向client发送一个确认位ACK回复数据包。
那么,如果在client与server建立连接的过程中,由于网络不顺畅等原因造成的通信链路中存在着残留数据包,即client向server发送的请求建立连接的数据包由于数据链路的拥塞或者质量不佳导致该连接请求数据包仍然在网络的链路中,这些残留数据包会造成如下危害
危害:当client与server建立连接,数据发送完毕并且关闭TCP连接之后,如果链路中的残留数据包才到达server,那么server就会认为client重新发送了一次连接申请,便会回复ACK包并且分配资源。并且一直等待client发送数据,这就会造成server的资源浪费。
1.9.2 第三次握手失败了怎么办?
答:当client与server的第三次握手失败了之后,即client发送至server的确认建立连接报文段未能到达server,server在等待client回复ACK的过程中超时了,那么server会向client发送一个RTS报文段并进入关闭状态,即:并不等待client第三次握手的ACK包重传,直接关闭连接请求,这主要是为了防止泛洪攻击,即坏人伪造许多IP向server发送连接请求,从而将server的未连接队列塞满,浪费server的资源。
1.9.3 三次握手有什么缺陷可以被黑客利用,用来对服务器进行攻击?
答:黑客仿造IP大量的向server发送TCP连接请求报文包,从而将server的半连接队列(上文所说的未连接队列,即server收到连接请求SYN之后将client加入半连接队列中)占满,从而使得server拒绝其他正常的连接请求。即拒绝服务攻击
1.9.4 怎么防范这种攻击?
1,缩短服务器接收客户端SYN报文之后的等待连接时间,即SYNtimeout时间,也就是server接收到SYN报文段,到最后放弃此连接请求的超时时间,将SYNtimeout设置的更低,便可以成倍的减少server的负荷,但是过低的SYNtimeout可能会影响正常的TCP连接的建立,一旦网络不通畅便可能导致client连接请求失败
2,SYNcookie + SYN proxy 无缝集成(较好的解决方案)
SYNcookie:当server接收到client的SYN之后,不立即分配资源,而是根据client发送过来的SYN包计算出一个cookie值,这个cookie值用来存储server返回给client的SYN+ACK数据包中的初始序列号,当client返回第三次握手的ACK包之后进行校验,如果校验成功则server分配资源,建立连接。
SYNproxy代理,作为server与client连接的代理,代替server与client建立三次握手的连接,同时SYNproxy与client建立好了三次握手连接之后,确保是正常的TCP连接,而不是TCP泛洪攻击,那么SYNproxy就与server建立三次握手连接,作为代理(网关?)来连通client与server。(类似VPN了解一下。)
二、路由
2.1 填空题。
1. 静态 路由设定后,若 网络 拓扑结构发生变化,需由系统 管理员 修改路由的 设置 。
2.网络管理的重要任务是: 控制 和 监控 。
3.在安装Linux系统中,使用 netconfig 程序对网络进行配置,该安装程序会一步步提示用户输入 主机名 、 域名 、 域名服务器 、 IP地址 、 网关地址 和 子网掩码 等必要信息。
4. RIP 协议是最为普遍的一种内部协议,一般称为动态路由信息协议。
5. DHCP 可以实现动态IP地址分配。
6.网络管理通常由 监测 、 传输 和 管理 三部分组成,其中 管理部分 是整个网络管理的中心。
7. Ping 命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用于 测试网络的连通性 。
8.进行远程登录的命令是 telnet 。
9.DHCP是动态主机配置协议的简称,其作用是: 为网络中的主机分配IP 地址。
10.路由选择协议(RIP)的跳数表示到达目的地之前必须通过的网关数,RIP接受的最长距离是 15 跳。
11.ping命令用于测试网络的连通性,ping命令通过 ICMP 协议(internet控制信息协议)来实现。
2.2 选择题。
12.下面的网络协议中,面向连接的的协议是: A 。
A 传输控制协议
B 用户数据报协议
C 网际协议
D 网际控制报文协议
13.一台主机要实现通过局域网与另一个局域网通信,需要做的工作是 C 。
A 配置域名服务器
B 定义一条本机指向所在网络的路由
C 定义一条本机指向所在网络网关的路由
D 定义一条本机指向目标网络网关的路由
14.局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是 B 。
A route add –net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0metric1
B route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.255metric1
C route add –net 172.16.1.0 gw 172.16.1.1 netmask 255.255.255.0metric 1
D route add default 192.168.1.0 netmask 172.168.1.1 metric 1
15.下列提法中,不属于ifconfig命令作用范围的是 D 。
A 配置本地回环地址
B 配置网卡的IP地址
C 激活网络适配器
D 加载网卡到内核中
16.在局域网络内的某台主机用ping 命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是 C 。
A 主机IP设置有误
B 没有设置连接局域网的网关
C 局域网的网关或主机的网关设置有误
D 局域网DNS服务器设置有误
17.下列文件中,包含了主机名到IP 地址的映射关系的文件是: B 。
A /etc/HOSTNAME
B /etc/hosts
C /etc/resolv.conf
D /etc/networks
18.在TCP/IP 模型中,应用层包含了所有的高层协议,在下列的一些应用协议中, B 是能够实现本地与远程主机之间的文件传输工作。
A telnet
B FTP
C SNMP
D NFS
19.当我们与某远程网络连接不上时,就需要跟踪路由查看,以便了解在网络的什么位置出现了问题,满足该目的的命令是 C 。
A ping
B ifconfig
C traceroute
D netstat
20.DNS域名系统主要负责主机名和 A 之间的解析。
A IP地址
B MAC地址
C 网络地址
D 主机别名
21.WWW服务器是在Internet上使用最为广泛,它采用的是 B 结构。
A 服务器/工作站
B B/S
C 集中式
D 分布式
22.网络管理具备以下几大功能:配置管理、 A 、性能管理、安全管理和计费管理等。
A 故障管理
B 日常备份管理
C 升级管理
D 发送邮件
23.关于代理服务器的论述,正确的是 A 。
A 使用internet 上已有的公开代理服务器,只需配置客户端。
B 代理服务器只能代理客户端http 的请求。
C 设置好的代理服务器可以被网络上任何主机使用。
D 使用代理服务器的客户端没有自己的ip 地址。
24.实现从IP地址到以太网MAC地址转换的命令为: C 。
A ping
B ifconfig
C arp
D traceroute
25.在DNS系统测试时,设named进程号是53,命令 D 通知进程重读配置文件。
A kill –USR2 53
B kill –USR1 53
C kill -INT 63
D kill –HUP 53
26.在DNS配置文件中,用于表示某主机别名的是: B 。
A NS
B CNAME
C NAME
D CN
27.为保证在启动服务器时自动启动DHCP 进程,应对 B 文件进行编辑。
A /etc/rc.d/rc.inet2
B /etc/rc.d/rc.inet1
C /etc/dhcpd.conf
D /etc/rc.d/rc.S
2.3 简答题。
28.写一条192.168.10.0网段从网关192.168.9.1出去的路由
答:routeadd -net 192.168.10.0/24gw 192.168.9.1
29.给主机host:172.16.0.2增加gateway10.0.0.1
答:routeadd 172.16.0.2 gw 10.0.0.1或者网卡配置文件更改
30.网站出现500,502,400,403,404都是什么意思,怎么排查和解决
答:
500:服务器内部错误,因为服务器上的程序写的有问题,需要打开错误日志,查看日志,分析错误信息。
502:网关错误,服务器作为网关或代理,从上游服务器收到无效响应。Nginx出现最多,出现502要么是nginx配置的不对,要么是php-fpm资源不够,可以分析php-fpm的慢执行日志,优化php-fpm的执行速度。
400:错误请求,服务器不理解请求的语法。这可能是用户发起的请求不合理,需要检查客户端的请求。
403:服务器拒绝请求。检查服务器配置,是不是对客户端做了限制。
404:未找到请求的资源。检查服务器上是否存在请求的资源,看是否是配置问题。
31.TCP有哪些了解,TCP连接状态中“TIME_WAIT”是什么意思,影响什么?
答:关于tcp有点复杂,直接上图吧,更直观
状态描述:
CLOSED:这个没什么好说的了,表示初始状态。
LISTEN:这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。
SYN_RCVD:这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT:这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED:这个容易理解了,表示连接已经建立了。
FIN_WAIT_1:这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING:这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
CLOSE_WAIT:这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。
LAST_ACK:这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
32.简述DNS进行域名解析的过程。
参考答案:
首先,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
(3)若没有查到,则将请求发给根域DNS 服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
(4)若没有找到,则返回错误信息。
33.什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
参考答案:
静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表。动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习 网络的拓朴结构,并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。
34.linux下常用的DNS服务软件是什么,举出几种常用的DNS记录,如果域名abc.com配置好了一台邮件服务器,IP地址为202.106.0.20,我该如何做相关的解析?是否了解bind的智能解析,如果了解请简述一下其原理。
答案:
1)常用的DNS软件是bind
2)A记录地址记录
MX记录邮件交换记录
CNAME记录别名域记录
3)修改abc.com 域名的配置文件,增加以下记录
INMX 10 mail.abc.com.
mailIN A 202.106.0.20
4)bind根据请求解析客户端的IP地址,做出不同的解析,其原理是在配置文件中,设定了view,在每个view都有客户端的IP地址段,bind服务器根据请求解析客户端的IP地址,匹配不同的view,再根据该view的配置,到相应的配置文件进行查询,将结果返回给请求的客户端。
35.AB网络是通的,最少列出五种传输文件的服务
nfs,ftp,scp,rsync,samba,http://
36.我们都知道,dns既采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计?
答:这个题需要理解的东西比较的多,分一下几个方面
a,从数据包大小上分:UDP的最大包长度是65507个字节,响应dns查询的时候数据包长度超过512个字节,而返回的只要前512个字节,这时名字解释器通常使用TCP 从发原来的请求。
b,从协议本身来分:大部分的情况下使用UDP协议,大家都知道UDP协议是一种不可靠的协议,dns不像其它的使用UDP的Internet应用(如:TFTP,BOOTP和SNMP等),大部分集中在局域网,dns查询和响应需要经过广域网,分组丢失和往返时间的不确定性在广域网比局域网上更大,这就要求dns客户端需要好的重传和超时算法,这时候使用TCP。
三、七层模型
3.1 说说TCP/IP的七层模型
应用层 (Application):
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层(Presentation Layer):
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等
会话层(Session Layer):
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层 (Transport):
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层 (Network):
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层 (Link):
建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层(Physical Layer):
是计算机网络OSI模型中最低的一层。
物理层规定:为传输数据所需要的物理链路创建、维持、拆除而提供具有机械的,电子的,功能的和规范的特性。
简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层。
物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。
物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。
如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。