网络原理知识总结

2024-01-22 14:36:17 浏览数 (3)

基础概念

网络是由通信介质将不同地理位置的计算机连接起来,实现数据交换的系统。

按使用性质分类

  • 公用网:对所有人提供服务
  • 专用网:对特定领域服务,不对公众服务。

按覆盖范围分类

  • 局域网(LAN):小距离范围内,设备数有限。
  • 广域网(WAN):距离远,覆盖广。
  • 城域网(MAN):介于局域网和广域网,
  • 范围是客观因素,会产生通信介质、协议、设备选择上的差异。

按拓扑结构分类

  • 总线型
  • 星型
  • 环型
  • 树型
  • 网状型
  • 不同拓扑结构的选择,是在传输延迟、可靠性、成本等因素上的权衡。

按网络的传输方式分类

  • 点对点:两个设备间专属通道。
  • 广播:所有设备共享信道,需要解决冲突问题。

常见概念

  • 互联网:网络与网络之间形成的庞大网络。
  • 因特网:世界上最大的互联网,基于TCP/IP协议。
  • 教育网:属于广域网 专用网
  • 以太网:局域网技术标准,总线型或星形,采用广播的传输方式。
  • 通信协议:两个或两个以上实体交换信息的规则和标准。构成要素:
    • 语义:通信内容所表达的意义。
    • 语法:通信内容的规则和结构。
    • 时序:信息交换中的时序关系,传输速率、时延、丢失处理等。

网络的性能指标

  • 速率:比特率,每秒传输的比特数。
  • 带宽:通信线路的最高传输速率。
  • 吞吐量:单位时间内通过网络的数据量,通常指实际测量。
  • 时延:数据从一端到另一端的时间。
    • 发送时延:=数据帧长度/发送速率,与传输介质和距离无关。
    • 传播时延:=信道长度/传播速率,数据在信道中传播的时间。
    • 处理时延:设备收到数据帧后,进行分析校验提取的时间。
    • 排队时延:网络设备收到数据桢后,需要排队等待处理的时间。
    • 往返时延:发送端发送数据开始到接收到确认的时间。
  • 利用率:信道有数据通过时间的百分比。
  • 网络抖动:=最大时延-最小时延,网络负载变化时,时延的变化范围。
  • 丢包率:丢失数据包占总数据包数量的百分比。

OSI 七层协议

OSI模型:开放系统互联参考模型,是 ISO 提出的标准框架。 特点:采用分层结构,每一层实现不同功能,有自己的协议。

层次划分原则

  • 各节点有相同的层次。
  • 各节点同层次功能相同。
  • 同节点相邻层次通过接口通信。
  • 同节点高层依赖底层的服务。
  • 各节点同层通过协议通信。

七层模型:物数网传会表应

  • 物理层:传输比特流,解决物理介质传输问题,屏蔽传输介质差异。
  • 数据链路层:传输桢,提供一条无差错的链路,解决差错控制和流量控制问题。
  • 网络层:实现在节点之间创建逻辑链路,解决网络与网络之间的互联问题。
  • 传输层:实现端到端传输,解决数据分段、复用、可靠传输问题。
  • 会话层:解决会话建立、维持、同步问题。
  • 表示层:定义数据格式及加解密压缩等。
  • 应用层:对应到具体应用场景的协议。

各层中继设备

  • 物理层:转发器
  • 数据链路层:网桥、交换机
  • 网络层:路由器
  • 网络层以上:网关

数据链路层

概念

链路:从一个节点到相邻节点的一段物理线路,中间没有任何其他的交换节点。 数据链路:把实现通信协议的硬件和软件加到链路上,构成数据链路。 桢:数据链路层传送的数据单元。

处理过程

  • 节点A接收网络层交下来的IP数据包添加首部和尾部封装成桢。
  • 通过数据链路发送给节点B。
  • 节点B接收桢并校验,若无差错则提取IP数据包给上层,否则丢弃。

