[ 计算机网络概论 | 青训营笔记]

101 阅读9分钟

计算机网络概论

课程内容:

  • 建立对计算机网络的整体认识
  • 建立对网络协议分层的认知
  • HTTP1,2,3的关系
  • CDN运行的基本原理
  • 网络安全的最基本原理

蟹堡王实例

利用一个生动的例子解释了计算机网络。前期蟹堡王只有靠打电话接外卖的方法进行销售,而且只有章鱼哥可以接到电话,这样会影响效率且浪费资源。不如这样做,实施三步走战略:1.在比奇堡开通外卖2.在北京和上海开分店3.在全国开分店和通信网络。利用转发表格的方法:将顾客作为客户端,分店作为服务端,转发表格为网络协议。

计算机网络基础

组成部分

  • 主机:客户端&服务器
  • 路由器
  • 网络协议

网络结构:网络的网络

  • 比奇堡和小区网络:本地网络
  • 北京和上海分店+比奇堡:三个本地网络节点的网络
  • 全国通信网络:本地网络的网络
  • 区域网,城域网和广域网

网络分层

  • 物理层(Physical Layer): 物理层负责处理与物理介质(如电缆、光纤等)相关的通信任务,包括数据的比特流传输、信号编码、硬件接口等。在这一层,数据以比特(bit)为单位进行传输。

  • 数据链路层(Data Link Layer): 数据链路层负责建立、维护和断开数据链路,以确保从源到目的地的可靠数据传输。此外,数据链路层还负责进行错误检测和流量控制。在这一层,数据以帧(frame)为单位进行传输。

  • 网络层(Network Layer): 网络层负责处理网络寻址和路由选择,以确定数据包从源节点到目的节点的最佳路径。网络层使用 IP 地址进行寻址。此外,网络层还负责处理分组和重组数据包。在这一层,数据以数据包(packet)为单位进行传输。

  • 传输层(Transport Layer): 传输层负责提供端到端的通信服务,包括数据的分段、传输、重组和确认。传输层还负责处理流量控制和差错控制。常见的传输层协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。

  • 会话层(Session Layer): 会话层负责建立、管理和断开网络中的通信会话。会话层通过会话标识符来区分不同的通信会话,以确保数据流向正确的目的地。

  • 表示层(Presentation Layer): 表示层负责处理数据的表示和编码问题,以确保发送方和接收方的数据格式兼容。此外,表示层还负责进行数据加密和解密、数据压缩和解压缩等操作。

  • 应用层(Application Layer): 应用层是网络协议栈的最顶层,负责处理与特定应用程序相关的通信任务。应用层协议通常与用户直接交互,例如 HTTP(超文本传输协议)、FTP(文件传输协议)和 SMTP(简单邮件传输协议)等。

协议

协议的存在依赖于链接

协议定义了在两个或多个通信实体之间交换的报文格式顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作

TCP协议格式

image.png

网络协议

标头和载荷

Web中的网络

HTTP协议

红色是请求 蓝色是响应 image.png

HTTP连接模型

image (1).png

队头堵塞

HTTP1.1:无法多路复用 多路复用归功于, HTTP/2 中的 帧(frame)和流(stream)。帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。就是在一个 TCP 连接中可以存在多条流。而Http 1.x 并没有这个标识,每次请求都会建立一次HTTP连接,3次握手4次挥手。

HTTP2的帧

image.png

image.png

帧来带来的好处

  • 调整响应传输的优先级
  • 头部压缩
  • Server Push

HTTP3出现的原因是HTTP2还不够快和解决 HTTP/2 中仍然存在的一些问题和局限性

HTTP3:QUIC

  • Quick UDP Internet Connection
  • 现存网络设备对TCP和UDP支持已经僵化
  • UDP不靠谱(包丢了就不管了,业务给多少数据,它就发多少数据)但是QUIC靠谱
  • QU1C可以为除HTP协议以外的应用层协议提供支持 image.png

image.png

image.png

image.png

CDN

CDN:你无法突破物理极限的

  • HTTP3快吗?

  • 快!

  • 那从美国到中国,HTP3要多久? 150ms!

  • 和北京到上海比,还快吗? 好像不够?

CDN:你的钱包够鼓吗?

  • 流量多少钱一个G?
  • 1块
  • 那我在福建给上海的小满发一部100G的小电影大合集得100块钱?
  • 对!
  • 发10次岂不是要1000块钱?
  • 是的!
  • 我都发到北京了,小满就不能跟其他同学内部共享一下吗?

