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

66 阅读6分钟

前言

前端工程师每天都要面对计算机网络,对网络了解得越多,在工作中解决网络问题也就更得心应手。这节课会从网络基础结构开始,一步步向上勾勒出计算机网络的整体架构,让你对网络分层、协议有更深的理解。再从网络安全的终极目标开始,一步步向下分析出实现网络安全需要解决的终极问题,详细了解网络安全的实现原理。最终让你在后续工作中遇到网络问题时能快速定位问题、解决问题。

1.计算机网络基础

网络组成部分

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

网络结构:网络的网络

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

电路交换&分组交换

  • 电路交换是以电路连接为目的的交换方式,通信之前要在通信双方之间建立一条被双方独占 的物理通道。
  • 分组交换是以分组为单位进行传输和交换的,它是一种存储——转发交换方式,即将到达交换机的分组先送到存储器暂时存储和处理,等到相应的输出电路有空闲时再送出。

网络分层

  • TCP/IP分层
  • OSI分层

协议

协议的存在依赖于连接

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

标头和载荷

  • 标头:HTTP中的请求标头和响应标头
  • 载荷:帧头和帧尾中间包着的就是网络层交付下来的数据

HTTP协议示例

  • 如下图

image.png

  • 链路层-本地帧头部

image.png

  • 链路层-IP协议头部

image.png

  • 运输层-TCP协议头部

image.png

  • 应用层-HTTP协议头部

image.png

TCP协议格式

  • 如下图

image.png

2.Web中的网络

HTTP 1 2 3的演进

  • HTTP 1.1
    • 无法多路复用
  • HTTP 2:帧
    • 调节响应传输的优先级
    • 头部压缩
    • Server Push
    • 但无法解决TCP的队头阻塞
  • HTTP 3:QUIC
    • Quick UDP Internet Connection
    • 现存网络设备对TCP和UDP支持已经僵化
    • UDP不靠谱但是QUIC靠谱
    • QUIC可以为除HTTP协议以外的应用层协议提供支持

CDN

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

WebSocket

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

3.网络安全

网络安全三要素:

  • 机密性:攻击者无法获取通信内容
  • 完整性:攻击者对内容进行篡改时能被发现
  • 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信

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

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

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

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

网络安全:机密性

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

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

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

  • 蟹老板向银行发起了转账请求
  • 银行需要确认
    • 这个请求真的是蟹老板发起的
    • 目标账户和转账金额没有被篡改

网络安全:然后实现机密性

  • 已知:网络是明文的
  • 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
  • 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息

网络安全:如何实现完整性

  • 密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
  • 有明文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

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

网络安全:如何实现身份验证

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

网络安全:如何实现身份验证

  • 数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
  • 数字签名(指纹)= 私钥加密(密码散列函数(原文))
  • 消息 = 原文+数字签名
  • 一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改

  • 可信的人验证蟹老板的公钥
  • 那谁验证可信的人的公钥?
  • 根证书是证书链的尽头
  • 验证的一连串证书成为证书链
  • 分发证书、验证证书的基础设施称为PKI,Public Key Infrastructure

所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥

证书链示例

image.png

网络安全:HTTPS

把HTTP的明文换成密文,再验证身份,即HTTPS

  • HTTPS = HTTP + TLS
  • TLS = 身份验证+ 加解密

身份验证PKI

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

引用

  • 字节内部课:字节前端初阶训练营-计算机网络概论