封装成桢

  • 添加首部和尾部,进行桢定界。
  • 桢定界符,SOH首部,EOH尾部。
  • MTU,最大传输单元,桢数据部分的最大长度。

透明传输

  • 数据链路层对于上层来说是透明的,即无感知的。
  • 需解决数据中出现SOH和EOH时的转义。
  • 方法是在之前加入一个转义字符,如ESC。

差错校验

  • 通信链路可能出现比特差错。
  • 误码率EBR:错误比特数/总传输比特数。
  • CRC循环冗余校验算法,特点开销小漏检率非常低。
  • 差错校验仅能做到无差错接受,无法做到无差错传输。
  • 凡是接受的桢可以认为接近1的概率没有产生差错。

CRC

  • 收发双方约定一个生成多项式。
  • 发送方将数据结合多项式计算校验码附加到待传输数据后面发送给接收方。
  • 接收方通过多项式计算数据是否产生了误码。
  • 多项式用于构造除数,数据作为被除数补 0 后做除法运算,余数就是校验码。
  • 校验的时候再做一次除法,余数为 0 则数据正确。

差错控制

  • 问题:桢丢失、桢重复、桢失序
  • 解决方法:桢编号、确认和重传
  • 数据链路层一般情况只提供差错校验,差错控制需要上层协议提供。
  • 根据通信链路质量
    • 质量好,协议不使用确认和重传
    • 质量差,协议使用确认和重传

点对点(PPP)协议

  • 应用场景:光猫拨号上网。
  • 封装成桢:
    • 桢首尾都是 0x7E(01111110)。
    • MTU最大 1500 字节。
  • 透明传输:
    • 串行传输时采用零比特填充解决透明传输,连续5个1后填入0。
    • 并行传输时采用字节填充解决透明传输。

广播信道协议

  • 应用场景:局域网通信
  • 封装成桢:
    • 以太网通信采用 MAC 桢。
    • 包括目标地址、来源地址、类型、数据和校验码。
    • MAC帧在物理层传输时会加上前同步码和帧定界符。
    • 前同步码是7个字节的01010101,作用是使接收方时钟同步。
    • 帧定界符是 0xD5,作用是标识帧的开始。
    • MAC地址(网卡物理地址)48 位,由统一机构分配确保唯一。
    • 包括单播桢、广播桢、和组播桢。
    • 广播桢 MAC 目的地址全是 1。
总线型
  • 共享信道,存在碰撞
  • 需采用CSMA/CD协议(载波监听多点接入/碰撞检测)
    • 多点接入:多个计算机多点接入一根总线上。
    • 载波监听:在发送数据前先监听信道是否空闲。
    • 碰撞检测:发送数据时检测到总线忙则等待随机时间后再发送。
  • 只支持半双工(交替),不支持全双工。
  • 集线器作用等同总线。
  • 总线型网络已经淘汰。
交换机
  • 独享信道,不存在碰撞,支持全双工。
  • 工作原理,MAC 地址表,泛洪、转发、丢弃。
  • MAC 地址表
    • 是交换机端口和 MAC 地址的映射表。
    • 存在于内存,关机清除,开机自学习。
    • 学习过程是记录MAC 桢的源地址和端口的映射。
    • 存在老化机制防止过大,每次有数据进入则重置倒计时5分钟。
  • 泛洪过程是广播MAC 桢,转发过程是查找 MAC 地址表,转发到目的端口。
  • 多个交换机相连同样可以实现MAC 桢转发。
  • 网桥是两端口交换机。
VLAN
  • VLAN 是虚拟局域网。
  • 用于在逻辑上划分广播域,提高安全性和减少垃圾流量。
  • VLAN 内部是二层通信。
  • 不同 VLAN 之间无法二层通信,只能进行三层通信。
  • 支持 VLAN 的 MAC 桢中头部包含 VLANID,长度 12 位。

网络层

网络层的定位

  • 向上层提供无连接的、尽最大努力交付的数据报服务。
  • 分组之间无关联,不进行编号。
  • 分组可能出错、丢失、重复和失序,不保证时限。
  • 该定位的好处是硬件简单造价低廉。

