Day01-前端入门——计算机网络概论|青训营笔记

109 阅读9分钟

2023.4.13 // 讲师:祝鑫奔

课程目标:建立对计算机网络的整体认知,对计算机网络中的各种概念(网络分层、网络协议、网络应用)有初步的理解,进而可以在后续的实际工作中能更高效的解决网络问题。

学习目录

  1. 计算机网络的整体认识
  2. 网络协议分层的认知
  3. 分析http1、2、3的关系
  4. 介绍cdn运行的基本原理
  5. 了解网络安全的最基本原则

描述一个复杂系统的两种分析方法:

  • 自顶向下(复杂——>简单):从复杂的系统问题入手,拆分为模块问题
  • 自底向上(简单——>复杂):将各个模块逐步拼凑成一个系统

1.通过蟹堡王帝国对计算机网络的整体认识

1.1蟹堡王帝国

蟹堡王帝国和计算机网络的联系

  • 蟹堡王顾客————客户端
  • 蟹堡王分店————服务端
  • 小区转发点和蟹堡王城市转发分店————路由器
  • 转发表格————网络协议

image.png 👆蟹堡王帝国拓扑图和👇简化计算机网络拓扑图之间的关系 image.png

1.2网络基础

网络组成部分:

  • 主机(客户端和服务端):负责提供信息或者接收信息
  • 路由器:负责转发主机之间的信息
  • 网络协议:负责提供统一的格式,方便路由器或主机对信息进行编码和解码

网络结构:网络的网络

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

区域网络——→城域网——→广域网

信息交换的方式

  • 电路交换:类似于电话预定外卖,容易占线忙线,占用资源,浪费资源;建立一个专用的通信电路来连接两个设备之间进行通信。在这种情况下,通信线路只能被使用者独占,直到通信连线释放才能被其他人使用。
  • 分组交换 (在计算机网络中多采用分组交换):类似于传真预定外卖,按序输出;数据被拆分成更小的数据包(也称为分组),这些数据包通过网络传输,并在目标设备重新组装

电路交换和分组交换的区别:分组交换线路不会被独占,多个数据包可以共享同一条通信线路,在传输中会进入传输队列,传输队列满了之后会丢弃新的数据,产生丢包

2. 网络协议分层的认知

计算机网络分层

  • 物理层
  • 链路层
  • 网络层
  • 运输层
  • 应用层

OSI模型分七层,从下到上为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。TCP/IP模型共有4层,分别为:网络接口层、网络层、传输层和应用层。

协议

协议的存在依赖于连接。

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

标头和载荷

  • 标头:必要的路由和控制信息,通常包括源地址、目标地址、协议类型、数据包长度以及其他控制信息。
  • 载荷:传输的实际数据。

3. 分析http1、2、3的关系

image.png

HTTP模型是典型的请求-响应模型,也就是说在HTTP模型中,客户端向服务器发送请求,服务器在接收到请求后进行处理并返回响应,客户端收到响应后才可以再次发送第二个请求,这种方式的资源利用率不高,容易引发队头堵塞问题。HTTP模型在客户端一连串的请求中会频繁建立和释放连接,对网络造成很严重的负担,影响网络性能

HTTP1.1:无法多路复用

HTTP1.x是一种基于文本的协议,它每次只能发送一个请求,并且必须等待响应才能发送下一个请求。这导致了它存在阻塞的问题,效率较低。

如果在HTTP1中同时发送两个请求

HTTP2:帧

HTTP2中将多个请求拆分到帧里面,每一个帧可以接收来自不同的请求的数据,可以让http2在连接上,每一个数据包都有自己的身份,进而实现多路复用

帧的构成: image.png

帧带来的额外好处:

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

总的来说,HTTP/2 的帧技术提供了一种灵活和高效的方式来管理请求和响应,在网络通信和资源利用上更加高效。帧技术优化了传输过程,减少了数据的等待和阻塞,从而显著提升了网络通信的性能。

HTTP2依然存在队头堵塞的问题,但是在tcp上。并且出现tcp慢启动(发送报文至少需要150ms)的现象

HTTP2:3RTT

3-round-trip-time (3RTT) 是指客户端向服务器发送请求,服务器接收请求并建立连接,最终与客户端确认连接的过程所需要的时间

HTTP3:QUIC

  • QUIC:Quick UDP Internet Connections(快速UDP互联网连接)
  • 现存网络设备对TCP和UDP支持已经僵化
  • UDP不靠谱但是QUIC靠谱
  • QUIC可以为除HTTP协议以外的应用层协议提供支持

HTTP3:QUIC的优点

HTTP/3 使用 QUIC(Quick UDP Internet Connections)作为其传输协议,主要优点有以下几个:

1.快速建立连接:QUIC 采用了 0-RTT(二次连接) 和 1-RTT(初次连接) 握手模式,可以更快地建立连接并发送数据,这对于移动端以及高延迟网络环境下的性能很有帮助。

2.多路复用:QUIC 内置了多路复用功能,支持同一连接上并发处理多个请求和响应,从而能够充分利用网络带宽和资源,提高传输效率。

3.避免 TCP 的瓶颈问题:QUIC 是基于 UDP 协议的,因此避免了 TCP 慢启动、头部阻塞和拥塞控制等问题,能够更好地适应高丢包和高延迟的网络情况。

4.可靠性和安全性:QUIC 支持可靠性比较好的传输,并且内置了安全机制,包含加密、认证和完整性保护等功能。

4. 介绍cdn运行的基本原理

CDN(Content Delivery Network)即内容分发网络,是一种通过利用离用户较近的服务器缓存和分发内容来加速互联网传输内容的技术。

CDN的基本原理:

  1. 尽量靠近用户
  2. 缓存内容
  3. 负载均衡
  4. 提供安全性

CDN:DNS劫持

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

WebSocket

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

WebSocket和HTTP的关系

  1. WebSocket和HTTP都是基于TCP协议的两个不同的协议
  2. WebSocket依赖于HTTP连接,是HTTP协议升级而来

5. 了解网络安全的最基本原则

网络安全:三要素

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

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

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

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

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

网络安全: 机密性

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

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

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

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

网络安全: 如何实现机密性

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

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

  • 密码散列函数性质: 找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
  • 有明文 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
  • 所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