CND:你,够强大吗?

  • 我们有几台服务器?
  • 1台
  • 他能抗多少流量?
  • 100G!
  • 双十一峰值得1000G,扛得住吗?
  • 不一定,可能会G....

CDN:DNS劫持

  • 域名解析一般由网站自己处理
  • 要加速的域名则重定向到CDN厂商的域名解析服务处理(通常不是由自己来解析,而是由CDN厂商来做)
  • CDN厂商根据来源确定最近的CDN服务器的IP
  • 用户直接访问最近的CDN服务器

WebSocket

  • 有状态的持久连接
  • 服务端可以主动推送消息
  • 用VebSocket发送消息延迟比HTTP低

网络安全

网络安全的三要素

  • 机密性
  • 完整性
  • 身份验证

网络安全:对称加密和非对称加密

-对称加密:加密,解密用同样的密钥 -非对称加密;加密,解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密,私钥加密只能用公钥解密。

网络安全:密码散列函数(哈希函数)

  • 输入:任意长度的内容
  • 输出:固定长度的哈希值
  • 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的

网络安全:机密性

  • 加密需要加密算法和密钥等信息(统称为秘密信息
  • 网络是明文的,不安全

网络安全:完整性和身份验证

完整性和身份验证相互关联。

实例:

  • 蟹老板向银行发起了转账请求

  • 银行需要确认

    • 这个请求真的是蟹老板发起的
    • 目标账户和转账金额没有被篡改

如何实现机密性

  • 已知:网络是明文的
  • 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
  • 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息,意思就是我们想要通过明文来交换密钥,就得有不会被攻击者知道的秘密信息

如何实现完整性

  • 密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的

  • 有明文m,密码散列函数H

  • 计算H(m)获得哈希值h

  • 将m和h组合成新信息m+h

  • 接收方拆分m+h,重新计算H(m)得h',对比h'和h

  • 有明文m,密码散列函数H,以及一个密钥S

  • 计算H(m+s)获得哈希值h

  • 将m和h组合成新信息m+h

  • 接收方拆分m+h,重新计算H(m+s)得h',对比h'和h

  • 所以想要实现完整性,通信双方需要先有秘密信息。

如何实现身份验证

数字签名是一种基于公钥加密技术的技术,用于保证数据的完整性、不可否认性和真实性。它通常使用非对称加密算法进行实现,如 RSA、DSA 等。

在数字签名中,发送方首先对原始数据进行哈希运算,得到一个唯一的、固定长度的哈希值。然后,发送方使用自己的私钥对这个哈希值进行加密,形成数字签名,并将数字签名和原始数据一起发送给接收方。接收方可以使用发送方的公钥来验证数字签名的真实性和完整性。

验证数字签名的过程如下:

  1. 接收方对原始数据进行哈希运算,得到一个哈希值。
  2. 接收方使用发送方的公钥对数字签名进行解密,得到一个哈希值。
  3. 接收方比较这两个哈希值是否相同,如果相同,则说明数字签名是有效的,原始数据没有被篡改。

这个过程的核心在于发送方使用私钥对哈希值进行加密,只有持有私钥的发送方才能够生成有效的数字签名,因此数字签名可以被认为是发送方对原始数据的“数字指纹”。同时,接收方使用公钥对数字签名进行解密,只有持有公钥的发送方才能够生成有效的数字签名,因此可以保证数字签名的真实性和完整性。

总之,数字签名是一种基于公钥加密技术的技术,用于保证数据的完整性、不可否认性和真实性。它通过对原始数据进行哈希运算和使用发送方的私钥进行加密,生成数字签名,然后通过使用发送方的公钥对数字签名进行解密和验证,保证数据的安全性和可靠性。

  • 签名:用于鉴别身份和防止伪造
  • 非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
  • 蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
  • 海绵宝宝使用蟹老板的公钥进行解密,获得原文
  • 保证了机密性、完整性和身份验证

证书链示例

image.png

HTTPS

  • 把HTTP的明文换成密文,在验证身份,即HTTPS。

  • HTTPS=HTTP+TLS

  • TLS=身份验证+加解密

  • 身份验证靠PKI

  • 服务器身份验证靠PKI,客户端身份验证靠HTTP协议。