计算机网络概论

分析方法

自底向上
从简单开始,逐渐变复杂
将模块逐步拼凑成一个系统

自顶向下
从复杂开始,逐渐变简单
从复杂的系统问题入手,拆分为模块问题

计算机网络基础

网络组成部分
主机:客户端和服务端
路由器
网络项协议

网络结构:网络的网络
本地网络
三个本地网络节点的网络
全国通信网络:本地网络的网络

区域网络、城域网和广域网

网络分层

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

表头和载荷

HTTP协议示例

链路层——本地帧头部

链路层——IP协议头部

运输层——TCP协议头部

应用层——HTTP协议头部

TCP协议格式

计算机网络概论笔记_HTTP


小结

网络组成部分:由主机、路由器、交换机等组成

网络结构:网络的网络

信息交换方式:电路交换和分组交换

网络分层:分清职责、物理层、链路层、网络层、运输层和应用层

网络协议:标头和载荷

web中的网络

HTTP协议

HTTP连接模型
队头堵塞

计算机网络概论笔记_TCP_02



计算机网络概论笔记_TCP_03




计算机网络概论笔记_TCP_04


计算机网络概论笔记_HTTP_05


计算机网络概论笔记_身份验证_06



计算机网络概论笔记_HTTP_07



计算机网络概论笔记_TCP_08



计算机网络概论笔记_HTTP_09



计算机网络概论笔记_身份验证_10



HTTP2:帧带来的额外好处

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

HTTP2:队头堵塞,但是在TCP上

TCP包0:包含了(style.css的第一行内容)的HTTP2的帧
TCP包1:包含了(main.js的全部内容)的HTTP2的帧
TCP包2:包含了(style.css的第2行内容)的HTTP2的帧
TCP包3:包含了(style.css的第3行内容)的HTTP2的帧

HTTP2:RTT启动


计算机网络概论笔记_HTTP_11


HTTP3:QUIC

Quick UDP Internet Connection
现存网络设备对TCP和UDP支持已经僵化
UDP不靠谱但是QUIC靠谱
QUIC可以为除HTTP协议以外的应用层协议提供支持

HTTP3:QUIC-1 RTT

QUIC 第一次访问


计算机网络概论笔记_身份验证_12


QUIC 第二次访问


计算机网络概论笔记_HTTP_13


CDN:DNS劫持

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

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

WebSocket:示例

服务器代码

计算机网络概论笔记_TCP_14



客户端代码


计算机网络概论笔记_TCP_15


WebSocket:升级

计算机网络概论笔记_HTTP_16



计算机网络概论笔记_身份验证_17



WebSocket:发送消息


计算机网络概论笔记_HTTP_18


计算机网络概论笔记_身份验证_19



小结

HTTP 1 2 3 的演进历史

CSN解决了HTTP协议之外的问题

WebSocket从HTTP协议升级而来

网络安全

网络安全:三要素

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

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

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

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

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

网络安全:机密性

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

怎么在不安全的信道交换秘密信息?

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

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

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


计算机网络概论笔记_TCP_20


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

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

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

签名:用于鉴别身份和防止伪造
非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
保证了机密性、完整性和身份验证

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

计算机网络概论笔记_TCP_21



证书链示例

计算机网络概论笔记_HTTP_22





计算机网络概论笔记_TCP_23



计算机网络概论笔记_HTTP_24



网络安全:HTTPS

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

HTTPS=HTTPS+TLS
TLS=身份验证+加解密
身份验证靠PKI

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

小结

网络安全三要素:机密性、完整性和身份验证

在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息

KPI保证了普通用户不需要“面对面”和根证书机构交换根证书

HTTPS使用PKI完成了除客户端验证以外的特性,客户端身份验证靠HTTP协议实现

计算机网络概论笔记_TCP_25



参考文献和书籍推荐


计算机网络概论笔记_HTTP_26