一、网络基础
计算机网络的定义:用通信线路和通信设备将分布在不同地点的多台自治计算机系统互相连接起来,按照共同的网络协议,共享硬件、软件,最终实现资源共享的系统。
1.1 网络组成
主机:客户端和服务端,等同于蟹黄堡中的客户和店里的厨房。
路由器:等同于小区中的转发点。
网络协议:网络协议定义了计算机设备之间通信的规则和格式。例如,TCP/IP协议族是互联网上使用最广泛的一组协议,它定义了数据包的格式、地址分配方式、路由选择方法等。
1.2 网络结构
个域网PAN( Personal Area Network )
能在便携式消费电器与通信设备之间进行短距离通信的网络 覆盖范围一般在10米半径以内,如蓝牙耳机等
局域网LAN(Local Area Network)
局部地区形成的区域网络,如企业网络 分布地区范围有限,可大可小,大到一栋建筑、小到办公室内的组网 电脑WLAN接入,打印机共享等等
城域网MAN(Metropolitan Area Network )
范围覆盖一个城市的网络
广域网WAN(Wide Area Network)
覆盖很大地理区域,乃至覆盖地区和国家
比喻:
比奇堡和小区网络:本地网络
北京和上海分店+比奇堡:三个本地网络节点的网络
全国通信网络:本地网络的网络
区域网络、城域网和广域网
1.3 数据交换方式
①分组交换
分组交换采用把一个个小的数据包存储转发传输来实现数据交换。
缺点:
1、不具有实时性。
2、存在延时。
3、会造成通信阻塞。
4、存在无用的重复数据。
5、会出现丢包的情况。
优点:
1、设计简单。
2、资源利用率很高。
②电路交换
电路连接的三个阶段:
1、建立连接。
2、数据传输。
3、释放连接。
优点:
1、传输速度快、高效。
2、实时。
缺点:
1、资源利用率低。
2、新建连接需要占据一定的时间,甚至比通话的时间还长。
1.4 网络分层
快递员不关心包裹内容,卡车司机不关心车厢里拉的是什么,高速公路不关心开的什么车。
OSI参考模型
| 层次 | 传输单位 | 功能 | 协议 |
|---|---|---|---|
| 应用层 | 和用户交互 | FTP SMTP HTTP | |
| 表示层 | 数据格式变换(翻译官),数据加密解密,数据压缩及恢复 | JPEG ASCII | |
| 会话层 | 建立、管理、终止会话,使用校验点可使会话在通信失效时从校验点/同步点继续恢复通信,实现数据同步。 适用于传输大文件 | ADSP ASP | |
| 传输层 | 数据报/报文段 | 分组排序,差错控制,流量控制,端到端连接,可靠传输 | TCP,UDP |
| 网络层 | 分组 | 路由选择,流量控制,差错控制,拥塞控制 | IP,ICMP,ARP,RARP |
| 数据链路层 | 帧 | 差错控制,流量控制 ,访问控制,帧定界功能 | PPP,HDLC,SLIP |
| 物理层 | 比特 | 定义接口特性,定义传输模式(单工、双工、半双工),定义传输速率,比特同步,比特编码 | RJ45、802.3 |
TCP/IP参考模型
TCP/IP 并不特指单纯的 TCP 和 IP 协议,而是容纳了许许多多的网络协议。OSI先出现,参考模型先于协议发明,不偏向特定协议。TCP/IP设计之初就是异构网络互联问题,将ip作为重要层次。
OSI 模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次。
1.5 其他概念
TCP 协议格式
标头和载荷
收件人、寄件人关注: 收件地址、寄件地址;收件人、寄件人的姓名和电话;包裹内容
快递公司关注: 收件人、寄件人关注的东西;该由哪个集散点发出,哪个集散点收;哪个网点派送
HTTP 协议示例
链路层-本地帧头部
HTTP 协议示例:应用层 -HTTP 协议头部
小结
网络组成部分:由主机、路由器、交换机等组成
网络结构:网络的网络
信息交换方式:电路交换和分组交换
网络分层:分清职责,物理层、链路层、网络层、运输层和应用层
网络协议:标头和载荷
二、Web中的网络
2.1 Web应用
web就是网页,我们所说的internet主机的供外界(网民)访问的网页资源
web应用就是一个web项目,项目下有可供用户访问的网页资源
web资源分为两类:
- 静态资源:html,css。JavaScript,供用户访问,静态网页的数据不会发生变化
- 动态网页:jsp和servlet,php,asp等,共用户访问,动态网页的数据会发生变化。
web开发中常见的两种架构:
- B/S:browser 和server,浏览器和服务器模式,比如说淘宝,京东,亚马逊等
- C/S:clienthe server,客户端和服务器模式,比如说:迅雷下载,360卫视等等
区别:
b/s模式,可以不用安装,直接访问网站资源,简单方便。但是不稳定
c/s,可以在电脑(移动端)打开,直接使用,速度快。但服务器会更新
2.2 HTTP协议
基本介绍:
HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0
协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。
通俗点讲,协议就是要保证网络通信的双方,能够互相对接上号。就像是两个人传递纸条通过互相指定的暗号,如果发送天亮了,表示可以打游戏了等等
注意: 当我们访问一些网页时,是显示通过 HTTPS 来进行通信的,并且当下大多数的网页都是通过 HTTPS 来进行通信的,因为 HTTPS 在 HTTP 的基础上做了一个加密的工作。HTTPS 将在本文末尾具体介绍
请求
下面是一个POST方法的请求报文:
POST /index.php HTTP/1.1
请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 请求数据
响应
下面是一个响应报文的实例:
HTTP/1.1 200 OK 状态行
Date: Sun, 17 Mar 2013 08:12:54 GMT 响应头部
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
空行
响应数据 Hello HTTP!
HTTP连接模型
HTTP队头堵塞问题(HTTP Head-of-Line Blocking)是指在HTTP/1.1协议中,当浏览器向服务器发送多个并发请求时,其中一个请求因为某些原因被阻塞,那么该请求前面的所有请求都必须等待该请求结束才能开始接收响应,即使这些请求与被阻塞的请求没有直接的依赖关系。
在HTTP/1.1中,每个TCP连接只能处理一个请求或响应,因此当浏览器向服务器发送多个请求时,这些请求必须按照发送的顺序排队等待服务器的响应。如果其中一个请求因为网络拥塞、服务器过载或其他原因被延迟了,那么它前面的所有请求都必须等待它的响应返回,这样会导致整个页面加载速度变慢。
举个例子,假设一个页面需要加载三个资源A、B、C,浏览器会分别向服务器发送三个请求。如果请求A因为某些原因被延迟了,那么请求B和请求C就必须等待请求A的响应返回,即使它们本身可以独立地和服务器通信,这就是HTTP队头堵塞问题。
HTTP队头堵塞问题会导致页面加载速度变慢,因为所有请求都必须按照顺序依次完成,而不能并发地进行。为了解决这个问题,HTTP/2协议引入了多路复用技术,可以在一个TCP连接上同时处理多个请求和响应,这样可以避免请求之间的相互阻塞,提高页面加载速度。
HTTP3(QUIC) 协议
HTTP/3是一种基于QUIC协议的新一代HTTP协议,它使用了QUIC协议的特性来解决HTTP/1和HTTP/2中存在的问题。QUIC(Quick UDP Internet Connections)是一种基于UDP协议的传输协议,它在传输层与TCP和UDP相同,但在应用层使用了自己的协议。
QUIC协议有以下几个特点:
-
基于UDP协议:QUIC协议使用UDP协议作为底层传输协议,可以避免TCP的Head-of-Line Blocking问题。
-
0-RTT连接:QUIC协议支持0-RTT连接,即第一次连接时可以发送数据,可以更快地建立连接。
-
可靠性:QUIC协议在传输层实现了可靠性,可以保证数据的可靠传输。
-
多路复用:QUIC协议支持多路复用,可以在一个连接上同时处理多个请求和响应,避免了HTTP/1和HTTP/2中的队头堵塞问题。
HTTP/3使用了QUIC协议的特性,将应用层的HTTP协议封装在QUIC协议之上,实现了更快的连接建立速度和更高的传输效率。HTTP/3中的请求和响应都是通过QUIC协议进行传输,可以避免HTTP/1和HTTP/2中存在的队头堵塞问题。此外,HTTP/3还支持0-RTT连接,可以更快地建立连接。
总之,HTTP/3的QUIC协议具有更快的连接建立速度、更高的传输效率和更好的可靠性,是HTTP协议的一次重大升级。
2.3 CDN
CDN(Content Delivery Network)是一种分布式的网络架构,可以将内容分发到全球各地的节点上,使用户可以从离自己更近的节点获取内容,从而提高访问速度和用户体验。
HTTP的CDN是指使用CDN技术来加速HTTP协议下的内容传输。在HTTP的CDN中,CDN提供商会在全球各地建立服务器节点,并将客户网站的静态资源(如图片、视频、JS、CSS等)缓存到这些节点上。当用户请求访问这些资源时,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服务器
HTTP的CDN可以提供以下优势:
-
加速页面加载速度:CDN可以将静态资源缓存在离用户更近的节点上,从而减少了资源请求的路程和时间,提高页面加载速度。
-
减轻服务器负载:CDN可以将部分请求分担到缓存节点上,从而减轻了源服务器的负载,提高了网站的可靠性和稳定性。
-
提高全球访问速度:CDN可以将静态资源缓存在全球各地的节点上,从而提高了全球用户的访问速度和用户体验。
-
提高安全性:CDN可以提供反DDoS攻击和防火墙等安全策略,保护网站免受网络攻击。
需要注意的是,HTTP的CDN主要适用于静态资源的加速,对于动态请求,CDN的加速效果相对较低。此外,使用CDN也需要考虑成本和管理复杂度等问题。
2.4 WebSocket
WebSocket是一种基于TCP协议的双向通信协议,它可以在客户端和服务器之间建立持久连接,实现双向通信,从而避免了HTTP协议每次请求都需要重新建立连接的问题。WebSocket协议最初是由Google在2010年发布的,现在已经成为Web开发中的重要组成部分。
WebSocket协议的特点如下:
-
双向通信:WebSocket协议可以实现双向通信,客户端和服务器可以在任意时刻向对方发送消息,而不需要重新建立连接。
-
实时性:WebSocket协议可以实现实时通信,客户端和服务器之间的消息传递可以近乎实时完成,从而提高了用户体验。
-
低延迟:WebSocket协议使用了持久连接,减少了连接建立和断开的时间,从而使通信延迟更低。
-
节省带宽:WebSocket协议使用了二进制数据传输格式,可以节省网络带宽,提高数据传输效率。
-
兼容性好:WebSocket协议兼容现有的Web浏览器和Web服务器,可以与HTTP协议共同使用,不需要额外的插件或软件。
-
安全性高:WebSocket协议可以通过SSL/TLS协议实现加密传输,保证通信的安全性。
WebSocket协议的应用场景包括在线游戏、实时聊天、在线视频会议等需要实时通信的场合。在这些场合中,WebSocket协议可以提供更好的性能和用户体验,从而满足了用户对实时性和互动性的需求。
小结
HTTP 123的演进历史
CDN解决了HTTP协议之外的问题
WebSocket 从 HTTP 协议升级而来
三、网络安全
网络安全三要素
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
网络安全:对称加密和非对称加密
- 对称加密:加密、解密用同样的密钥
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥) ,而且公钥
- 加密只能用私钥解密、私钥加密只能用公钥解密
网络安全:密码散列函数(哈希函数)
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值, 在计算上是不可能的
网络安全:机密性
- 加密需要加密算法和密钥等信息(统称为秘密信息)
- 网络是明文的,不安全
- 怎么在不安全的信道交换秘密信息?
网络安全:完整性和身份验证
- 完整性和身份验证相互关联。
- 蟹老板向银行发起了转账请求
- 银行需要确认
- 这个请求真的是蟹老板发起的
- 目标账户和转账金额没有被篡改
网络安全:如何实现机密性
- 已知:网络是明文的
- 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
- 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息
网络安全:如何实现完整性
- 密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有
- 相同的哈希值,在计算上是不可能的
- 有明文 m,密码散列函数 H
- 计算 H(m) 获得哈希值 h
- 将m 和h 组合成新信息 m +h
- 接收方拆分 m +h,重新计算 H(m) 得 h’,对比 h’ 和 h
网络安全:如何实现身份验证
- 签名:用于鉴别身份和防止伪造
- 非对称加密性质:加密、解密使用不同的密钥(公钥和私钥) ,而且
- 公钥加密只能用私钥解密、私钥加密只能用公钥解密
- 蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
- 海绵宝宝使用蟹老板的公钥进行解密,获得原文
- 保证了机密性、完整性和身份验证
网络安全:如何实现身份验证
- 数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
- 数字签名(指纹) = 私钥加密(密码散列函数(原文))
- 消息 = 原文 + 数字签名
- 一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改
网络安全:如何实现身份验证
- 可信的人验证蟹老板的公钥
- 那谁验证可信的人的公钥?
- 根证书是证书链的尽头
- 验证的一连串证书称为证书链
- 分发证书、验证证书的基础设施称为PKI, Public Key Infrastructure
所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥
证书链示例
小结
网络安全三要素:机密性、完整性和身份验证
在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息
PKI保证了普通用户不需要“面对面”和根证书机构交换根证书
HTTPS使用PKI完成了除客户端身份验证以外的特性,客户端身份验证靠
HTTP 协议实现