1. 概述
What?
-
互联网本身是由一个又一个节点相互连接而组成,形如一张“蜘蛛网”,故称之为计算机网络。
- 节点:终端 <-> 终端 、 网络 <-> 网络
-
在现代化背景下,传统的网络也经历了数次迭代,如今的计算机网络的核心知识包括5个方面:网络组成部分、网络结构、信息交换方式、网络分层、网络协议。其中最重要的的是理解网络分层和网络协议。
Why?
- 资源有限,服务用户、服务内容日益增加,需要优化传统计算机网络。
How?
- 物理:提升材料物理性能等
- 其他:优化计算机网络结构、优化网络协议等
2. 计算机网络体系
组成部分:
- 物理节点:主机、路由器、交换机等
- 一个区域的小网络也可以看作一个节点,相互连接,最终形成互联网
- 节点之间相互连接需要符合一定的通信协议,计算机网络中称为网络协议
网络结构:网络的网络
-
计算机的网络结构离不开其实际的物理位置,所以,形成了一定的结构
-
端和端相连接形成区域网络,区域网络相连接形成广域网
-
网络核心和网络边缘:
- 网络边缘:位于“互联网边缘”的计算机设备,例如,个人计算机、手机等
- 网络核心:由互联网端系统的分组交换设备和通信链路组成的网状结构,例如,分组交换路由器、链路层交换机等
信息交换方式:
“交换”的目的是按照某种方式动态地分配传输线路的资源
-
电路交换:在通信双方之间建立一条被双方独占的物理通道,通信后,通道被释放
-
分组交换:是以分组为单位进行传输和交换的,它是一种“存储—转发”交换方式,即将到达交换机的分组先送到存储器暂时存储和处理,等到相应的输出电路有空闲时再送出
由于现代互联网无时无刻不在进行着大量的通信,所以大多数情况下,计算机网络采用分组交换的形式进行网络通信。
网络分层:
计算机网络将网络分为5层 (TCP/TP协议),每一层只关注和解决一部分问题,从而理清通信上的各种问题,提高网络性能。
-
物理层:如何匹配连接不同的网络设备 介质:双绞线、光纤、无线电波等
-
链路层:定义电信号的分组方式,以及规定不同的组代表什么意思,从而使双方计算机都能够进行识别
- 成帧:对数据流分组,每组称为一个“帧”,“帧”由“头”和“身体”组成
- 差错控制:处理传输中出现的差错,例如,位错误、丢失等
- 流量控制:匹配发送/接受速率,避免接收缓冲区溢出
-
网络层:引入一套新的协议用来区分不同的广播域/子网
在以太网通过“广播”的形式,进行设备之间的通信,它不是把数据包准确的送达接收方,而是向网络中所有的计算机发送数据包
网络层引入IP协议,使得信息可以“找到”实际的接收设备,进行高效地通信
-
运输层:建立端口到端口的通信,使得数据能够正确的传送给不同的应用程序
端口是每一个使用网卡的程序的编号,每一个端口号标志一个可执行程序
使用IP + 端口,能实现唯一确定互联网上一个程序,进而实现网络间的程序通信
-
应用层:规定了应用程序的数据格式 主要协议有: FTP(文件传送协议、21端口)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议、25端口)、POP3协议(邮局协议)、HTTP协议(Hyper Text Transfer Protocol、80端口)
网络协议:标头和载荷
-
协议的存在依赖于连接。
-
协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
-
标头和载荷: 规定传输的数据的格式,使其更好被处理
3. Web中的网络协议
主要关注TCP协议、HTTP协议、CDN和WebSocket
TCP协议(传输层)
传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而设计的一个传输协议
TCP协议格式:
-
首部字段 源端口 和 目的端口 各占 2bit ,分别写入 源端口号 和 目的端口号 序号 占 4bit ,是期望收到对方下一个报文段的第一个数据字节的序号 数据偏移 占 4bit ,这个字段实际上是指出 TCP 报文段的首部长度 保留 占 6bit ,保留为今后使用,但目前应置为0
-
下面有6个
控制位,用来说明本报文段的性质紧急 URG(URGent)当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不是按原先的排队顺序来传送确认 ACK(ACKnowledgment)仅当 ACK=1 时确认号字段才有效。当 ACK=0 时,确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置1推送 PSH(Push)当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应复位 RST(ReSeT)当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接同步 SYN(SYNnchronization)在连接建立时用来同步序号。当 SYN=1 而 ACK=0 时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使 SYN=1 和 ACK=1终止 FIN(FINis)用来释放一个连接。当 FIN=1 时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接窗口占2字节。窗口值是[0, 216-1]之间的整数。窗口值作为接收方让发送方设置其发送窗口的依旧检验和占2字节。检验和字段检验的范围包括首部和数据这两部分紧急指针占2字节。紧急指针仅在 URG=1 时才有意义,它指出本报文段中的紧急数据的字节数选项长度可变,最长可达40字节
HTTP协议
超文本传输协议协议(HTTP,HyperText Transfer Protocol)是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则
HTTP 报文有两种类型,请求与响应,每种都有其特定的格式:
-
请求
- 一个HTTP的请求方法,经常是由一个动词GET、POST或一个名词OPTIONS、HEAD来定义客户端的动作行为
- 要获取的资源的路径,通常是上下文中就很明显的元素资源的URL,它没有protocol,domain,或是 TCP 的port(en-US)(HTTP 一般在 80 端口)
- HTTP 协议版本号
- 为服务端表达其他信息的可选标头
- 对于一些像 POST 这样的方法,报文的主体(body)就包含了发送的资源,这与响应报文的主体类似
-
响应
- HTTP 协议版本号
- 一个状态码,来告知对应请求执行成功或失败,以及失败的原因
- 一个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定
- HTTP标头,与请求标头类似
- 可选项,比起请求报文,响应报文中更常见地包含获取资源的主体
CDN
内容分发网络(CDN,Content Delivery Network)指的是一组分布在各个地区的服务器。这些服务器存储着数据的副本,因此服务器可以根据哪些服务器与用户距离最近,来满足数据的请求。CDNs 提供快速服务,较少受高流量影响。
WebSocket
在互联网发展的早期,很多网站使用轮询技术(短轮询)实现推送功能。轮询是指由浏览器每隔一段时间向服务器发出 HTTP 请求,然后服务器返回最新的数据给客户端。
比较新的轮询技术是 Comet,这种技术虽然可以实现双向通信,但仍然需要反复发出请求。而且在 Comet 中普遍采用的 HTTP 长连接也会消耗服务器资源。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。
4. 网络安全
-
机密性:攻击者无法获知通信内容 如何在不安全的信道交换秘密信息 网络是明文的 通信双方需提前获得秘密信息
-
完整性:攻击者对内容进行篡改时能被发现 通信双方需提前获得秘密信息
-
身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信 数字签名:私钥加密,公钥验证 非对称加密 证书链 - 根证书 - PKI
对称加密&非对称加密
- 对称加密:加密、解密使用同样的密钥
- 非对称加密:加密、解密使用不同密钥(公钥&私钥)
密码散列函数(Hash函数)
- Input:任意长度内容
- Output:固定长度的哈希值
- 性质:使用哈希值无法反推出内容
HTTPS
- HTTPS = HTTP + TLS
- TLS = 身份验证 + 加、解密
- 服务端身份验证靠PKI,客户端身份验证靠HTTP协议