计算机网络和Linux网络

news2024/11/17 20:38:33

计算机网络和Linux网络

计算机网络概论

什么是计算机网络

  • 计算机网络(结构上)

    • 由节点(主机、网络交换设备设备)、边(通信设备)、协议构成
    • 协议:对等层的实体在通讯过程中应该遵守的规则的集合,
      • 包括语法、语义、时序、动作
  • 计算机网络

    • 分布式应用以及为分布式应用提供通讯服务的基础设施。
    • 分布式应用是网络存在的理由

网络边缘

  • 网络结构

    • 网络边缘
      • 主机、应用程序(客户端、服务端)
    • 网络核心
      • 路由器、交换机
    • 接入网
      • 有线或者无线通信
  • 网络边缘的服务模式

    • 客户端/服务器模式
      • 客户端向服务器发送请求,服务器响应客户端的请求
    • 对等模式(peer-peer)
      • 互为对方的客户端和服务器
  • 面向连接服务

    • TCP 协议
      • 特点:可靠、按顺序的传输数据
      • 功能:流量控制(通信双方会协调好传输速度)、拥塞控制(实时监控通信链路是否堵塞)
      • 应用:HTTP、ftp、telnet(远程登录)、SMTP
    • 面向连接服务只是网络边缘只是能够确保可靠通信,对于网络核心和接入网不做要求。
  • 无连接的服务

    • UDP 协议
      • 特点:不可靠、反应速度快
      • 应用:流媒体、远程电话、DNS

网络核心

  • 功能:数据交换

  • 线路交换:

    • 为呼叫预留端到端的资源(链路带宽、交换能力)
    • 特点:专用资源不共享、保证性能、要求建立呼叫连接
    • 网络资源被分成片:
      • 频分(FDM):将可用于通信的频段分成若干的小段分给用户独享
      • 时分(TDM):用户独享专属自己的时间间隔
      • 波分(WDM):将可用于通信的波段分成若干的小段分给用户独享
    • 电路交换不适合计算机之间的通信
      • 连接时间长
      • 计算机之间的通信有突发性,如果使用线路交换则浪费的片多
      • 可靠性不高
  • 分组交换

    • 带宽不分片、数据分成一个个分组(packet),使用存储转发的方式进行通信。
      • 存储的目的是不耽误下一跳给别人使用。
    • 采用统计多路复用:时间段的分片不是固定的(因为不确定什么时间有用户使用这个链路)
  • 存储转发的连接按照有无网络层连接

    • 数据报
      • 在通信之前,无须建立起一个连接,有数据就传输
      • 每个分组都携带了目标服务器的完整地址,分组的目标地址决定下一跳(分组独立路由)
    • 虚电路
      • 每个分组都带标签(虚电路标识),标签决定下一跳
      • 在呼叫建立时决定路径,在整个呼叫中路径保持不变
      • 路由器维持每个呼叫的状态信息

网络基础硬件介绍

  • 交换机:在一个网络中实现多台主机之间的通讯,一台交换机所连接的所有主机构成网络,成为局域网
    • 实现通讯
      • 主机之间要有相应的 mac 地址(物理地址),由 12 位 16 进制数组成
      • 利用交换机进行通讯,有时需要广播的方式
        • 广播的产生有时会影响主机的性能
      • 补充:通讯的过程一定是有去有回的
  • 路由器:实现不同局域网之间的通讯
    • 实现通讯:
      • 主机上要有相应的 IP 地址(逻辑地址)
      • 需要借助路由器中的路由表实现通信,路由表是由网段信息和接口信息一一对应的表
        • 路由表生成方式
          • 利用直连网络环境自动生成
          • 利用手工配置方式(静态路由配置)
          • 利用路由协议动态生成(动态路由配置)
        • 网关:一个主机想访问其他网络主机的必经之路
        • 路由器的接口:网关接口
        • 路由器的地址:网关地址

网络架构设计方法(网络拓扑)

  • 三个层次规划网络拓扑
    • 核心层:路由器(网关接口) 实现和外网通讯 冗余能力(主备)
    • 汇聚层:交换机(三层交换机) 冗余能力(主备) 策略控制能力
    • 接入层:交换机(二层交换机)

分组延时、丢失和吞吐量

  • 四种分组延时

    • 节点处理延时
      • 检查 bit 级差错、检查分组首部和决定将分组导向何处
    • 排队延时
      • 路由器的拥塞程度
    • 传输延时
      • 存储转发延时
    • 传播延时
  • 分组丢失

    • 原因:链路队列缓冲区容量有限
  • 吞吐量

    • 在源端和目标端之间的传输速率

网站页面访问流程

  1. 客户端 浏览器输入完网址信息点击回车
  2. 客户端 完成域名解析过程
  3. 客户端 直接访问相应的网站服务器 — 建立 TCP 的三次握手
  4. 客户端 访问网站服务器 — 发送 HTTP 请求报文
  5. 服务端 响应客户端的请求 — 回复 HTTP 响应报文
  6. 客户端 浏览器看到网站页面
  7. 客户端 结束访问网站过程 — 完成 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