网络互联

  • 三层中继设备路由器连接起来的才是网络互联。
  • 二层中继设备连接起来只是扩大一个网络。

ARP 协议

  • Address Resolution Protocol 地址解析协议
  • 在同个局域网内,根据已知 IP 地址获取 MAC 地址。
  • 源设备需要解析一个 IP 地址时发出广播桢。
  • 目的设备收到广播桢后应答单播桢,应答数据中包含目的设备的 MAC 地址。

STP 协议

  • Spanning Tree Protocal 生成树协议
  • 避免环路产生广播风暴。
  • 允许环路存在,因为可以提高网络可靠性。
  • 原理是,选举根桥,构造最小生成树,确保非根与根之间路径的唯一性和最优性。
  • 确定根桥和最小生成树指定端口后,剩余备用端口进行阻塞。

IP 地址

  • 32 位,分为网络号和主机号。
  • 分类
    • A 类 1.0.0.0-126.255.255.255,网络号 8 位,主机号 24 位。
    • B 类 128.0.0.0-191.255.255.255,网络号 16 位,主机号 16 位。
    • C 类 192.0.0.0-223.255.255.255,网络号 24 位,主机号 8 位。
    • D 类 224.0.0.0-239.255.255.255,多播地址
    • E 类 240.0.0.0-255.255.255.255,保留地址
    • 127.0.0.1 回环地址
  • 私有 IP 地址
    • A 类:10.0.0.0-10.255.255.255
    • B 类:172.16.0.0-172.31.255.255
    • C 类:192.168.0.0-192.168.255.255
    • 私有 IP 地址可以复用,极大避免了 IP 枯竭
  • 划分子网
    • 将主机号借用若干位作为子网号。
    • 子网掩码与 IP 地址进行位与运算,可以得到网络号。
    • 划分后对外仍然是一个网络。
  • CIDR 无类域间路由选择
    • 是 IP 地址分配和路由选择技术,解决 IP 地址浪费和路由表过大问题。
    • 不使用传统分类,通过网络前缀 主机号来构成 IP 地址。
    • 网络前缀表示,如 192.168.0.0/24 表示 24 位网络前缀。
    • 采用最长前缀匹配进行路由选择。

IPv4 数据报

  • 包含头部和数据
  • 头部包含固定长度 20 字节,和可变长度部分(一般不用)
  • 固定长度 20 字节中包含:
    • 0 4 位为版本号,IPv4 的值位 4(0100)
    • 4 4 位为 IP 头部长度,单位为 4 字节,最大值 15(1111)表示 60 字节
    • 8 8 位为服务类型,一般不用,值为 0
    • 16 16 位为总长度,单位为字节,不能超过 MTU
    • 32 16 位为标识,由计数器生成,用来识别那些分组属于同一个数据报
    • 48 3 位为标志,48为 MF(More Flag更多分片),49 为 DF(Dont Flag不分片)
    • 51 13 位为片偏移,单位为 8 字节,表示本分片在原数据报中的偏移
    • 64 8 位为 TTL,表示数据报在网络中的寿命,每经过一个路由器减1,为 0 将被丢弃
      • ping命令可查看 ttl
    • 72 8 位为协议,表示数据的上层协议
    • 80 16 位为首部校验和,校验头部数据,采用反码求和运算
    • 96 32 位为源 IP 地址
    • 128 32 位为目的 IP 地址

IPv6

  • IPv6 地址扩大到128 位。
  • 去除校验和,减少处理时间。
  • 去除可选字段,变成扩展首部。
  • 支持即插即用,不需要 DHCP 协议。
  • 只能主机分片,不支持路由器分片。

ICMP 协议

  • 互联网控制消息协议。
  • 用于在 IP 网络中传递控制消息,诊断网络连接问题、跟踪路由路径等。
  • ping 和 traceroute 命令采用 ICMP 协议。

