计算机网络和Linux网络
计算机网络概论
什么是计算机网络
-
计算机网络(结构上)
- 由节点(主机、网络交换设备设备)、边(通信设备)、协议构成
- 协议:对等层的实体在通讯过程中应该遵守的规则的集合,
- 包括语法、语义、时序、动作
-
计算机网络
- 分布式应用以及为分布式应用提供通讯服务的基础设施。
- 分布式应用是网络存在的理由
网络边缘
-
网络结构
- 网络边缘
- 主机、应用程序(客户端、服务端)
- 网络核心
- 路由器、交换机
- 接入网
- 有线或者无线通信
- 网络边缘
-
网络边缘的服务模式
- 客户端/服务器模式
- 客户端向服务器发送请求,服务器响应客户端的请求
- 对等模式(peer-peer)
- 互为对方的客户端和服务器
- 客户端/服务器模式
-
面向连接服务
- TCP 协议
- 特点:可靠、按顺序的传输数据
- 功能:流量控制(通信双方会协调好传输速度)、拥塞控制(实时监控通信链路是否堵塞)
- 应用:HTTP、ftp、telnet(远程登录)、SMTP
- 面向连接服务只是网络边缘只是能够确保可靠通信,对于网络核心和接入网不做要求。
- TCP 协议
-
无连接的服务
- UDP 协议
- 特点:不可靠、反应速度快
- 应用:流媒体、远程电话、DNS
- UDP 协议
网络核心
-
功能:数据交换
-
线路交换:
- 为呼叫预留端到端的资源(链路带宽、交换能力)
- 特点:专用资源不共享、保证性能、要求建立呼叫连接
- 网络资源被分成片:
- 频分(FDM):将可用于通信的频段分成若干的小段分给用户独享
- 时分(TDM):用户独享专属自己的时间间隔
- 波分(WDM):将可用于通信的波段分成若干的小段分给用户独享
- 电路交换不适合计算机之间的通信
- 连接时间长
- 计算机之间的通信有突发性,如果使用线路交换则浪费的片多
- 可靠性不高
-
分组交换
- 带宽不分片、数据分成一个个分组(packet),使用存储转发的方式进行通信。
- 存储的目的是不耽误下一跳给别人使用。
- 采用统计多路复用:时间段的分片不是固定的(因为不确定什么时间有用户使用这个链路)
- 带宽不分片、数据分成一个个分组(packet),使用存储转发的方式进行通信。
-
存储转发的连接按照有无网络层连接
- 数据报
- 在通信之前,无须建立起一个连接,有数据就传输
- 每个分组都携带了目标服务器的完整地址,分组的目标地址决定下一跳(分组独立路由)
- 虚电路
- 每个分组都带标签(虚电路标识),标签决定下一跳
- 在呼叫建立时决定路径,在整个呼叫中路径保持不变
- 路由器维持每个呼叫的状态信息
- 数据报
网络基础硬件介绍
- 交换机:在一个网络中实现多台主机之间的通讯,一台交换机所连接的所有主机构成网络,成为局域网
- 实现通讯
- 主机之间要有相应的 mac 地址(物理地址),由 12 位 16 进制数组成
- 利用交换机进行通讯,有时需要广播的方式
- 广播的产生有时会影响主机的性能
- 补充:通讯的过程一定是有去有回的
- 实现通讯
- 路由器:实现不同局域网之间的通讯
- 实现通讯:
- 主机上要有相应的 IP 地址(逻辑地址)
- 需要借助路由器中的路由表实现通信,路由表是由网段信息和接口信息一一对应的表
- 路由表生成方式
- 利用直连网络环境自动生成
- 利用手工配置方式(静态路由配置)
- 利用路由协议动态生成(动态路由配置)
- 网关:一个主机想访问其他网络主机的必经之路
- 路由器的接口:网关接口
- 路由器的地址:网关地址
- 路由表生成方式
- 实现通讯:
网络架构设计方法(网络拓扑)
- 三个层次规划网络拓扑
- 核心层:路由器(网关接口) 实现和外网通讯 冗余能力(主备)
- 汇聚层:交换机(三层交换机) 冗余能力(主备) 策略控制能力
- 接入层:交换机(二层交换机)
分组延时、丢失和吞吐量
-
四种分组延时
- 节点处理延时
- 检查 bit 级差错、检查分组首部和决定将分组导向何处
- 排队延时
- 路由器的拥塞程度
- 传输延时
- 存储转发延时
- 传播延时
- 节点处理延时
-
分组丢失
- 原因:链路队列缓冲区容量有限
-
吞吐量
- 在源端和目标端之间的传输速率
网站页面访问流程
- 客户端 浏览器输入完网址信息点击回车
- 客户端 完成域名解析过程
- 客户端 直接访问相应的网站服务器 — 建立 TCP 的三次握手
- 客户端 访问网站服务器 — 发送 HTTP 请求报文
- 服务端 响应客户端的请求 — 回复 HTTP 响应报文
- 客户端 浏览器看到网站页面
- 客户端 结束访问网站过程 — 完成 TCP 四次挥手过程
协议层次及服务模型
-
缩写名词
- DU(data unit):数据单元
- SAP(service access point):服务访问点
- IDU(interface data unit):接口数单元
- SDU(service data unit):服务数据单元
- PDU(protocol data unit):协议数据单元
-
上层的数据单元传向下层
- 服务数据单元要在外面包裹一层接口控制信息形成接口数据单元,然后通过服务访问点,在下层分开成服务数据单元和接口控制信息。服务数据单元在外面包裹头部信息称为协议数据单元。
- 即通过 SAP 的只能是 IDU
- IDU = ICI + SDU
- PDU = SDU + Header
- 服务数据单元要在外面包裹一层接口控制信息形成接口数据单元,然后通过服务访问点,在下层分开成服务数据单元和接口控制信息。服务数据单元在外面包裹头部信息称为协议数据单元。
-
服务和访问点
- 服务:底层实体向上层实体提供他们之间的通信能力
- 原语(primitive):上层使用下层服务的形式,高层使用低层提供的服务,以及低层向高层提供服务都是通过服务访问原语来进行交互的—形式
- 服务访问点(SAP):上层使用下层提供的服务通过层间的接口–地点
Internet 协议栈
- 应用层: 网络应用
- 为人类用户或者其他应用进程提供网络应用服务
- FTP, SMTP, HTTP,DNS
- 传输层: 主机之间的数据传输
- 在网络层提供的端到端通信基础上,细分为进程到进程,将不可靠的通信变成可靠地通信
- TCP, UDP
- 网络层: 为数据报从源到目的选择路由
- 主机主机之间的通信,端到端通信,不可靠
- IP, 路由协议
- 链路层: 相邻网络节点间的数据传输
- 点到点通信,可靠或不可靠
- 点对对协议
- 物理层: 在线路上传送bit
封装和解封装
各层次的协议数据单元
- 应用层:报文(message)
- 传输层:报文段(segment)
- TCP段,UDP数据报
- 网络层:分组packet(如果无连接方式:数据报 datagram)
- 数据链路层:帧(frame)
- 物理层:位(bit)
OSI 7层模式
- 应用层 — 程序接口规范
- 表示层 — 数据转换加密、压缩
- 会话层 — 控制网络连接的建立或终止
- 传输层 — 保证数据传输的的可靠性
- 网络层 — 可以实现通过路由找到目标网络 – 三层设备 – 路由能力
- 数据链路层 — 通过交换找打真正的目标主机 – 二层设备 – 交换能力
- 物理层 — 指定一些网络物理设备标准
根据 OSI 七层模型进行网络排错
- 应用层:网站是否提供服务
- get/cur1访问,浏览器访问
- 应用程序进程启动
- 端口开启
- 传输层:防火墙是否阻挡。
- 网络层:IP,网关
应用层
应用层协议原理
进程通信
进程:在主机上运行的应用程序
区分进程
- 主机 IP 地址、tcp/udp 协议、端口号 确定这三者才能区分一个进程。
穿过的层间信息需要什么
- 层间接口必须携带
报文
、双方的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、本端口;
- 在传输报文时,必须提供对方的 ip 和 port,接收报文时,传输层也得提供对方的 ip 和 port
套接字
- 进程向套接字发送报文或者从套接字接收文
- 应用层和传输层之间的门户
应用层如何实现应用
- 定义应用层协议:报文格式,解释,时序等
- 编制程序,通过API调用网络基础设施提供通信服务传报文,解析报文,实现应用时序等
实体
- 实体是实现协议的软件模块或硬件模块(运行中的软件)
传输层提供的服务
-
UDP 服务
- 不可靠数据传输
- 能够区分不同的进程
- 应用能够按照设定的速度 发送数据
- 不提供的服务:可靠, 流量控制、拥塞控制、 时间、带宽保证、建立连接
-
TCP 服务
- 可靠的传输服务
- 流量控制:发送方不会淹没接收方
- 拥塞控制:当网络出现拥塞时,能抑制发送方
- 不能提供的服务:时间保证、最小吞吐保证和安全
- 面向连接:要求在客户端进程和服务器进程之间建
立连接
web 和 HTTP
URL 和 URI
-
URL:统一资源定位符
-
URI:统一资源标识符
-
如何区分:
# www.bilibili.com / video/BV1xJ41197iY? # URL URI
协议名:// [用户:口令@] 主机名 [:端口] /路径/[;参数][?查询]#片段
https :// www.bing.com /search?q=url
HTTP 概况
- HTTP 超文本传输协议
- 使用 TCP 协议
- 客户发起一个与服务器的 TCP连 (建立套接字) ,端口号为 80
- 服务器接受客户的TCP连接
- 在浏览器(HTTP客户端) 与Web服务器(HTTP服 务器 server)交换HTTP 报文 (应用层协议报文)
- TCP连接关闭
- HTTP 是无状态的
- 服务器并不维护关于客户的任何信息,能够支持更多的客户端
HTTP 连接
- 非持久 HTTP
- 最多只有一个对象在 TCP 连接上发送
- HTTP/1.0 使用非持久连接
- 持久 HTTP
- 多个对象可以在一个 TCP 连接上传输
- HTTP/1.1 默认使用持久连接
响应时间模型
- 往返时间 RTT(round-trip time)
- 一个小的分组从客户端到服务器,在回到客户端的时间(传输时间忽略)
- 响应时间:
- 一个 RTT 用来发起 TCP 连接
- 一个 RTT 用来 HTTP 请求并等待 HTTP 响应
- 文件传输时间
- 所以响应时间 = 2RTT + 传输时间
HTTP 请求报文
提交表单输入
- post 方式:
- 网页通常包含表单输入
- 包含在实体(entity body)中的输入被提交到服务器
- URL 方式
- 方法:GET
- 输入通过请求行的 URL 字段上载
HTTP 请求类型
- GET
- 请求信息报文
- POST
- 发送信息报文
- HEAD
- 要求服务器在响应报文中不包含请求对象
- PUT 1.1
- 将实体主体中的文件上传到 URL 字段规定的路径
- DELETE 1.1
- 删除 URL 字段规定的文件
HTTP 响应报文
HTTP 响应状态码
200 # 访问成功
301 # 永久跳转
302 # 暂时跳转
400 # 请求不能被服务器解读
403 # 禁止访问(比如公司内外)
404 # 服务器找不到对应的网页资源
500 # 内部服务器错误,例如开启 selinux
502 # 坏的网关,可能是反向代理服务器下面的节点有故障
503 # 服务当前不可用,服务器过载或反向代理服务器下没有可以提供的服务节点
504 # 网关超时,服务器过载所导致
505 # HTTP 的版本不支持
HTTP 有状态服务
- cookie 用来维持客户端和服务端的有状态服务。
- 当陌生用户向服务器发送请求时。
- 服务器的 HTTP 响应报文中就携带者一个 cookie 的首部行,并保存到服务器
- 用户接收 cookie 并保存起来
- 用户以后的每一次请求都携带者 cookie 用于维持有状态服务。
DNS
- 解决 IP地址和域名的映射问题
DNS 记录
- 资源记录
- 作用:维护域名和 IP 地址(其他)的映射关系
- 位置:Name Server 的分布式数据库中
- 格式:RR格式
- domain name:域名
- TTL:time to live 生存时间(权威,缓冲记录)
- class 类别:对于 Internet 值为 IN
- value 值:可以是数字,域名或 ASCII 串
- type 类型:资源记录的类型
- type=A:domain name 对应值为主机,value 对应值 IP 地址
- type=NS:domain name 对应值为域名,value 对应值为该域名的权威服务器域名
- type=CNAME:domain name 对应的值为规范名字的别名,value 对应值为规范名字
- type=MX:value 为 name 所对应的邮件服务器名字
IP 查询方法
- 当本地域名服务器没有缓存我们要查询的域名时
- 递归查询
- 就开始从域名根服务器往上一级一级的查询
- 迭代查询
- 先向跟服务器查询,根服务器没有,但是它可以给我们它下一级服务器地址,让我们去访问它的下一级服务器;循环往复
- 混合查询
- 由于迭代查询对根服务器的压力太大了,而迭代查询又太慢
- 客户端到根服务器是迭代查询,客户端向下一级服务器是递归查询。
- 递归查询
传输层
传输层概述
传输服务和协议
- 为运行在不同主机上的应用进程提供
逻辑通信
- 传输协议运行在端系统
- 发送方:将应用层的报文分成
报文段
,然后传递给网络层 - 接收方:将
报文段重组成报文
,然后传递给应用层
- 发送方:将应用层的报文分成
- 有多个传输层协议可供应用选择
- Internet: TCP 、UDP
传输层和网络层
- 网络层服务: 主机之间的通讯
- 传输层服务:进程之间的逻辑通信
- 对网络层的服务进行增强
- 数据丢失、顺序混乱、加密
- 将网络层的数据包细化
- 对网络层的服务进行增强
Internet 传输层协议和功能
- 可靠的、保序的传输: TCP
- 多路复用、解复用
- 拥塞控制
- 流量控制
- 建立连接
- 不可靠、不保序的传输:UDP
- 多路复用、解复用
- 没有为尽力而为的 IP 服务添加更 多的其它额外服务
- 都不提供的服务:
- 延时保证
- 带宽保证
多路复用/解复用
- 多路复用:
- 将应用层传来的数据和信息进行封装
- tcp 协议:信息就是 socket
- udp 协议:信息就是 socket 、目标 ip、目标端口
- 封装后的报文段为:头 + 数据
- 头信息:目标端口和源端口
- 将应用层传来的数据和信息进行封装
- 解复用:
- 就是将封装的报文段分成数据和信息传送个上级
UDP
- user datagram protocol 用户数据报协议
UDP 报文格式
UDP 存在的意义
- 不建立连接(会增加延时 )
- 简单:在发送端和接收端没有连接状态
- 报文段的头部很小(开销小)
- 没有拥塞控制和流量控制:
- UDP可以尽可能快的发送报文段
UDP 校验和
- 目的:检测在被传输报文段中的差错 (如比特反转)
- 发送方:
- 将报文段的内容视为16 比特的整数
- 校验和:报文段的加法和(1的补运算)
- 发送方将校验和放在 UDP 的校验和字段
- 将报文段的内容视为16 比特的整数
- 接收方:
- 计算接收到的报文段的校验和
- 检查计算出的校验和与校验和字段的内容是否相等:
- 不相等检 -> 测到差错
- 相等 -> 没有检测到差错 ,但也许还是有差错(残存错误)
可靠数据传输的原理
- Reliable Data Transmission RDT
TCP
- MTU:最大传输单元 1500字节
- MSS:1460 字节(去掉了 20字节的 tcp 头部和 20 字节的 IP 头部)
TCP 报文段结构
- 序号:报文段数据字段首字节的序号
- 确认号:主机正在等待的数据的下一个字节的序号
- A:即ACK,若为 1 确认号有效,为 0 确认号无效
- PSH:为1表示是带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
- RST:为1表示出现严重差错。可能需要重现创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。
- SYN:为1表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步
- 当
syn=1 && ack=1
,表明这是一个连接请求报文段
- 当
- FIN: 为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 四次挥手
- TCP 四次挥手
- 客户端发送请求断开连接信息
established --- fin_wait
- 服务端接收断开连接请求,并进行确认
established --- close_wait
- 客户端接收到了确认信息
fin_wait1 --- fin_wait2
- 服务端发送 ack 和 fin 字段
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 执行过程
- 防火墙是层层过滤的,实际是按照配置规则的
顺序从上到下
,从前到后进行过滤的 - 如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规呗则,向下进行匹配,直到匹配默认规则得到明确的阻上还是通过。
- 防火墙的默认规则是所有规则都匹配完才会匹配的。
iptables 的四表五链
- 四表:
raw
、mangle
、nat
、filter
- 五链:
PREROUTING
、INPUT
、FORWARD
、OUTPUT
、POSTROUTING
filter
表- 实现防火墙功能,屏蔽或准许端口 ip
nat
表- Network Address Translation 网络地址转换
- 实现端口映射或 IP 映射
- Network Address Translation 网络地址转换
用前准备
# 安装管理软件
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 地址
- MAC 地址就是网卡设备的唯一地址,是网卡在局域网内的唯一标识
- 网卡配置的是 IP 地址,找到 MAC 地址,然后进行通讯
- 通过 IP 地址找到 MAC 地址的协议是 ARP 协议。
- 网线 568B 的线序:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕
- 网线 578A 的线序:绿白、绿、橙白、蓝、蓝白、橙、棕白、棕
- 局域网内两台主机(A&B)通信过程
- A 首先向 arp 缓存中查询 B 的 MAC 地址,没有查到
- A 向局域网发送广播,请求 B 的 MAC 地址
- 广播包内容:源 IP、源 MAC 地址、目标 IP
- B 收到广播,向 arp 表中写入源 IP、源 MAC 地址。 然后向 A 进行单播自己的 MAC 地址和 IP 地址
- A 收到 B 的单播,写入 arp 表,然后向 B 发送数据。
用前准备
# 安装管理软件
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 缓存
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
跨层的命令
1. 检测网络命令
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
2.自己所在的网络是否有问题
traceroute 输出的一行代表通过一个网关,我们可以通过网关出现的速度来判断我们的网络是否有问题,如果刚开始速度特别快,则代表不是我们这边的网络问题。
traceroute [-npT] domain
-n:直接访问 ip 地址
-T:使用 tcp 访问,默认 upd
-p:后跟端口
3. 查看主机名和 IP 是否一致
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:
4. 检测端口
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
5. 从网络中下载软件包
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
6. 封包分析
### 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