封装和解封装

image-20230310200636087

各层次的协议数据单元

  • 应用层:报文(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状态
    0011.1.1.1802.2.2.280
  • 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 + 传输时间

image-20230310222122714

HTTP 请求报文

image-20230310224104444

提交表单输入

  • post 方式:
    • 网页通常包含表单输入
    • 包含在实体(entity body)中的输入被提交到服务器
  • URL 方式
    • 方法:GET
    • 输入通过请求行的 URL 字段上载

HTTP 请求类型

  • GET
    • 请求信息报文
  • POST
    • 发送信息报文
  • HEAD
    • 要求服务器在响应报文中不包含请求对象
  • PUT 1.1
    • 将实体主体中的文件上传到 URL 字段规定的路径
  • DELETE 1.1
    • 删除 URL 字段规定的文件

HTTP 响应报文

image-20230311084413433

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 报文格式

image-20230311202600678

UDP 存在的意义

  • 不建立连接(会增加延时 )
    • 简单:在发送端和接收端没有连接状态
    • 报文段的头部很小(开销小)
    • 没有拥塞控制和流量控制:
      • UDP可以尽可能快的发送报文段

UDP 校验和

  • 目的:检测在被传输报文段中的差错 (如比特反转)
  • 发送方:
    • 将报文段的内容视为16 比特的整数
      • 校验和:报文段的加法和(1的补运算)
    • 发送方将校验和放在 UDP 的校验和字段
  • 接收方:
    • 计算接收到的报文段的校验和
    • 检查计算出的校验和与校验和字段的内容是否相等:
      • 不相等检 -> 测到差错
      • 相等 -> 没有检测到差错 ,但也许还是有差错(残存错误)

可靠数据传输的原理

  • Reliable Data Transmission RDT

TCP

  • MTU:最大传输单元 1500字节
  • MSS:1460 字节(去掉了 20字节的 tcp 头部和 20 字节的 IP 头部)

TCP 报文段结构

image-20230312114138807

  • 序号:报文段数据字段首字节的序号
  • 确认号:主机正在等待的数据的下一个字节的序号
  • A:即ACK,若为 1 确认号有效,为 0 确认号无效
  • PSH:为1表示是带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
  • RST:为1表示出现严重差错。可能需要重现创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。
  • SYN:为1表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步
    • syn=1 && ack=1,表明这是一个连接请求报文段
  • FIN: 为1 表示发送方没有数据要传输了,要求释放连接

image-20230312164433137

TCP 三次握手

image-20230313194815636

TCP 三次握手状态

image-20230314101818749

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 四次挥手

image-20230313195331258

  • 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 执行过程

  1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的
  2. 如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则
  3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规呗则,向下进行匹配,直到匹配默认规则得到明确的阻上还是通过。
  4. 防火墙的默认规则是所有规则都匹配完才会匹配的。

iptables 的四表五链

image-20230317201226057

  • 四表:rawmanglenatfilter
  • 五链:PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
  • filter
    • 实现防火墙功能,屏蔽或准许端口 ip
  • nat
    • Network Address Translation 网络地址转换
      • 实现端口映射或 IP 映射

用前准备

# 安装管理软件
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-网络工程师-易混淆知识汇总

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

chatgpt赋能python:Python编程:如何隐藏输入以保护信息安全?

Python编程&#xff1a;如何隐藏输入以保护信息安全&#xff1f; 随着数字化时代的到来&#xff0c;人们越来越多地依赖于互联网和技术设备进行通信和交易。然而&#xff0c;信息安全成为越来越大的问题&#xff1a;黑客和其他恶意分子通过各种手段获取和利用个人信息。为保障…

【瑞萨RA_FSP】GPT—— PWM功能详解

文章目录 一、GPT比较匹配功能详解1. 锯齿波PWM模式&#xff08;普通PWM模式&#xff09;2. 三角波PWM模式1&#xff08;波谷32位传输&#xff09;3. 三角波PWM模式2&#xff08;波峰和波谷32位传输&#xff09;4. 三角波PWM模式3&#xff08;波谷64位传输&#xff09;5. 设置死…

【随机种子初始化】一个神经网络模型初始化的大坑

1 问题起因和经过 半年前写了一个模型&#xff0c;取得了不错的效果&#xff08;简称项目文件1&#xff09;&#xff0c;于是整理了一番代码&#xff0c;保存为了一个新的项目&#xff08;简称项目文件2&#xff09;。半年后的今天&#xff0c;我重新训练这个整理过的模型&…

【C数据结构】带头双向循环链表_HDList

目录 带头双向循环链表_HDList 【1】链表概念 【2】链表分类 【3】带头双向循环链表 【3.1】带头双向循环链表数据结构与接口定义 【3.2】带头双向循环链表初始化 【3.3】带头双向循环链表开辟节点空间 【3.4】带头双向循环链表销毁 【3.5】带头双向循环链表头插 【3…

【C数据结构】带头单向非循环链表_HList

目录 带头单向非循环链表_HList 【1】链表概念 【2】链表分类 【3】有头单向非循环链表 【3.1】非循环链表数据结构与接口定义 【3.2】带头单向非循环链表初始化 【3.3】带头单向非循环链表释放空间 【3.4】带头单向非循环链表创建节点 【3.5】带头单向非循环链表头插…

HTML学习(二)

视频 <video width"320" height"240" controls> <source src"movie.mp4" type"video/mp4"> <source src"movie.ogg" type"video/ogg"> </video> 音频 <audio controls> <…

C++【AVL树】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 16.11.17 文章目录 &#x1f307;前言&#x1f3d9;️正文1、认识AVL树1.1、AVL树的定义 2、AVL树的插入操作2.1、抽象图2.2、插入流程…

控制层调用接口的http请求封装

目录 0.碎碎念1.controller层2.util层3.测试3.1中间层调用GET请求3.2中间层调用POST请求 0.碎碎念 因为只是为了写这个帮助类&#xff0c;解耦&#xff0c;不敢拿已经写了一堆的代码改&#xff0c;就单独拆了个项目出来&#xff0c;持久层全是mybatisplus生成的。     所以…

Kafka源码解析之索引

Kafka源码解析之索引 索引结构 Kafka有两种类型的索引&#xff1a; TimeIndex: 根据时间戳索引&#xff0c;可以通过时间查找偏移量所在位置&#xff0c;目录下以.timeindex结尾Index: 根据偏移量索引&#xff0c;.index结尾 构建索引时机 由log.index.interval.bytes 参…

3. redis cluster集群运维与核心原理剖析

分布式缓存技术Redis 1. Redis集群方案比较2. Redis高可用集群搭建 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 1、哨兵集群与Redis Cluster架构异同 2、Redis高可用集群快速实…

2023/6/18总结

JS 在document.querySelectorAll(CSS选择器) 选到的集合并没有pop()和push()等数组的方法。是一个伪数组。 如果想要得到里面的每一个对象&#xff0c;需要用for遍历获得 document.getElementById(id名称) 根据id获取一个元素 document.getElementsByTagName(标签名字) 根…

Css面试题:css文字隐藏

文章目录 文字隐藏单行文字隐藏多行文字隐藏基于高度设置多行文字隐藏基于行数设置多行文字隐藏 文字隐藏 单行文字隐藏 主要是通过overflow&#xff0c;text-overflow&#xff0c;white-space三个属性实现。 overflow&#xff1a;visible|hidden|auto|scroll|inherit&#…

【c语言】-- 操作符汇总

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来学习数组。 让我们开启c语言学习之旅…

简单认识web与http协议

文章目录 web基础域名概述DNS&#xff08;Domain Name System域名系统&#xff09; 域名空间结构 域名实际用法 2. 网页的概念2.1 网页&#xff08;HTTP/HTTPS&#xff09;HTML 概述HTML超文本标记语言 HTML文档的结构头标签中常用标签内容标签中常用标签Web概述具体组成web的主…

chatgpt赋能python:Python如何创建窗口——从入门到精通

Python如何创建窗口——从入门到精通 Python是一种高级编程语言&#xff0c;它的易读性和清晰简洁的语法使它成为许多人喜欢学习的编程语言之一。Python的一个主要特色是其丰富的库和模块。在本文中&#xff0c;我们将讨论如何使用Python创建一个窗口&#xff0c;并在其中添加…

【力扣刷题 | 第十一天】

前言&#xff1a; 我将会利用几天把树的经典例题都刷完&#xff0c;希望我可以坚持下去。 226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 解题思路&#xff1a;我们交换每一…

C语言之运算符用法(补充前面运算符中的不足)

设定&#xff1a;int X20,Y10 1、算术运算符 注&#xff1a;自增和自减运算符只能用于变量&#xff0c;不可用于常量或表达式。另&#xff0c;X与X是不同的(–亦同)。以语句a[x]100;为例&#xff1a; a[X]100;执行之后得到&#xff1a;a[20] 100、X 21。//即&#xff0c;先执行…

Windows10下超详细Mysql安装

目录 0. 前言1. 下载mysql2. 开始安装3. 验证安装4. 环境变量配置 0. 前言 Mysql简介&#xff1a; MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用SQL&#xff08;结构化查询语言&#xff09;语言进行数据的存储和访问。MySQL的设计…

git版本管理入门(本地/远程仓库,常用命令)

目录 git简介 安装git 配置SSH key Linux环境下需要命令生成ssh key 本地git管理 多人协作流程 追加 重新提交 git命令 git commit本地和git push远程 git stash和git stash pop暂存 git status查看修改哪些了文件​ git diff 查看修改前后的差异 git log查看提交…