路由器

  • 至少连接两个网络,才能起到转发作用。
  • 原理,根据路由表转发:
  • 路由表
    • 包含目的网络地址和下一跳地址。
    • 下一跳地址可能是接口或者是某个 IP。
    • 默认路由:路由表查找不到时转发默认路由。
  • 路由器不会转发私有 IP 地址的数据包,无论来源或者是目的地址。
  • 路由表更新机制,包含静态和动态,动态更新通过路由协议。

自治域

  • 一组由同一组织管理运行的路由器集合。
  • 内部采用相同的路由策略。
  • 是互联网系统中的独立区域。
  • 自治域内采用 IGP 内部网关协议。
  • 自治域间采用 EGP 外部网关协议。

路由协议

  • 用于让路由器之间相互学习使得到达目标网络路径最优的协议。
  • 内部网关协议 IGP
    • RIP,路由信息协议
      • 距离=跳数
      • 允许一条路径最多 15 跳,大于视为不可达。
      • 只选择最少跳数的路径,不考虑带宽时延。
      • 原理,仅和相邻路由器交换路由表,每隔 30 秒更新一次路由表。
      • 经过一段时间收敛,所有路由器都会包含自治域内网络的最短路径。
    • OSPF,开放式最短路径优先
      • 使用带宽决定路径成本。
      • 每个路由器维护自己的路由表,不交换路由表,只交换链路状态。
      • 链路发生变化时才通过泛洪向所有路由器发送信息。
      • 收敛速度非常快,小型网络在 5s 内。
  • 外部网关协议 EGP
    • BGP,边界网关协议
    • 用于在不同自治域间交换路由信息。

NAT

  • 网络地址转换,用于在公网和私网间转发数据包。
  • 分为静态 NAT 和动态 NAT。
  • 静态 NAT:公网IP与私网IP固定映射。
  • 动态 NAT:池化公网IP动态映射到私网IP。
  • 端口多路复用 PAT:一个公网IP对多个私网IP,使用端口作为索引。
  • 作用:
    • 减少占用公有 IP。
    • 隐藏内网主机,提高安全性。
  • 局限性:
    • 违反分层原则,网络层需要修改传输层的报头内容。
    • NAT设备需要维持会话,以便返回数据报能找到内网主机。

传输层

传输层定位

  • 为应用进程间提供端到端的逻辑通信,区别于网络层是主机间的逻辑通信。
  • 对报文进行差错检测。
  • 提供面向连接的 TCP 和无连接的 UDP。
  • TCP 是可靠传输,UDP 是不可靠传输。

端口

  • 用于标识进程,统一不同系统的进程标识符。
  • 端口号16位,范围:0~65535
  • 0~1023 系统保留端口,用户进程不能使用。
  • 端口分类:
    • 公认端口:0~1023,如 http 80,https 443,ssh 22 等
    • 注册端口:1024~49151,需在机构登记防止冲突。
    • 动态端口:49152~65535

UDP

  • UDP 是用户数据报协议。
  • 提供无连接的不可靠传输服务。
  • 仅在 IP数据报服务基础上增加端口和差错校验功能。
  • 优点:
    • 效率高,无需连接,首部开销小。
    • 支持广播。
    • 发送端无阻塞。
  • 应用场景:视频流传输、游戏通信等。
  • UDP 数据报头部
    • 共 8 字节,包含源端口,目的端口,长度,校验和各 2 字节。
    • 计算校验和时会增加伪首部,包含源和目的 IP 地址等。
  • 仅添加首部交由下层处理,不处理拆分合并。
  • 如果 UDP 数据报长度超过 MTU
    • 网络层IPv4,会进行拆分与合并,如果合并失败则丢弃。
    • 网络层IPv6 不支持分片,直接丢弃。
  • 数据长度一般控制在 512 内,因为互联网标准 MTU 为 576,减去 IP头部(20 到 60)和 UDP 头部综合权衡得到。

