一 网络体系结构
计算机网络完成的所有功能可以划分若干层,每层完成一部分子功能,每层在完成相应功能时与另一通信实体的相同层按照某种协议进行信息交换。
1.1 OSI七层网络模型
OSI(开放系统互联) 七层网络协议,他是概念性的模型,我们了解下即可。
- 物理层
- 电子、定时接口通信信道上的原始 比特流传输。
- 比特流
- 数据链路层
- 物理寻址、同时将原始比特流转变为逻辑传输线路。
- 帧
- 网络层
- 控制子网的运行,入逻辑编址、分组传输、路由选择。
- 分组(数据报)
- 传输层
- 接受上一层的数据,在必要的时候把数据交给网络层,且保证这些数据段有效到达对端
- 数据分段
- 会话层
- 不同机器上的用户之间建立管理会话
- 表示层
- 信息的语法语义以及他们的关联,如加密解密,转换翻译,压缩解压缩
- 应用层
1.2 TCP/IP四层网络模型
四层协议,是我们现在计算机实际使用的体系结构。
- 网络接口层
- 接口1、接口2、
- 网际层
- ip
- 传输层
- tcp、udp
- 应用层
- HTTP、SMTP、DNS
二 应用层
2.1 应用层体系结构
2.1.1 C/S(客户、服务器)结构
2.1.2 P2P(peer to peer) 结构
每个对等端都同时具备C/S应用的客户端与服务器的特征,是一个服务器与客户的结合体,对等端之间直接通信。
2.1.3 混合结构
2.2 应用层通信原理
服务端运行的是服务器进程,被动的等待客户请求服务,而客户端运行的是客户进程,主动发起通信,请求服务器进程提供服务。应用进程间遵循应用层协议交换应用层报文。
2.3 域名系统(DNS domain name system)
它采用的是层次树状结构的命名方法:1.国家顶级域名nTLD;2.通用顶级域名gTLD;3.基础结构域名。
2.3.1 域名解析
2.3.2 域名服务器
它需要建立分布式数据库,存储网络中域名与IP地址的映射关系数据,这些数据都存储在域名服务器上,域名服务器根据用户请求提供域名解析服务。
域名服务器分类:
- 根域名服务器(13套)
- 顶级域名服务器
- 权威域名服务器
- 本地域名服务器
2.3.3 域名解析过程
递归查询:
域名服务器代替客户端向其他域名服务器查询
缺点:
如果有很多计算机,那么服务器的查询压力很大,且每个客户端等着服务器查询结果,那么用户体验很差。
迭代查询:
只是将下一步要查询的服务器告知客户端
PS: DNS 使用UDP协议
2.4 万维网应用
2.4.1 HTTP 协议简介
超文本传输协议,定义浏览器如何向web服务器发送请求以及web服务器如何向浏览器进行响应。版本:HTTP/1.0和HTTP/1.1
2.4.2 HTTP 连接方式
HTTP连接:非持久连接(串行 、并行)、持久连接(非流水、流水)
非持久连接-串行
- 请求html页面
- 服务器收到请求之后,返回html内容
- 然后浏览器解析html ,加入html 需要获取三个图片的内容
- 那么浏览器会再请求服务器,获取图片,然后断开连接
- 然后浏览器会在请求服务器,获取图片,然后断开连接
- 最后浏览器会在请求服务器,获取图片,然后断开连接
非持久连接-并行
- 请求html页面
- 服务器收到请求之后,返回html内容
- 然后浏览器解析html ,加入html 需要获取三个图片的内容
- 浏览器会向服务器同时建立三个tcp请求,然后获取图片
持久连接-非流水方式
- 请求html页面,服务器收到请求之后,返回html,不断开
- 请求获取图片,依次获取三个图片
持久连接-流水方式
- 第一行是请求行;它包含方法(GET HEAD POST OPTION PUT)、url、版本信息、回车换行符
- GET: 请求读取由URL所标识的信息
- HEAD:请求读取由URL所标识的信息首部,无需在响应报文中包含对象
- POST: 向服务器新增信息
- OPTION: 请求一些选项信息
- PUT:在指明URL下存储一个文档
- 首部行:传递给服务器的参数,比如、用户名、密码等等,所以http协议是不安全的
响应报文-从服务器到客户的回答。
- 第一行状态行:它包括:版本、状态码、短语 、回车换行符
- 首部行,返回参数信息
2.4.4 https
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,通过SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。
- 首先客户端通过URL访问服务器建立SSL连接。
- 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- 服务器利用自己的私钥解密出会话密钥。
- 服务器利用会话密钥加密与客户端之间的通信。
缺点
- HTTPS协议多次握手,导致页面的加载时间延长近50%;
- HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
- 申请SSL证书需要钱,功能越强大的证书费用越高。
- SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
2.4.5 Cookie
因为http协议是无状态的,因此我们需要解决用户状态的问题,因此我们引入了cookie文件。小型文本文件,指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。它弥补了HTTP协议无状态性的不足,有利于进行用户跟踪并提供针对性的服务,但也带来了安全问题。
- 浏览器第一次请求服务器,然后服务器判断该请求是否存在cookie id,不存在则生成cookie,然后存到数据库中,然后响应给报文,然后浏览器记录cookie id 到本地文件中
- 第二次浏览器访问服务器的时候是携带cookieid,那么服务器会为cookieid 推送历史数据
2.4.6 session
服务器端的机制,在服务器上保存,
解析客户端请求并操作session id,按需要保存信息
session 实现方式:
- cookie 保存 jsessionId
当cookie 禁用之后使用 url 携带 jsessionId
2.5 电子邮件应用
包括邮件服务器、简单邮件传输协议(SMTP)用户代理和邮件读取协议。
2.5.1 SMTP 协议简介
SMTP 是应用层协议。它使用TCP实现可靠传输 端口是25。
SMTP 执行分为 握手阶段、邮件传输、关闭阶段。2.5.1 邮件格式&MIME多媒体信息
邮件包含首部、空白行、主体3部分。
- To Subject Cc From Date Reply-To
MIME(多用途互联网邮件扩展)
第三版邮局协议: POP3(Post Office Protocol-Version3)
- 互联网邮件访问协议:IMAP(Internet Mail Access Protocol)
-
2.6 FTP应用-文件传输协议
文件传输协议。主要是实现两个主机之间进行文件的传输的协议。C/S模式 ,采用控制连接(21端口)传输控制命令,数据连接(20)传输文件内容.
2.7 P2P应用
P2P :充分聚集利用了端系统的计算能力以及网络传输带宽,对服务器的依赖较小。
三 传输层
3.1 基本服务
传输层的核心任务是:为应用进程之间提供端到端的逻辑通信服务。
主要功能包括: 传输层寻址 —-端口号,我们一把通过端口号去寻址
- 应用层报文的分段和重组:文件太大了我们需要切割,然后还得合并重组
- 报文的差错检测:查询数据是否丢失损坏
- 进程间的端到端可靠数据传输控制: 收到信息,需要一个可靠的应答
- 面向应用层实现复用与分解
- 端到端的流量控制:有的机器处理慢,需要我们进行流量控制
- 拥塞控制:网络堵塞,无法发送信息,采用一些策略减缓发送
传输协议提供逻辑通信服务,传输协议只需在端系统中实现。通信的真正端点并不是主机(主机之间的通信是网络层的事情),而是主机中运行的应用进程。
3.1.1 端口号寻找应用程序
通过端口号,寻找某个应用程序。
传输层端口号为16位整数,包含三类端口:
- 熟知端口号,数值为0-1023。这些是给特定程序使用的,比如80 端口。
- 登记端口号,数值为1024-49151。使用这个范围端口号必须在IANA登记,防止重复
客户端口号或短暂端口号,数值为49152-65535,留给客户进程选择暂时使用
3.1.2 传输层两种协议
无连接服务-UDP
数据传输之前无需与对端进行任何信息交换(不需要握手),直接构造传输层报文,并向接收端发送数据。
面向连接服务-TCP
在数据传输之前,需要双方交换控制信息,建立逻辑连接(需要握手),然后再传输数据,数据传输后还需要拆除连接3.2 传输层的复用与分解
多路复用与多路分解:传输层的一项基本功能,支持众多应用进程共用同一个传输协议,并能够接收到的数据准确交付给不同的应用进程。
3.2.1 无连接服务(UDP)多路复用与分解
UDP套接字:他只需要 <目的IP地址,目的端口号>
UDP套接字的端口号是UDP实现复用与分解的重要依据3.2.2 有连接服务(TCP)多路复用与分解
TCP套接字他需要<源IP地址,源端口号,目的IP地址,目的端口号>
当一个TCP报文段从网络层到达一台主机时,该主机根据这4个值来将报文段分解到相应的套接字。3.3 数据可靠保证
它是数据的可靠性的重要保证。
可靠传输的措施:差错检测:利用差错编码实现数据包传输过程中的比特差错检测
- 确认:接收方向发送发反馈接收状态
- 重传:发送方重新发送接收方没有正确接收的数据,则重传
- 序号:确保数据按序提交
-
3.3.1 停-等协议
每发送一个报文段就停下来等待接收方的确认
停-等协议基本工作过程是: 发送并等待确认:发送方发送经过差错编码和编号的报文段,等待确认方的确认。
- 接收并确认/否认:接收方如果正确接收报文段,即差错检测无误且序号正确,则接收报文段,并向发送方发送ACK,否则丢弃报文段,并向发送方发送NAK。
- 继续发送/重发:发送方如果收到ACK,则继续发送后续报文段,否则重发刚刚的报文段
缺点:
停止-等待机制降低了信道利用率,所以性能很差
解决方案:
流水线协议或管道协议:允许发送方在没有收到确认前连续发送多个分组
- 增加分组序号范围,方便顺序处理
-
3.3.2 滑动窗口协议原理
发送方:
发送12个数据,目前已经发送完1-4 ,并确认
- 5-11 已经发送,但是还没有确认,当5号确认之后,
- 那么5号从发送窗口移出,则滑动窗口右移动一个,即数据12可以发送
3.3.3 滑动窗口协议-回退N步(Go-BACK-N)
发送端口大小较大,可以在未得到确认前连续发送多个分组;但接收窗口大小仅为1.只能接收1个按序到达的分组,未按序到达的分组或者某个分组差错,就会引起发送方重发该分组及其后的分组
3.3.4 滑动窗口协议-选择重传(Selective Repeat,SR)
增加接收方缓存能力(接收窗口>1),缓存正确到达但失序的分组,仅要求发送方重传未被接收方确认的分组,等缺失分组到达后一并向上层按序提交。
3.4 用户数据报协议(UDP)
UDP协议是Internet传输协议,提供无连接、不可靠数据尽力传输服务。
UDP数据结构:
- 源、目的端口号:用于UDP实现复用与分解
- 长度字段:UDP报文段中的 字节数(首部+数据的总和)
- 校验和:接收方用来检测该报文段是否出现了差错
计算校验和:
- 对所有参与运算的内容(包括UDP报文段)按16位(16位对齐)求和。
- 求和过程中遇到的任何溢出(即进位)都被回卷(即进位与和最低位再加)。
-
3.5 传输控制协议(TCP)
TC协议P是Internet传输协议,提供有连接、可靠数据的传输服务。
TCP的报文段结构:3.5.1 三次握手
TCP 连接管理,连接建立的过程-三次握手
SYN 连接请求
- SYNACK确认
- ACK 确认
3.5.2 四次挥手
TCP断开连接的过程-四次挥手
注意中间有一个半关闭的情况,即只关闭了单向连接。
3.5.3 TCP可靠机制
- 差错码、确认、序号、重传、计时器等。
- TCP的可靠数据传输时基于滑动窗口协议,但是发送窗口大小是动态变化的
总结TCP的操作:
- 封装TCP报文
- 发送一个报文段后启动一个计时器
- 通过校验和发现数据的差错
- 通过序号重新排序,丢弃重复的报文段
-
3.5.4 流量控制
TCP连接建立时,双方都为之分配固定大小的缓冲空间,TCP的接收端只允许另一端发送其缓冲区所能接纳的数据。
接收端在给发送端发送确认段时,通知接收窗口大小。
发送端在接下来发送数据段时,确保未确认段的应用层数据总量不超过接收端通知的接收窗口大小,从而确保接收端不会发送缓存溢出。
3.5.5 拥塞控制
窗口机制:通过调整窗口的大小实现对发送数据速率的调整。
- 窗口调整的基本策略:
- AIMD(Additive INcrease,Multiplicative Decrease) 加性增加 乘性减少
- 网络未拥塞,逐渐”加性“,增大窗口大小,当网络拥塞时,”乘性“快速减少窗口大小
TCP的拥塞控制算法:
转发:分组从输入接口转移到输出接口
- 路由选择:决定分组经过的路由或路径
4.2 网络技术
4.2.1 数据报网络
按照目的主机地址进行路由选择的网络
特点: 本质上是不可靠的
- 无连接
- 每个分组作为一个独立的数据报进行传送,路径也可能不同
-
4.2.2 虚电路网络
在网络层提供面向连接的分组交换服务
特点: 可靠的,效率较低 建立一个网络层逻辑连接
- 不需要为每条虚电路分配独享资源(区别于电路交换)
-
4.3 网络互连与网络互联设备
异构网络:两个网络的通信技术和运行的协议不同
异构网络互连的基本策略: 协议转换
-
4.3.1 路由器
4.4 网络拥塞控制
拥塞:一种持续过载的网络状态,此时用户对网络资源(贷款,存储空间,处理能力)的总需要超过了网络固有的容量。
原因: 缓冲区容量有限
- 传输线路的带宽有限
- 网络结点的处理能力有限
- 网络中某些部分发送了故障
4.4.1 流量感知路由
根据网络负载动态调整,将网络流量引导到不同的链路上,均衡网络负载,从而延缓或避免拥塞发生、
解决网络负载的震荡现象:
- 多路径路由
-
4.4.2 准入控制
广泛用于虚电路网络的拥塞预防技术上
基本思想:
对新建虚电路进行审核,如果新建立的虚电路会导致网络变得拥塞,那么网络拒绝建立该新虚电路。拥塞状况的量化。基于平均流量和瞬时流量。4.4.3 流量调节
感知拥塞
- 处理拥塞 :将拥塞信息通知到其上游结点
处理方法:
- 抑制控制:给拥塞数据报的源主机返回一个抑制分组
背压:让抑制分组在从拥塞结点到源结点的路径上的每一跳,都发挥抑制作用。
4.4.4 负载脱落
路由器主动丢弃某些数据
如何选择要丢弃的数据报:丢弃新分组:如GBN
- 丢弃老分组:如实时视频流
4.5 Internet 网络层
4.5.1 IP数据报格式
标识:判断这些分片是否属于同一IP数据报判断
标志:判断是否为最后一个分片
片偏移:判断各分片的先后顺序
IPv4地址长度:32位二进制
点分十进制标记法:
Ipv4 编址分类
网络号+主机号
子网划分:
将一个较大的网划分许多个小网的过程。较大子网具有较短的网络前缀,较小子网具有稍长的前缀。
超网:将具有较长前缀的相对较小的子网合并为一个具有稍短前缀的相对较大的子网。
子网掩码:用来定义一个子网的网络前缀长度。(前半部分全是1,后半本部分全是0)
子网聚合:
动态主机配置协议-DHCP:
为网络的主机提供动态IP地址分配服务
- DHCP服务器发现
- DHCP服务器提供
- DHCP 服务器请求
- DHCP确认
网络地址转换NAT-使用私有地址访问互联网
- 从内网进入互联网的IP数据报:
将其源IP地址替换为NAT服务器拥有的合法的公共IP地址,同时替换源端口号,并将替换关系记录到NAT转化表中。
- 从互联网返回的IP数据报:
依据其目的IP地址与目的端口号检索NAT转换表,得到内部私有IP地址与端口号,替换目的IP地址和目的端口号,然后将IP数据报转发到内部网络。
互联网控制报文协议-ICMP
在主机和路由器间,实现差错信息报告。
ICMP差错报告报文:终点不可达、源点抑制、时间超时、参数问题、路由重定向。
ICMP 询问报文:
回声(echo)请求/应答、时间戳请求/应答
IPV6 (128位):
首部固定40个字节
双协议栈兼容 ipv4 ipv6
隧道技术兼容ipv4 ipv6
4.6 路由算法与路由协议
链路状态的路由选择算法:一种全局式路由选择算法。
每个路由器通过从其他路由器获得的链路状态信息构建出整个网络的拓补图。
计算最短路径-Dijkstra算法
距离向量路由选择算法:
每个结点基于与邻居结点间的直接链路距离,以及邻居交换过来的距离向量,计算并更新其到达每个目的结点的最短距离,然后将新的距离向量再通告给其所有邻居,知道距离向量不再改变。
Bellman-Ford方程:
D(y)<=min{c(x,v)+D(y)}
层次化路由选择
- 划分自治系统
- 网关路由器
- 自治系统间路由协议
内部网关协议:
- RIP:基于距离向量路由算法,跳数作为距离向量,最大距离不能超过15跳,每30秒交换一次距离向量
- OSPF:基于链路状态路由选择算法。
五 网络安全
5.1 什么是加密
加密就是对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“, 密文通过”密钥“解密后还原出原来的明文,通过这样的途径可以达到保护数据不被非法人窃取、阅读的目的。
区分的简单方法就是看编码后的数据是否还能还原,能还原的是加密。
**
MD5 实际上是对数据进行有损压缩,无论数据有多长,1KB、1Mb 还是 1G,都会生成固定 128 位的散列值,并且MD5理论上是不可能对编码后的数据进行还原的,即不可逆。MD5 因为其具有不可逆性、单向恒定性(相同的数据多次计算值不变)被广泛应用于文件完整性验证、口令加密以及接下来会讲到的数字签名中。
5.2 加密分类
5.2.1 对称加密
对称加密是指加密和解密时使用同一个密钥。常见的对称加密算法:DES,AES等。
5.2.2 非对称加密
非对称加密是指加密和解密使用不同的密钥,这两个密钥分别叫做「公钥」、「私钥」。公钥是可以公开给所有人的,而私钥需要自己保密的。公钥加密的数据只能用私钥解密。最常用的非对称加密算法:RSA
也可以私钥签名,公钥验签
- 对称加密风险较大,秘钥网上传递,存在泄漏的风险。
- 非对称加密,开放公钥,但是因为公钥是开放的,因此需要签名验证,防止篡改。
- 非对称加密,缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
5.2.3 签名验证
因为数字签名属于非对称加密,非对称加密依赖于复杂的数学运算,包括大数乘法、大数模等等,耗时比较久。如果数据量大的时候计算数字签名将会比较耗时,所以一般做法是先将原数据进行 Hash 运算,得到的 Hash 值就叫做「摘要」。「摘要」就像人的指纹一样,可以代表一个人,只要内容发生了改变,计算出来的摘要也应该变化。「摘要」最好是不可逆转的,一般使用开头提到的 MD5 作为 Hash 函数,MD5 输出的结果固定位 128 位。
PS: 所以我们最好对数据的「摘要」进行签名,这样,其他人就算解开签名,拿到的也是「摘要」,如果摘要是不可逆转的,也就是无法从摘要反推出原文,也就达到了保密的作用。
- 如果用A公钥解密,得到「摘要1」,证明确实是 A 发的
- 然后再对邮件内容使用相同的散列函数计算「摘要2」,与上面得到的「摘要1」进行对比,两者一致就说明信息未被篡改
PS:这里有问题就是如何证明这个公钥就是A 的,或者说如何防止被冒充,那就需要第三方认证。数字证书
5.2.4 数字证书
证书颁布机构(CA),CA 会将:证书的颁布机构、有效期、公钥、持有者(subject)等信息,用CA的私钥进行签名,并且将签名结果和这些信息放在一起,这就叫做「数字证书」。
PS : CA 的公钥也是需要使用证书来分发的,所以 的电脑必须安装 CA 的证书,证书里包含了 CA 的公钥。
收到 A 发过来的数字证书后,B 使用 CA 的公钥进行验证,验证通过即证明这确实是 A 证书,也就可以使用证书中包含的 A 的公钥。
总结:**
- 安全肯定是非对称加密安全,但是效率比较慢,对称加密效率高,但是不安全。
- 严谨一点的做法是混合起来使用,将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
- 实际工作中直接使用非对称加、解密其实也可以,因为我们平时一般请求的报文不会很大,加解密起来速度在可接受范围内,或者可以对敏感字段,比如密码、手机号、身份证号等进行分段加密,效率还可以。
六 CDN 加速
CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。CDN有别于镜像,因为它比镜像更智能,或者可以做这样一个比喻:CDN=更智能的镜像+缓存+流量导流。
CDN的实现需要依赖多种网络技术的支持,其中最主要的包括负载均衡技术、动态内容分发与复制技术、缓存技术等。
工作原理:
- 用户向localDNS发起请求查询输入域名对应的IP地址(若有缓存直接返回,否则去rootDNS查询)
- localDNS迭代向rootDNS查询,逐级迭代,rootDNS=>顶级DNS=>权限DNS
- 获得权限DNS后,localDNS向权限DNS发起域名解析请求;
- 权限DNS通常会将域名CNAME【如果有有CNAME则解析CNAME对应的CDN服务,否则的话默认为普通请求,直接返回解析到的IP】到另一个域名,这个域名最终会被指向CDN网络中的智能DNS负载均衡系统;
- DNS负载均衡系统通过一些智能算法,将最合适的CDN节点IP地址返回给localDNS;
- localDNS将获得的IP地址返回给用户;
- 用户得到节点的IP地址后,向该节点发起访问请求;
- CDN节点返回请求文件,如果该节点中请求的文件不存在,就会再回到源站获取这个文件,然后返回给用户。