osi模型7层
OSI模型分为7层:
OSI把网络按照层次分为7层,由下到上分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
TCP三次握手过程(建立连接)
TCP四次挥手过程(连接断开)
IP地址的可用范围详解
第一个问题:100.100.137.0/24的可用范围是1-254 还是0-255
答案:
是1-254
第二个问题:0 255被保留下来干什么了
答案:
首先明确概念:/24的一个段里面一共256个IP,规定了分成,网络位,主机位,其中254个可用IP(1-254) ,0和255如下:
1. 0 代表网络地址:
(1)主机位为“全0(比特值)” 的地址是网络地址
(2)100.100.137.0/24 100.100.137为网络位, 最后的0 比特值为:0000 0000 就是主机位 ,不可分配给主机,且代表100.100.137这个网络位的ip。
2. 255 代表广播地址
(1)主机位为“全1“的地址是广播地址
(2)100.100.137.255 100.100.137为网络位,最后的255 比特值为:1111 1111 就是主机位, 不可分配给主机。
第三个问题:在什么情况下0 和255 可以使用,不会被保留
答案:
首先说结论:当子网掩码比 /24 更短的时候,0 255 部分可用
比如:
ipcalc -pnbm 100.100.137.0/23
NETMASK=255.255.254.0
PREFIX=23
BROADCAST=100.100.137.255
NETWORK=100.100.136.0
子网范围:100.100.136.1 ~ 100.100.137.254 包含1 和254
网络地址:100.100.136.0 不可用
广播地址:100.100.137.255 不可用
但100.100.137.0,100.100.136.255可用
反驳为什么/25不行:
ipcalc -pnbm 100.100.137.0/25
NETMASK=255.255.255.128
PREFIX=25
BROADCAST=100.100.137.127
NETWORK=100.100.137.0
子网范围:100.100.137.1 - 100.100.137.126
网络地址:100.100.137.0
广播地址: 100.100.137.127
0 255 都不可以用,对应上面结论当子网掩码比 /24 更短的时候,0 255 有的可用
第四个问题:为什么可以ping通?
默认情况下0和255无法 ping 通
但当子网掩码/23 (小于/24) 100.100.137.0,100.100.136.255 是普通ip,可以ping通
补充:ipcalc 可以计算子网的 实际广播地址
ipcalc -pnbm 100.100.137.0/23
NETMASK=255.255.254.0
PREFIX=23
BROADCAST=100.100.137.255
NETWORK=100.100.136.0
vlan知识
Access模式通常用于连接用户主机和交换机,形成接入链路(Access Link),而Trunk模式则用于连接交换机之间,形成干道链路。在Trunk模式下,一个端口可以允许多个VLAN的数据通过,而Access模式则只允许一个VLAN的数据通过。
IP_UV_PV
IP:
IP(独立IP)即Internet Protocol,这里指【独立IP数】,独立IP数是指不同IP地址的计算机访问网站时被计算的总次数。
独立IP数是衡量网站流量的一个重要指标。
一般一天内(00:00-24:00),相同IP地址的客户端访问网站页面只被计算为一次,记录独立IP的时间可为一天或一个月,目前通用的标准为“一天”。
100个学生,100个局域网,出口1个外网IP。独立IP只算1个。
PV
一个页面就是一个PV,100个学生,访问百度,外网出口只有一个,一个人打开3个页面。
IP是1,PV 100*3=300
UV
更接近真实的个人。一个手机,多数情况电脑一个人用。
UV(Unique Visitor)
UV(独立访客)即Unique Visitor,同一台客户端(PC或移动端)访问网站被计算为一个访客。
一天(00:00-24:00)内相同的客户端访问同一个网站只计算一次UV。
UV一般是以客户端Cookie等技术作为统计依据的,实际统计会有误差。
考虑到一台客户端电脑可能会有多人使用的情况,因此,UV(独立访客)实际上并不一定是独立的自然人访问。
路由
路由:为去某一个地方选择一个指定路径
路由功能:路由器,工作在网络层
路由匹配优先级
直连路由---静态路由---默认路由,如果等级一样按照metric的值的大小,值越小优先级越高
查看路由
route -n #推荐
netstat -rn
ip route show
ip r
路由表
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.30.255.253 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.30.240.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低
Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果是直连网络,gateway是0.0.0.0
Genmask:目标网络对应的netmask
Metric: 值越小,路由记录的优先级最高
Iface: 到达对应网络,应该从当前主机哪个网卡发送出来
路由命令route
添加路由:
route add [-net|-host|default] target [netmask Nm] [gw GW] [[dev] If]
-host 主机路由(两台主机之间配置)
-net 网络路由
default 默认路由
route add -net 10.0.1.0/24 gw 10.0.0.254 dev eth1
#要访问10.0.1.0/24的网段要走10.0.0.254这个网关,从本机的dev eth1出网
删除静态路由
route del -net 10.0.1.0/24
请求报文和响应报文
状态码
HTTP状态码(HTTP Status Code)是用来表示Web服务器响应http请求状态的数字代码。
状态码范围 | 作用描述 |
---|---|
100-199 | 用于指定客户端相应的某些动作 |
200-299 | 用于表示请求成功。 |
300-399 | 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 |
400-499 | 用于指出[客户端错误]。 |
500-599 | 用于指出[服务器端错误]。 |
状态代码 | 详细描述说明 |
---|---|
200 | OK 服务器成功返回网页,这是成功的http请求,返回的标准状态码 |
301 | 永久跳转,所有请求的网页将永久跳转到被设定的新的位置 |
403 | 禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当所致。 |
404 | 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致。 |
500 | 内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统的报错,一般为服务器的设置或者内部程序问题导致。例如:SElinux开启,而又没有为http设置规则许可,客户端访问就是500。 |
502 | 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为反向代理服务器下面的节点出问题导致。 |
503 | 服务当前不可用,可能因为服务器超载或停机维护导致,或者是反向代理服务器后面没有可以提供服务的节点。 |
504 | 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据给前端代理服务器。 |
502和504区别
按照客户端---slb---nginx---后端架构来讲
502:坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为反向代理服务器下面的节点出问题导致。无法将请求交给后端,链路不对,连接断开,服务直接挂了。
504:nginx超过了自己设置的超时时间,不等待后端的返回结果,直接给客户端返回504错误。但是后端依然还在处理请求
502:
1.slb代理到nginx,不通或者slb到nginx nginx服务挂了,链路不对连接断开,slb直接会返回502,
2.nginx代理到后端,不通或者nginx到后端 后端服务挂了,链路不对连接断开,返回502
504:
请求到了nginx但是到了后端之后,nginx设置的超时时间已经到了,此时后端还在响应这个请求,nginx将会直接返回504
这是服务端的排查问题
至于客户端到slb网络不通(不可达)直接返回连接超时或者403(禁止访问)
linux的网络命令
ifconfig
#显示网络设备信息
ifconfig
#启动关闭指定网卡
ifconfig eth0 down/up 等于 ifdown/ifup eth0
#设置最大传输单元
ifconfig eth0 mtu 1500
#临时修改 IP
ifconfig ens33 192.168.10.20/24
#建立虚拟网卡(网卡别名),流量走主网卡
ifconfig ens33:0 192.168.10.21
ifconfig ens33:1 192.168.10.22
#单独显示某网卡
ifconfig eth0
[root@mysql56 frp]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.30.247.21 netmask 255.255.240.0 broadcast 172.30.255.255
inet6 fe80::216:3eff:fe0a:381 prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:0a:03:81 txqueuelen 1000 (Ethernet)
RX packets 434525 bytes 527199431 (502.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 205527 bytes 15806109 (15.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
/***
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>:
UP: 表示接口处于活动状态。
BROADCAST: 支持广播地址。
RUNNING: 接口上的介质(比如网线)被检测为连接状态。
MULTICAST: 支持组播。
mtu 1500: MTU (Maximum Transmission Unit) 是该接口上可以传输的最大数据包大小,这里设置为1500字节。
inet 172.30.247.21 netmask 255.255.240.0 broadcast 172.30.255.255:
inet 172.30.247.21: 这是分配给这个接口的IPv4地址。
netmask 255.255.240.0: 子网掩码用来确定IP地址中的网络部分和主机部分。这里的子网掩码表明前20位是网络位,后12位是主机位。
broadcast 172.30.255.255: 广播地址,用于向同一网络中的所有主机发送消息。
txqueuelen 1000 (Ethernet): 发送队列的长度,这里是1000个数据包。类型是Ethernet。
RX packets 434525 bytes 527199431 (502.7 MiB): 接收的数据包数量及总字节数。
RX errors 0 dropped 0 overruns 0 frame 0: 接收过程中发生的错误、丢弃的数据包数、溢出次数以及帧错误数。
TX packets 205527 bytes 15806109 (15.0 MiB): 发送的数据包数量及总字节数。
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0: 发送过程中发生的错误、丢弃的数据包数、溢出次数、载波丢失次数以及碰撞次数。
***/
ip
#显示网卡设备信息
ip a 或者 ip addr show
#查看链路层的状态,但是看不到 ip 地址
ip link
ip -s link #显示更全面,显示不同网络接口的统计数据
#查看接入你所在的局域网的设备的 MAC 地址
ip neighbour
#开启/关闭 eth0
ip link set eth0 up/down
#临时修改网卡名称
ip link set eth1 name syhjnet
#设置网卡别名(虚拟网卡)
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
#给 eth0 添加 IP 地址
ip addr add 20.0.0.19/24 dev eth0
#删除 eth0 网卡上的 IP
ip addr del 20.0.0.19/24 dev eth0
ip addr flush dev eth0
#设置 eth0 默认网关为 192.168.0.2
ip route add default via 20.0.0.2 dev eth0
#查看路由表条目
ip route show
#查看具体 IP 路由包从哪里来
ip route get 20.0.0.19
#更改默认路由
ip route add default via 20.0.0.196
#监控 netlink 消息
ip monitor all
ping
参数 | 含义 |
---|---|
-c | 设置完成要求回应的次数 |
-i | 指定收发信息的间隔时间 |
-s | 设置数据包大小 |
-w | 在设定的秒后退出 |
netstat
参数 | 含义 |
---|---|
-a | 现实主机中所有活动的网络连接信息(包括监听,非监听状态的端口) |
-n | 以数字的形式显示相关的主机地址,端口等信息 |
-p | 显示与网络连接相关联的进程号,进程名称信息(需要root权限) |
-l | 显示处于监听状态的网络连接及端口信息 |
-t | 查看TCP协议相关的信息 |
-u | 显示UDP协议相关的信息 |
-r | 显示路由表信息 |
-i | 显示网卡列表 |
-g | 显示组播组的关系 |
-s | 显示网络统计信息 |
netstat -lntup #查看端口
netstat -rn #查看路由
netstat -an #查看所有接口和网络状态
traceroute
traceroute 命令可以用于测试从当前主机到目的主机之间经过了哪些网络结点,并显示各个中间结点的连接状态(响应时间)。对于无法响应的结点,连接状态将显示为 “*”,预设数据包大小是 40Bytes,用户可另行设置。如果没有 traceroute 命令可执行 yum -y install traceroute 安装。
格式:
traceroute [参数] [主机|IP]
参数:
-d 使用 Socket 层级的排错功能
-f 设置第一个检测数据包的存活数值 TTL 的大小
-F 设置勿离断位
-g 设置来源路由网关,最多可设置 8 个
-i 使用指定的网络界面送出数据包
-I 使用 ICMP 回应取代 UDP 资料信息
-m 设置检测数据包的最大存活数值 TTL 的大小
-n 直接使用 IP 地址而非主机名称
-p 设置 UDP 传输协议的通信端口
-r 忽略普通的 Routing Table,直接将数据包送到远端主机上
-s 设置本地主机送出数据包的 IP 地址
-t 设置检测数据包的 TOS 数值
-v 详细显示指令的执行过程
-w 设置等待远端主机回报的时间
-x 开启或关闭数据包的正确性检验
nmap
用来扫描检测端口
*****查看单个端口是否开启 (和telnet类似)
nmap 10.0.0.129 -p 80
探测目标主机开放的端口,
可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):
nmap -PS 10.0.0.129
nmap -PS 22,80,25 10.0.0.129
nmap 10.0.0.129 -p 1-1024
-PS:告诉 Nmap 使用 TCP SYN 扫描
nethogs
参数 | 说明 |
---|---|
-V | 打印版本 |
-h | 打印磅数 |
-b | bughunt模式 |
-d | 指定显示刷新频率,单位秒,默认一秒 |
-v | 指定流量单位 (0=kb/s,1=total KB ,2=total B ,3=total MB) |
-c | 设置刷新更新次数 |
-t | tracemode 可以记录每一次刷新的流量值 |
-p | 混杂模式下监听流量(不建议使用) |
-s | 按照发送流量排序输出 |
-a | 监控所有网卡端口,包括回环接口 |
运行模式下按键说明
按键 | 说明 |
---|---|
q | 退出 |
s | 按照发送流量排序 |
r | 按照接受流量排序 |
m | 切换端口流量单位显示模式在B,KB,MB之间流量切换 |
用来按进程或程序实时统计网络带宽使用率,它可以直观的显示每个进程占用的带宽。
DEV列当前监控的网络接口名称。
SENT:从该进程发送出去的数据总量
RECEIVED:该进程接收到的每秒的量/总量
nslookup
域名解析工具
[root@c7-1 ~]#nslookup www.baidu.com
Server: 20.0.0.2 #使用的 DNS 服务器的 IP 地址
Address: 20.0.0.2#53 #确认了 DNS 服务器的 IP 地址,并指出了使用的端口号
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com #www.baidu.com 是 www.a.shifen.com 的别名
Name: www.a.shifen.com
Address: 112.80.248.75 #www.a.shifen.com 的一个 A 记录
Name: www.a.shifen.com
Address: 112.80.248.76 #www.a.shifen.com 的另一个 A 记录
Sar
sar -n DEV [interval] [count]
[interval]表示统计间隔,[count]表示统计次数。
执行如下命令,使用sar每1秒统计一次网络接口的活动状况,连续统计5次。
sar -n DEV 1 5
IFACE:网络接口名称。
rxpck/s、txpck/s:每秒接收或发送的数据包数量。
rxkB/s、txkB/s:每秒接收或发送的字节数,以kB/s为单位。
rxcmp/s、txcmp/s:每秒接收或发送的压缩过的数据包数量。
rxmcst/s:每秒接收到的多播数据包。
iftop
1.第一行:是带宽,下面带有标尺,用来标示每个连接上的实时流量占用的带宽
2.中间部分:
中间左侧是所有的连接,默认显示的是主机名,可以通过参数显示ip
中间箭头表示数据方向
中间右侧三列,分别是该连接2s、10s、40s的平均流量
3.最下面部分:
TX:发送流量 cum:运行iftop到目前时间的总发送流量 peak:发送流量的峰值 rate:分别表示过去 2s 10s 40s 的发送平均流量
RX:接收流量 运行iftop到目前时间的总接收流量 接收流量的峰值 分别表示过去 2s 10s 40s 的接收平均流量
TOTAL:总流量 运行iftop到目前时间的总流量 总流量的峰 分别表示过去 2s 10s 40s 的总平均流量
iftop相关参数
-i | 设定监测的网卡,如:# iftop -i eth1 |
---|---|
-B | 以bytes为单位显示流量(默认是bits),如:# iftop -B |
-n | 使host信息默认直接都显示IP,如:# iftop -n |
-N | 使端口信息默认直接都显示端口号,如: # iftop -N |
-F | 显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0 |
-P | 使host信息及端口信息默认就都显示; |
-m | 设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M |
一般直接使用iftop -nN即可
调节控制
h:显示帮助开关
n: 显示主机名/主机ip开关 -------常用
s:显示本机host开关
d:显示远端主机host开关
t:切换显示格式为2行/1行/只显示发送流量/只显示接收流量
N:显示端口号或端口服务名称开关 ---------常用
S:显示本机的端口信息开关
D:显示远端目标主机的端口信息开关
p:显示端口信息开关 -------------------必用
P:切换暂停/继续显示 -------------------常用
b:显示平均流量图形条开关,以界面第一行带宽为标尺,上图中的白条状图即是
B:切换计算2秒或10秒或40秒内的平均流量 ---------常用
T:显示每个连接的总流量开关 ----------常用
l:打开屏幕过滤功能,输入要过滤的字符,比如ip, 按回车后,屏幕就只显示这个IP相关的流量信息 ------必用
L:切换显示画面上边的刻度; 刻度不同,流量图形条会有变化 --------常用
j或k:可以向上或向下滚动屏幕显示的连接记录 -------必用
1或2或3:可以根据右侧显示的三列流量数据进行排序 --------必用
<:根据左边的本机名或IP排序
'>' 根据远端目标主机的主机名或IP排序
o:切换是否固定只显示当前的连接
f:可以编辑过滤代码
!: 可以使用shell命令
Tcpdump
网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供 and、or、not 等逻辑语句帮助去除无用的信息。 格式:
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
常用选项
-i | 监听哪一个网卡 -i eth0 |
---|---|
-n | 不把ip解析成主机名 |
-nn | 不把端口解析成应用层协议 |
-c | 指定抓包的数量 |
-v | 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息 |
-vv | 输出详细的报文信息。 |
实战
默认启动:
tcpdump -vv #普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
过滤主机:
tcpdump -i eth1 host 192.168.1.1 #抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据
tcpdump -i eth1 src host 192.168.1.1 #指定源地址,192.168.1.1
tcpdump -i eth1 dst host 192.168.1.1 #指定目的地址,192.168.1.1
过滤端口:
tcpdump -i eth1 port 80 #抓取所有经过eth1,目的或源端口是80的网络数据
tcpdump -i eth1 src port 80 #指定源端口
tcpdump -i eth1 dst port 80 #指定目的端口
协议过滤:
tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp
tcpdump -i eth1 -p icmp
抓tcp某端口的数据包:
tcpdump -i eth0 tcp port 21 -nn
常用表达式:
非 : ! or "not" (去掉双引号)
且 : && or "and"
或 : || or "or"
抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数
tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据:
tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据:
tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'