TCP

  • TCP 是传输控制协议
  • 特点:
    • 提供面向连接的可靠的双向字节流传输服务
    • 只能点对点,不支持广播
  • Socket:
    • TCP 连接的两端点抽象概念为 Socket(套接字/插口)
    • Socket = IP 端口号
可靠传输原理
  • 停止等待协议:
    • 发送方每发送一个分组就停止发送,等待对方确认。
    • 发送方每收到一个确认就发送下一个分组。
    • 存在确认丢失和迟到,需要支持超时重传和丢弃重复。
    • 缺点是信道利用率低。
  • 滑动窗口协议:
    • 发送方维持一个发送窗口,流水线发送。
    • 如果发送窗口已满,则停止发送。
    • 接收方采用累积确认。
    • 可以提高信道利用率。
    • 可以实现流量控制。
  • TCP 可靠通信原理:
    • 连接两端都有一个发送窗口和一个接收窗口。
    • 窗口大小在建立连接时协商确定。
    • 对字节的序号进行确认,确认后发送窗口才向前滑动。
TCP报文段头部
  • 固定长度 20 字节,最大 60 字节。
  • 源端口目的端口号各 16 位。
  • 序号32位,表示本报文段第一个字节的序号。
  • 确认号32位,表示期望收到对方下一个报文段的数据的第一个字节的序号。
  • 数据偏移4位,单位为4字节,表示首部长度。
  • 保留字段占6位。
  • 标志位6位:
    • URG,表明紧急指针字段有效,有高优先级的数据。
    • ACK,表明确认号字段有效。
    • PSH,表明接收方应该立即将数据推送给应用层。
    • RST,表明发送方出现严重差错,必须重新建立连接。
    • SYN,表明这是一个连接请求或连接接受报文。
    • FIN,表明发送方已经完成,要求释放连接。
  • 窗口大小16位,表示接收窗口大小。
  • 校验和16位,类似 UDP 会增加伪首部进行计算。
  • 紧急指针16位,少用。
  • 选项字段,长度可变。
    • MSS
      • 最大报文段长度,告诉对方报文段的数据最大长度。
      • 如果超过 MTU 网络层需要进行分片。
      • 如果一方不接受另一方的 MSS,则定为默认值 536,
      • 互联网MTU(576) - IP头(20) - TCP头(20)。
TCP 连接目的
  • 确认对方存在
  • 协商参数,如 MSS,窗口大小等。
三次握手建立连接
  • SYN,seq=x
  • SYN,ACK,seq=y,ack=x 1
  • ACK,seq=x 1,ack=y 1
  • 三次握手可以避免超时重传时建立错误的历史连接。
  • 异常情况:
    • 第一次握手丢失,客户端重传。
    • 第二次握手丢失,客户端和服务端都重传。
    • 第三次握手丢失,服务端超时重传,客户端已建立连接如果发送数据没有得到确认也会重传。
    • 采用指数退避计算重传周期,linux默认从1s开始重传5次。
四次挥手释放连接
  • FIN,seq=u
  • ACK,seq=v,ack=u 1
  • FIN,ACK,seq=w,ack=u 1
  • ACK,seq=u 1,ack=w 1
  • 四次挥手的原因是:另一端可能还有数据没有传完。
重传机制
  • 超时重传,每个报文段都设置计时器。
  • 超时时间 RTO 标准算法
    • RTO = srtt 4*rttvar
    • rttvar = (1-h)rttvar h(|M-srtt|)
    • srtt = (1-g)srtt gM
    • M:往返时延RTT测量值
    • 建立连接时没有RTT 测量值,初始RTO为1s
  • 快速重传,三次相同 ACK 则重传。
连接不存在IP时的处理方式
  • 局域网内,发送 ARP 获取 MAC 地址,然后才发送握手请求。
  • 局域网外,直接发送握手请求,路由转发到外部。
连接不存在的端口时的处理方式
  • 主机响应 RST,发送端关闭连接。
  • 防火墙限制则直接丢弃,发送端超时重试直至失败。

