计算机网络(结构上)
计算机网络
网络结构
网络边缘的服务模式
面向连接服务
无连接的服务
功能:数据交换
线路交换:
分组交换
存储转发的连接按照有无网络层连接
四种分组延时
分组丢失
吞吐量
缩写名词
上层的数据单元传向下层
服务和访问点
Internet 协议栈
封装和解封装
各层次的协议数据单元
进程通信
进程:在主机上运行的应用程序
区分进程
穿过的层间信息需要什么
报文
、双方的 endpoint
(IP + TCP/UDP 端口)通讯主机的信息整合 socket
TCP socket 包含四元组:源 IP、源port、目的ip、目的port
是应用层和传输的约定,和其他层无关,且与目的主机的 socket 不同
TCP socket 是一个整数,原理类似于表的序号,而这个序号所对应的行就写着四元组的信息。计算机中有这样的一个表,需要查询目的主机是谁时可以根据 socket 来查询表。
tcp socket | 源 IP | 源port | 目的ip | 目的port | 状态 |
---|---|---|---|---|---|
001 | 1.1.1.1 | 80 | 2.2.2.2 | 80 | … |
UDP socket:本 IP、本端口;
套接字
应用层如何实现应用
实体
传输层提供的服务
UDP 服务
TCP 服务
URL 和 URI
URL:统一资源定位符
URI:统一资源标识符
如何区分:
# www.bilibili.com / video/BV1xJ41197iY?
# URL URI
协议名:// [用户:口令@] 主机名 [:端口] /路径/[;参数][?查询]#片段
https :// www.bing.com /search?q=url
HTTP 概况
HTTP 连接
响应时间模型
HTTP 请求报文
提交表单输入
HTTP 请求类型
HTTP 响应报文
HTTP 响应状态码
200 # 访问成功
301 # 永久跳转
302 # 暂时跳转
400 # 请求不能被服务器解读
403 # 禁止访问(比如公司内外)
404 # 服务器找不到对应的网页资源
500 # 内部服务器错误,例如开启 selinux
502 # 坏的网关,可能是反向代理服务器下面的节点有故障
503 # 服务当前不可用,服务器过载或反向代理服务器下没有可以提供的服务节点
504 # 网关超时,服务器过载所导致
505 # HTTP 的版本不支持
HTTP 有状态服务
DNS 记录
IP 查询方法
传输服务和协议
逻辑通信
报文段
,然后传递给网络层报文段重组成报文
,然后传递给应用层传输层和网络层
Internet 传输层协议和功能
UDP 报文格式
UDP 存在的意义
UDP 校验和
TCP 报文段结构
syn=1 && ack=1
,表明这是一个连接请求报文段TCP 三次握手
TCP 三次握手状态
TCP 的三次握手 (5 种状态)
closed
closed --- listen
closed --- syn_sent
listen ---syn_recv
syn_sent --- established
syn_recv--- established
总结以上
- 客户端和服务端都处于
closed
状态- 服务端创建 socket 并启动相关服务转为
listen
- 客户端向服务端发送连接建立请求,主要内容包括 syn = 1和序号(client_seq),转为
syn_sent
- syn = 1 表示此次发送的报文段是建立连接请求
- 序号则是随机生成的
- 服务端接收到客户端的请求,并给出应答,主要内容包括 syn = 1、 ack= client_seq+1 和序号(server_seq),状态转为
syn_rcvd
- ack = client_seq + q 表示服务端告诉客户端在 ack 之前的数据都接收到了,请发送之后的数据
- 客户端接收服务端的请求,并再次发送 ack 和 seq 进行确认,状态转为
established
- 服务端接收信息,状态转为
established
TCP 四次挥手
established --- fin_wait
established --- close_wait
fin_wait1 --- fin_wait2
close_wait --- last_ack
fin_wait2 --- time_wait
last_ack --- closed
time_wait --- closed
closing
, 表示客户端发送了 FIN,但是没有收到服务器的 ACK,却收到了服务器的 FIN,这种情况发生在服务器发送的 ACK 丢包的时候,网络传输会有意外。Linux 内核参数优化
- 调整访问服务端的客户端的动态端口范围
- 面对大并发的时候能够用到
cat /proc/sys/net/ipv4/ip_local_port_range 32768 60999 # 原始范围 # 调整到 4000 到 65000 echo 4000 65000 > /proc/sys/net/ipv4/ip_local_port_range
- 调整 syn 连接池的大小
- 预防 DOS/SYN 攻击
- syn 洪水攻击属于 DOS 攻击的一种,它利用 TCP 协议的缺陷,通过发送大量的半连接请求,耗费 cpu 和内存资源
cat /proc/sys/net/ipv4/tcp_max_syn_backlog 128 # 默认半连接大小,建议 1024 以上 echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog cat /proc/sys/net/core/somaxconn 128 # 默认全连接大小,建议 1024 以上 echo 1024 > /proc/sys/net/core/somaxconn # 防止孤儿连接时间存留在内核中的两个参数 cat /proc/sys/net/ipv4/tcp_max_orphans 16384 # 默认数量,尽量减小 cat /proc/sys/net/ipv4/tcp_fin_timeout 60 # 默认数量,尽量减小 echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
- time wait 过多
# LVS、Squid、Nginx.这些软件本身服务,能够承受大并发。 vim /etc/sysctl.conf net.ipv4.tcp fin timeout 2 net.ipv4.tcp max_tw_buckets =36000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp tw_recycle = 1 sysctl -p 让参数生效
# 建议加上的参数 # 表示如果套接字由本端要求关闭,、 # 这个参数决定了它保持在 FIN-WAIT-2 状态的时间 net.ipv4.tcp_fin_timeout =2 # 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。 # 如果超过这个数值,孤立连接将被立即被复位并打印出警告信息。 # 这个限制只有为了防止简单的DOSS攻击。 # 不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值。 # 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans,默认值8192 net.ipv4.tcp_max_orphans = 16384 # 向外连接的端口范围 # 系统默认路径:/proc/sys/net/ipv4/ip_local_port_range net.ipv4.ip_local_port_range = 2000 65000 # 表示SYN队列的长度,即半连接队列长度,默认为1024。 # 该参数为服务器端用于记录那些尚未收到客户端确认信息的连接请求最大值 # 默认系统位置:/proc/sys/net/ipv4/tcp_max_syn_backlog net.ipv4.tcp_max_syn_backlog = 16384 # 同时发起的TCP的最大连接数,即全连接队列长度, # 在高并发请求中,可能会导致链接超时或重传,一般结合并发请求数来调大此值 # 该参数对应系统路径为:/proc/sys/net/core/somaxconn,默认值是128 net.core.somaxconn = 16384 # 表示系统同时保持TIME WAIT套接字的最大数量, # 如果超过这个数值,TIME WAIT套接字将立刻被清除并打印警告信息。 # 默认为I80000,对于Ngix等服务器来说可以将其调低一点,如改为5000~30000, # 不通业务的服务器也可以给大一点,比如LVS、Squid # 此参数可以控制 TIMEWAIT套接字的最大数量,避免squid服务器被大量的TIME WAIT套接字拖死。 # 默认系统位置:/proc/sys/net/ipv4/tcp_max_tw_buckets net.ipv4.tcp_max_tw_buckets = 36000 # 表示在内核放弃建立连接之前发送sYN包的数量。 # 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries,默值为6 net.ipv4.tcp_syn_retries = 1 # 参数的值决定了内核放弃连接之前发送SYN+ACK包的数量。 # 该参数对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认值为5 net.ipv4.tcp_synack_retries = 1 # 表示开启连接重用,允许将 TIME_WAIT sockets 重新用于新的 tcp 连接,默认 0 表示关闭 # 对应的系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse net.ipv4.tcp_tw_reuse = 1 # 表示开启 TCP 连接中 TIME_WAIT # sockets 的快速回收,对应的系统路径为 /proc/sys/net/ipv4/tcp_tw_recyle # 默认为 0 表示关闭 net.ipv4.tcp_tw_recycle =1 # 表示开启 SYN Cookies功能。 # 当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击。 # 该参数对应系统路径为:/proc/sys/net/ipv4/tcp syncookies,默认值为1 net.ipv4.tcp_syncookies = 1 # 表示当 keepalive 启用的时候,TCP 发送 keepalive 消息的频度 # 默认是两小时,改为 10 分钟 net.ipv4.tcp_keepalive_time = 600 net.ipv4.route.gc_timeout = 100 # 网卡队列数量 # 该参数对应系统路径为:/proc/sys/net/core/netdev_max_backlog,默认值为1000 net.core.netdev_max_backlog = 16384
查看路由
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.222.2 0.0.0.0 UG 100 0 0 ens33
192.168.222.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
# 路由表主要构成:
Destination: "目标网络ID",表示可以到达的目标网络ID,0.0.0.0/0表示所有未知网络,又称为默认路由,优先级最低
Gateway: 到达非直连的网络,将数据发送到临近(下一个)路由器的临近本主机的接口的IP地址,如果是直连网络,gateway 是0.0.0.0
Genmask:目标网络对应的 netmask
Metric: 值越小,路由记录的优先级最高
Iface: 到达对应网络,应该从当前主机哪个'网卡'发送出来
添加或删除路由
route 方式操作路由
# 查看路由 route -n Kernel IP routing table `目的网段` `网关` `掩码` `网卡名` Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.222.2 0.0.0.0 UG 100 0 0 ens33 192.168.222.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 目的网段是`0.0.0.0` 的是默认路由,当其他路由都不匹配时,才走默认路由 网关为 `0.0.0.0` 表示不需要路由 # 添加默认路由 # 上网默认出口,其他路由不可达时选择此路由 route add default gw GATEWAY-ADRESS dev HW_NAME route add default gw GATEWAY-ADRESS dev HW_NAME # 添加静态路由 route add -net 目的网络网段/掩码位数 gw GATEWAY-ADRESS dev HW_NAME # GATEWAY-ADRESS 就是从哪里出去 route del -net 目的网络网段/掩码位数 gw GATEWAY-ADRESS dev HW_NAME # 添加主机路由 # 用于两台主机之间互联的路由 # HW_NAME 网卡名称 route add -host DEST_IP_ADRESS dev HW_NAME route del -host DEST_IP_ADRESS dev HW_NAME
# 复杂版本 $ route [-nee] # 查看路由表 $ route add [-net|-host] [网域或主机] netmask [mask] [gw|dev] # 添加路由 $ route del [-net|-host] [网域或主机] netmask [mask] [gw|dev] # 删除路由 # 参数解释如下: -n # 不要使用通讯协议或主机名,直接使用IP 或port number -ee # 使用更详细的信息来显示增加(add) 与删除(del) 路由的相关参数 -net # 表示后面接的路由为一个网域 -host # 表示后面接的为连接到单部主机的路由 -netmask # 与网域有关,可以设定netmask 决定网域的大小 -gw # gateway 的简写,后续接的是IP 的数值喔,与dev 不同 $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.80.2 0.0.0.0 UG 100 0 0 eno16777736 172.16.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno33554984 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.80.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736 # Destination, Genmask:分别是network 与netmask,二者组合成为一个完整的网域。 # Gateway:该网域是通过哪个gateway 连接出去的: # 如果显示0.0.0.0 表示该路由是直接由本机传送,亦即可以透过局域网络的MAC 直接传讯。 # 如果有显示IP 的话,表示该路由需要经过路由器(通讯闸) 的帮忙才能够传送出去。 # Flags总共有多个旗标,代表的意义如下: # U (route is up) 该路由是启动的 # H (target is a host) 目标是一部主机(IP) 而非网域; # G (use gateway) 需要透过外部的主机(gateway) 来转递封包 # R (reinstate route for dynamic routing) 使用动态路由时,恢复路由信息的旗标 # D (dynamically installed by daemon or redirect) 已经由服务或转port 功能设定为动态路由o # M (modified from routing daemon or redirect) 路由已经被修改了; # ! (reject route) 这个路由将不会被接受(用来抵挡不安全的网域)
ip route 方式操作路由
查看路由
ip route show default via 192.168.222.2 dev ens33 proto static metric 100 192.168.222.0/24 dev ens33 proto kernel scope link src 192.168.222.3 metric 100
静态默认路由的配置
ip route add default via 网关地址 # 增加默认路由 ip route del default via 网关地址 # 删除默认路由
静态网段路由
ip route add -net 网段 netmask 子网掩码 via 网关地址 # 增加网段路由 ip route del -net 网段 netmask 子网掩码 via 网关地址 # 删除网段路由
静态主机路由
ip route add -host 主机地址 via 网关地址
企业案例:老男孩培训-第七节节课课前考试题route命令总结答案
列:通过【配置静态路由实现不同网络互通】
第一步环境
A:ip:10.0.0.129,gw:10.0.0.254
B:路由:eth0:10.0.0.2,eth1:192.168.1.1
注意:不配GW
C:192.168.1.7,gw:192.168.1.1
注意:服务器不要有多余网卡开启,关闭其他网卡。
检查:在B上ping10.0.0.129,ping192.168.1.7通畅。
4第二步配置路由
在A配置静态路由
oute add-net192.168.1.0/24gw10.0.0.2
第三步开启路由转发功能
在B配置路由转发
im /etc/sysctl.conf
net.ipv4.ip forward 1
主意;sysct1-p
第四步验证
从A上ping C
ing192.168.1.7如果返回证明成功。
如果故障:tcpdump抓包
iptables 执行过程
顺序从上到下
,从前到后进行过滤的iptables 的四表五链
raw
、mangle
、nat
、filter
PREROUTING
、INPUT
、FORWARD
、OUTPUT
、POSTROUTING
filter
表
nat
表
用前准备
# 安装管理软件
yum install -y iptables-services
# 关闭 selinux 和 防火墙
# 加载内核功能
# 暂时加载
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
#永久加载
cat >> /etc/rc.local <<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe lip_nat_ftp
modprobe ipt_state
EOF
# 开启IP tables 并设置开机自启
systemctl start iptables && systemctl enable iptables
# 检测是否加载成功
lsmod | egrep 'filter|nat|ipt'
nf_nat_ftp 12809 0
nf_conntrack_ftp 18478 1 nf_nat_ftp
xt_nat 12681 2
ipt_MASQUERADE 12678 3
nf_nat_masquerade_ipv4 13463 1 ipt_MASQUERADE
iptable_nat 12875 1
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26583 4 nf_nat_ftp,nf_nat_ipv4,xt_nat,nf_nat_masquerade_ipv4
iptable_filter 12810 1
br_netfilter 22256 0
bridge 151336 1 br_netfilter
nf_conntrack 139264 10 nf_nat_ftp,ip_vs,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ftp,nf_conntrack_ipv4
ip_tables 27126 2 iptable_filter,iptable_nat
libcrc32c 12644 5 xfs,raid456,ip_vs,nf_nat,nf_conntrack
# 清除默认规则
iptables -F # 清除所有规则,不会处理默认规则
iptalbes -X # 删除用户自定义的链
iptables -Z # 链的计数器清零(数据包计数器,数据包字节计数器)
使用 iptables
查看规则
iptables -nvL # -n 不将端口号转换成协议 -v 显示详细信息 -L 列出表 --line # 显示行号 iptables -t filter -nvL # 和上行代码等效,默认 filter 表,-t 操作那个表 Chain INPUT (policy ACCEPT) # 有括号的是默认链规则,默认允许 `操作 -j` `协议 -p` `源 s` `目标d` target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
保存规则
我们添加的规则,只是临时生效,永久生效保存在 `/etc/sysconfig/iptables` 中 service iptables save
添加规则
# 添加规则的命令可以分成三个部分 # 1. 添加到哪儿:确认表名和链名 # 2. 操作目标是什么:确认协议、端口、IP 等 # 3. 对操作目标执行什么操作:接收、拒绝、丢掉(将数据包丢掉,不给源端口返回信息) iptables -t 表名 -[I|A] 链名 \ # -I 默认插入在最上面链名后面还可跟数字,-A 在最后面插入 -p 协议名 --sport 源端口 --dport 目标端口 \ # 操作目标 -s 源地址 -d 目标地址 \ # 操作目标 -m 模块 \ # 操作 -i 网卡名 -o 网卡名 \ # INPUT 输入从哪个网卡进来,OUTPUT 输出从那个网卡出 # 只要牵扯到端口,就必须指定协议!!! -j 操作(ACCEPT DROP REJECT)
## 更改默认规则(就是小括号内的规则) iptables -t filter -P INPUT DROP iptables -nL Chain INPUT (policy DROP) # 默认全部 DROP 了 target prot opt source destination ACCEPT tcp -- 192.168.222.4 0.0.0.0/0 tcp dpt:22
删除规则
iptables -t 表名 -D 链名 行号
常用示例
iptables -I INPUT -p tcp -dport 23:8809 -j DROP #过滤从23端口到8809端口 iptables -I INPUT -p tcp -s 192.168.56.1 -j DROP #封单个P iptables -I INPUT -p tcp -dport 23:8809 -j DROP #同时封多个端口:从23端口到8809端口 iptables -A INPUT -P TCP -dport80-j ACCEPT #开发80端口 iptables -I OUTPUT -p tcp -dport80 -j DROP #不允许80端口流出 iptables -I INPUT -p tcp -m --multiport-dport 21,23,24,80,3306 -j DROP #匹配端口范围 iptables -A INPUT -p icmp-s192.168.56.0/24 -icmp-type 8 -j ACCEPT #设置同网段内可以访问 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许关联的状态包
自动化脚本
IPT="/sbin/iptables" $IPT --delete-chain $IPT --flush $IPT -P INPUT DROP #1 $IPT -P FORWARD DROP #1 $IPT -P OUTPUT DROP #1 $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #2 $IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #3 $IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #3 $IPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT #3 $IPT -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT #3 $IPT -A INPUT -p tcp --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT #11 $IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT #3 $IPT -A INPUT -i lo-j ACCEPT #4 $IPT -A INPUT -p icmp -m icmp --icmp-type 8-j ACCEPT #5 $IPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT #5 $IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #6 $IPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT #7 $IPT -A OUTPUT -o lo -j ACCEPT #4 $IPT -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT #8 $IPT -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT #8 $IPT -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT #9 $IPT -A OUTPUT -p tcp -m tcp --dport 3690 -j ACCEPT #2 $IPT -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT #10 $IPT -A OUTPUT -p icmp -m icmp --icmp-type 11-j ACCEPT #10 service iptables save service iptables restart I /sbin/modprobe ip_nat_ftp #11 /sbin/modprobe ip_conntrack #11
#1、设置INPUT,FORWARD,OUTPUT链默认target为DROP,也就是外部与服务器不能通信。 #2、设置当连接状态为RELATED7和ESTABLISHED时,允许数据进入服务器。 #3、设置外部客户端连接服务器端口80,22,21,443(https). #另外要开启873端口(rsync服务器之间数据同步) #/sbin/iptables -A INPUT-p tcp-m tcp--dport 873 -j ACCEPT #4、允许内部数据循回。 #5、允许外部ping服务器。 #6、设置状态为RELATED和ESTABLISHED的数据可以从服务器发送到外部。 #7、允许服务器使用外部dns解析域名。 #8、设置服务器连接外部服务器端口80. #9、允许服务器发送邮件。 #10、允许从服务器ping外部 #11、允许ftp访问
MAC 地址
用前准备
# 安装管理软件
yum install -y iptables-services
# 关闭 selinux 和 防火墙
# 加载内核功能
# 暂时加载
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
#永久加载
cat >> /etc/rc.local <<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe lip_nat_ftp
modprobe ipt_state
EOF
# 开启IP tables 并设置开机自启
systemctl start iptables && systemctl enable iptables
# 检测是否加载成功
lsmod | egrep 'filter|nat|ipt'
nf_nat_ftp 12809 0
nf_conntrack_ftp 18478 1 nf_nat_ftp
xt_nat 12681 2
ipt_MASQUERADE 12678 3
nf_nat_masquerade_ipv4 13463 1 ipt_MASQUERADE
iptable_nat 12875 1
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26583 4 nf_nat_ftp,nf_nat_ipv4,xt_nat,nf_nat_masquerade_ipv4
iptable_filter 12810 1
br_netfilter 22256 0
bridge 151336 1 br_netfilter
nf_conntrack 139264 10 nf_nat_ftp,ip_vs,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ftp,nf_conntrack_ipv4
ip_tables 27126 2 iptable_filter,iptable_nat
libcrc32c 12644 5 xfs,raid456,ip_vs,nf_nat,nf_conntrack
ifconfig
$ ifconfig {interface} {up|down} # 观察与启动 $ ifconfig interface {options} # 设定与修改接口 # 选项与参数: --interface # 网络卡接口代号,如 eth0 --options # 可以接的参数,包括如下 -up # 启动(up) 该网络接口(不涉及任何参数) -down # 关闭(down) 该网络接口(不涉及任何参数) -mtu # 以设定不同的MTU 数值,例如mtu 1500 (单位为byte) -netmask # 子网掩码 -broadcast # 广播地址 $ ifconfig eno16777736 eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.80.148 netmask 255.255.255.0 broadcast 192.168.80.255 RX errors 0 dropped 0 overruns 0 frame 0 TX packets 790632 bytes 105110238 (100.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # RX:那一行代表的是网络由启动到目前为止的封包接收情况 # packets 代表封包数 # errors 代表封包发生错误的数量 # dropped 代表封包由于有问题而遭丢弃的数量等等 # TX:与RX 相反,为网络由启动到目前为止的传送情况 # collisions:代表封包碰撞的情况,如果发生太多次,表示你的网络状况不太好 # txqueuelen:代表用来传输数据的缓冲区的储存长度 # RX bytes, TX bytes:总接收、发送字节总量 # 设置虚拟IP vip ifconfig ens33:0 192.168.222.134/24 up
ip link
$ ip [-s] link show # 单纯的查阅该装置相关的信息 $ ip link set [device] [动作与参数] # 选项与参数: $ show # 仅显示出这个装置的相关内容,如果加上-s 会显示更多统计数据 $ set # 可以开始设定项目,device 指的是eth0, eth1 等等界面代号 # 动作与参数 $ up|down # 启动(up) 或关闭(down) 某个接口,其他参数使用默认的以太网络; $ address # 如果这个装置可以更改MAC 的话,用这个参数修改! $ name # 给予这个装置一个特殊的名字 $ mtu # 就是最大传输单元啊! # 范例 $ ip link set eth0 up # 启动eth0 $ ip link set eth0 down # 关闭 eth0
ip address
$ ip address [add|del] [IP参数] [dev 装置名] [相关参数] # 选项与参数: $ show # 单纯的显示出接口的IP 信息啊; $ add|del # 进行相关参数的增加(add) 或删除(del) 设定 $ IP # 主要就是网域的设定,例如192.168.100.100/24 $ dev # 这个IP 参数所要设定的接口,例如eth0, eth1 等等; # 相关参数:主要有底下这些: $ broadcast # 设定广播地址,如果设定值是+ 表示『让系统自动计算』 $ label # 亦即是这个装置的别名,例如eth0:0 就是了! $ scope # 这个界面的领域,通常是这几个大类: $ global # 允许来自所有来源的联机; $ site # 仅支持IPv6 ,仅允许本主机的联机; $ link # 仅允许本装置自我联机 $ host # 仅允许本主机内部的联机;
# 查看 arp 缓存
arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.222.2 ether 00:50:56:f3:ce:9b C ens33
192.168.222.6 ether 00:0c:29:43:65:a1 C ens33
192.168.222.1 ether 00:50:56:c0:00:08 C ens33
# 删除 arp 表项
arp -d IP_ADRESS
# 指定网卡名称删除
arp -d IP_ADDRESS -i HW_NAME
arp -d 192.168.222.6 -i ens33
# 手动绑定 arp 表项
arp -s IP_ADDRESS HW_ADDR
# 例如:
arp -s 192.168.222.6 00:0c:29:43:65:a1
ping [选项与参数] IP # 选项与参数: -c # 数值:后面接的是执行ping 的次数,例如-c 5 -n # 在输出数据时不进行IP 与主机名的反查,直接使用IP 输出(速度较快); -s # 数值:发送出去的ICMP 封包大小,预设为56bytes,不过你可以放大此一数值; -t # 数值:TTL 的数值,预设是255,每经过一个节点就会少一; -W # 数值:等待响应对方主机的秒数。 -M [do|dont] # 主要在侦测网络的MTU 数值大小,两个常见的项目是: do # 代表传送一个DF (Don't Fragment) 旗标,让封包不能重新拆包与打包; dont # 代表不要传送DF 旗标,表示封包可以在其他主机上拆包与打包 # 经常使用的是 ping -c 指定 ping 几次!
- 被加强的 fping
# 安装 fping # 从官网获取安装包 http://fping.org/ # 放到 /usr/local/src/ 中进行解压缩 # 然后进入文件,进行编译和安装(需要安装 gcc) ./congfigure --prefix=/usr/local/fping make && make install # 写入环境变量 vim /etc/profix export PATH=$PATH://usr/local/fping/sbin/ source /etc/profix # 检验 fping -v # 正常显示即可
fping [-agulf] IP -a # 只显示存活主机: -u # 只显示不存活主机: -1 # 循环ping -g # 指定范围 -f # 指定文件中的IP地址 # 实例 # 单 ping 一个主机 fping 192.168.222.4 192.168.222.4 is alive # 单 ping 两个主机 fping 192.168.222.4 192.168.222.2 192.168.222.4 is alive 192.168.222.2 is alive # 从文件获取目标列表 fping-f filename # 查看 192.168.222.1 ~ 192.168.222.254 中可以 ping 通的 IP fping -ag 192.168.222.0/24 2>/dev/null 192.168.222.2 192.168.222.3 192.168.222.4
traceroute 输出的一行代表通过一个网关,我们可以通过网关出现的速度来判断我们的网络是否有问题,如果刚开始速度特别快,则代表不是我们这边的网络问题。
traceroute [-npT] domain
-n:直接访问 ip 地址
-T:使用 tcp 访问,默认 upd
-p:后跟端口
yum provides host # 获取要安装的软件
yum install -y bind-utils
host [-a] hostname [DNSserver]
-a:列出该主机详细的各项主机名设定数据
[DNSserver]:可以使用非 /etc/resolv.conf 的 DNS 服务 IP 来查询。
### 示例
$ host www.baidu.com
www.baidu.com has address 39.156.66.14 # 百度的真实的 IP 地址
www.baidu.com has address 39.156.66.18
www.baidu.com is an alias for www.a.shifen.com.
$ host -a www.baidu.com
Trying "www.baidu.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28819
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.baidu.com. IN ANY
;; ANSWER SECTION:
www.baidu.com. 949 IN CNAME www.a.shifen.com.
Received 58 bytes from 114.114.114.114#53 in 193 ms
$ host www.baidu.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 39.156.66.14
www.a.shifen.com has address 39.156.66.18
www.a.shifen.com is an alias for www.wshifen.com.
### nslookup 可以根据 IP 地址寻找主机名
nslookup 114.114.114.114
114.114.114.114.in-addr.arpa name = public1.114dns.com.
Authoritative answers can be found from:
telnet
telnet hostname [port] port 端口可选项,默认 23 端口 telnet IP [port] telnet 192.168.91.111 Trying 192.168.91.111... telnet: connect to address 192.168.91.111: Connection refused # 这种是拒绝连接 telnet 192.168.222.5 22 Trying 192.168.222.5... Connected to 192.168.222.5. Escape character is '^]'. SSH-2.0-OpenSSH_7.4 # 这种是连接成功
nmap
# 检测 22 端口是否开放 nmap 192.168.222.4 -p 22 | grep open | wc -l # 开放返回 1,不开放返回 0 # 进行 ping 扫描,打印出对扫描做出响应的主机 nmap -sP 192.168.222.0/24 Starting Nmap 6.40 ( http://nmap.org ) at 2023-03-16 17:23 CST Nmap scan report for 192.168.222.1 Host is up (0.00048s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.222.2 Host is up (0.00011s latency). MAC Address: 00:50:56:F3:CE:9B (VMware) Nmap scan report for k8s-s01 (192.168.222.4) Host is up (0.00020s latency). MAC Address: 00:0C:29:4A:C1:A5 (VMware) Nmap scan report for 192.168.222.254 Host is up (0.000072s latency). MAC Address: 00:50:56:E6:A2:50 (VMware) Nmap scan report for k8s-m (192.168.222.3) Host is up. Nmap done: 256 IP addresses (5 hosts up) scanned in 2.71 seconds # 检测目标主机开放了那些端口 nmap -PS 192.168.222.4 Starting Nmap 6.40 ( http://nmap.org ) at 2023-03-16 17:28 CST Nmap scan report for k8s-s01 (192.168.222.4) Host is up (0.00045s latency). Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh 514/tcp open shell 8080/tcp open http-proxy 50000/tcp open ibm-db2 MAC Address: 00:0C:29:4A:C1:A5 (VMware) Nmap done: 1 IP address (1 host up) scanned in 1.63 seconds
wget [option] src
--http-user=username
--http-password=password
curl 命令的使范例
# 检测本机是否能够到达目的网站
curl www.baidu.com
# 保存访问的网页
curl -o baidu.html www.baidu.com
curl -o 文件名 url
# 保存网页中的文件,后面的 url 一定奥具体到某个文件
curl -O www.baidu.com/a.jpg
# 测试网页的返回值
curl -o /dev/null -s -w %{http_code} www.baidu.com
# 指定代理服务器
curl -x localhsot:80 www.test.com
curl -x url:port url # 经常使用这个命令来测试自己建的网页是否成功
# 返回头文件
curl -x localhost:80 www.test.com/test.html --head
### tcpdump
tcpdump [-AennqX] [-i 接口] [-w 存储文件名] [-c 次数] \
[-r 文件名] [所获取的封包数据格式]
-A:封包内容以 ASCII 显示,通常用来捕捉 www 的网页封包资料。
-e:使用数据链路层(OSI 第二层)的 MAC 封包数据来显示
-nn:不把`端口`解析成的应用层协议
-n:不把 `ip` 解析成主机名
-q:仅列出较为简短的封包信息,每一行的内比较精简
-X:可以列出十六进制以及 ASCII 的封包内容,对于监听封包内容很有用
-i:`后面接要监听的网络接口(网卡),例如 eth0 lo 等`
-w:后面接`文件名`,将监听的封包数据保存到文件中
-r:后面接`文件名`,将 -w 保存的文件内容读取出来
-c:监听的` 封包数`,如果没有这个参数 tcpdump 会一直监听
-s:不把`随机序列`和`确认序列`解析成绝对值
所欲获取的封包数据格式:我们可以专门针对某些通讯协议或者是 IP 来源进行封包获取
### 实例
# 监听目标端口 22 去往本地 ens33 网卡的信息
tcpdump -vnni ens33 -c 3 dst port 22
# 监听源端口 22 去往本地 ens33 网卡的信息
tcpdump -vnni ens33 -c 3 src port 22
# 监听协议为 icmp 去往本地 ens33 网卡的信息
tcpdump -nni ens33 -c 3 proto \\icmp
# 监听源主机为 192.168.222.4 的信息
tcpdump -nni ens33 -c 3 src host 192.168.222.4
#抓取所有经过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)))'
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version
wget https://dl.halo.run/release/halo-1.4.2.jar
java -jar halo-1.4.2.jar
常见应用层协议
FTP 21/20 明文协议,文件传输协议,基于TCP
TFTP 69 简单文件传输协议,基于UDP
SSH 22 安全外壳协议,远程连接,加密
Telnet 23 明文协议,远程连接
SNMP 161/162 简单网络管理协议,基于UDP
SMTP 25 简单邮件传输协议,基于TCP,邮件服务端口
POP3 110 接受邮件端口。
HTTP 80 www服务端口,超文本传输协议
HTTPS 443 加密的www端口,超文本传输安全协议
DHCP 67/68/546 动态主机设置协议,C(67),S(68),546(v6)
远程桌面 3389
mysgl 3306
oracle 1521
rsync 873