应用层

HTTP 协议

  • HTTP(Hyper Text Transfer Protocol)超文本传输协议。
特点
  • 基于 TCP 协议,默认端口 80。
  • 基于请求响应模型。
  • 无状态
版本历史
  • 1.0,默认短连接,请求队列阻塞。
  • 1.1,默认长连接,请求应答管线化不阻塞,增强缓存控制等。
  • 2.0,在TCP上增加二进制分桢层,支持多路复用及优先级,头部压缩,服务器推送等。
  • 高版本兼容低版本。
请求报文格式
  • 请求行,起始行包括【请求方法 URI 版本号】。
    • 请求方法,如GET/POST/HEAD/PUT/DELETE等。
    • URI,请求的资源路径。
    • 版本号,如HTTP/1.1。
  • 请求头,键值对
    • 字段名不区分大小写,可用符号-,不可用下划线。
    • 字段名后紧跟冒号,字段值前可以多个空格。
    • 不区分顺序。
  • 空行,CRLF 换行符,rn
  • 请求体,POST 请求的请求体。
响应报文格式
  • 状态行,包括【版本号 状态码 状态描述】。
    • 版本号,如HTTP/1.1。
    • 状态码,三位数,如 200/404/500等。
  • 响应头,键值对。
  • 空行,CRLF 换行。
  • 响应体,服务器响应的资源。
请求方法
  • GET,获取信息,参数附在 URL 后,存在长度限制。
  • POST,提交信息,数据在请求体中。
  • HEAD,只请求头部。
  • PUT,创建资源。
  • DELETE,删除资源。
  • PATCH,修改资源。
  • OPTIONS,查询指定 URL 支持的 HTTP 方法。
请求头字段
  • Host:服务器的域名或 IP 地址,如默认 80 端口可省略。
  • Connection:keep-alive表示保持连接,close 为关闭连接。
  • Accept:接受的内容各类型,如application/json。
  • Accept-Encoding:接受的编码格式,如gzip。
  • Accept-Language:接受的语言,如 zh-CN。
  • Referer:前一个页面地址。
  • Cache-Control:缓存控制,如no-cache不使用缓存。
  • User-Agent:发起请求的用户代理,如浏览器或客户端软件。
  • Cookie:发送给服务端的Cookie。
状态码
  • 1XX,信息类,需继续请求。
  • 2XX,成功类,200为 OK。
  • 3XX,重定向类,301为永久重定向,302为临时重定向
    • 304 未修改,客户端可以使用之前的缓存。
  • 4XX,客户端错误,404为找不到资源。
  • 5XX,服务器错误,500为服务器内部错误。
响应头字段
  • Age:在缓存代理服务中驻留的时长,单位秒。
  • Content-Length:内容长度,只有持久连接时才有效。
  • Content-Type:内容类型,如text/html。
  • Set-Cookie:设置 Cookie
  • Expires
    • 由HTTP1.0支持。
    • 在响应头中返回 Expires,客户端根据该时间判断是否重新请求。
    • 存在问题,服务器时间与客户端时间可能不一致。
  • Cache-Control
    • 由HTTP1.1支持,优先级高于 Expires。
    • 逗号分隔值
    • 值 no-store,不使用缓存
    • 值 no-cache,未与服务端验证新鲜度前不允许返回客户端使用。
    • 值 public 公有,可被中间层缓存。
    • 值 private 私有,不可被中间层缓存。
    • 值 max-age=秒,替代 Expire。
  • Last-Modified
    • 值为UTC时间,到秒。
    • 表示资源最后修改时间,用于客户端判断缓存是否最新。
    • 下次请求时头部会包含 If-Modified-Since。
  • Etag
    • 值为一个标识,资源发送修改会生成新的。
    • 比Last-Modified(到秒)更准确。
    • 下次请求时头部会包含 If-None-Match。

TLS 协议

  • TLS(Transport Layer Security),传输层安全协议。
TLS版本历史
  • 前身是 SSL(Secure Sockets Layer),安全套接层协议。
  • 当前主要使用版本是 TLS 1.2和 TLS1.3。
  • TLS 1.3 简化了握手交互流程,延迟缩短近1/3。
TLS特点
  • 底层协议 TCP,默认端口 443。
如何保证安全性
  • 通过 CA 体系交换公钥
  • 通过非对称加密算法,交换对称加密的密钥
  • 通过对称加密传输数据
握手协议
  • 协商 TLS 版本,密码套件,交换证书各自生成后续对称加密的密钥。
  • 1 客户端请求
    • 包含版本号,随机数,密码套件列表
    • 版本是客户端支持的 TLS 最大版本
    • 随机数用于生成会话密钥
    • 密码套件用于给服务端选择一个使用
  • 2 服务端回应
    • 确认版本号和使用的密码套件,服务端随机数
    • 发送服务端证书,如 CA 颁发的证书
    • 发送密钥交换算法参数
  • 3 客户端回应
    • 检查证书是否过期、是否可信、是否域名一致等
    • 使用服务端证书的公钥加密随机数,发送给服务端
    • 生成会话密钥,后续传输数据使用会话密钥加密
  • 4 服务端回应
    • 使用自己的私钥解密随机数,得到会话密钥
    • 使用会话密钥加密数据,发送给客户端
密码套件
  • 三件套:密钥交换算法,对称加密算法,摘要算法。
  • 密钥交换算法:密钥交换算法用于交换密钥,如 RSA、ECDHE 等。
    • RSA:破解服务端私钥可以破解历史数据。
    • ECDHE:
      • 采用椭圆曲线算法。
      • 具有前向安全性,服务端私钥泄露不会泄露历史数据。
      • 需破解服务器私钥 椭圆曲线私钥,后者每次握手随机生成。
  • 对称加密算法,常用如AES、DES。
  • 摘要算法,常用如 SHA256,MD5。
数字证书
  • 定义:由可信的第三方证书机构(CA)颁发的电子文件。
  • 产生背景:非对称加密中,客户端需要获取服务端的公钥。为了防止中间人篡改公钥,需要将公钥与服务端身份进行绑定。
  • 原理:CA颁发给服务端A,客户端B请求A时,A发送给B。B利用自身已有的CA公钥(根证书)解密证书的签名,得到摘要信息1,利用证书哈希算法对证书取摘要信息2,两者相等即证明证书可信。
  • 证书内容:版本、序列号、签名算法、颁发者、有效期、持有者、持有者公钥、签名等。
  • 证书颁发方式:
    • 在终端设备中生成公私钥对,将设备身份与公钥提供给CA。
    • CA直接生成公私钥对与证书,再将私钥与证书给终端。
  • 证书链:
    • 证书链是信任链,每个证书都需要有上一级证书进行验证,直到根证书。
  • 根证书:
    • 根证书是是证书链的起点,是自签名证书,颁发者与使用者相同。
    • 操作系统安装时已内置,也可以从CA网站下载。

HTTPS 协议

  • HTTPS = HTTP TLS

工具

常用命令

  • ifconfig:查看本机 IP 等网络信息。
  • ping:测试 IP 连通性,输出的信息包括IP、跳数,往返时间等。
  • traceroute:追踪到目的主机的路由。
  • telnet:测试端口是否开放。
  • curl:发起 http 请求。

Wireshark 抓包工具

  • 开源软件,支持 Windows 和 MacOS
  • 过滤器用法
    • 运算符:&&与、||或、!非
    • ip 过滤
      • ip.addr == 来源或目标IP
      • ip.src == 来源IP
      • ip.dst == 目标IP
    • 端口过滤
      • tcp.port == TCP来源或目标端口
      • tcp.srcport == TCP来源端口
      • tcp.dstport == TCP目标端口
      • udp.port == UDP来源或目标端口
    • http 模式过滤
      • http.request.method==GET && http.request.uri contains api

1 人点赞