Published on

计算机网络

Authors
  • avatar
    Name
    游戏人生
    Twitter

网络体系结构

OSI 体系结构(7层)

为了使全世界不同体系结构的计算机能够互联,国际化标准组织 ISO 提出开放系统互联基本参考模型,简称OSI,即所谓的7层协议体系结构。

  • 应用层
  • 表示层
  • 会话层
  • 运输层
  • 网络层
  • 数据链路层
  • 物理层

TCP/IP体系结构(四层)

由实际应用发展总结出来的,因特网从1983年开始使用TCP/IP协议族。(事实上的国际标准)

  • 应用层
  • 运输层
  • 网际层(网络层,在网络层使用的协议是IP协议(中文:网际协议),因此TCP/IP体系结构的网络层也常称为网际层)
  • 网络接口层

五层体系结构

五层模型只出现在计算机网络学习教学过程中,是对七层模型和四层模型的一个折中,综合了OSI和TCP/IP 体系结构的优点,这样既简洁又能将概念阐述清楚。

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

各层级对应协议

层级协议
应用层http 超文本传输协议
smtp 电子邮件协议
ftp 文件传输协议
telnet 远程登陆协议
dns 域名系统
运输层TCP 传输控制协议
UDP 用户数据报协议
网络层IP 协议

域名系统(DNS)

域名系统包含根域名顶级域名二级域名三级域名四级域名等。

每一级域名都包含一个域名服务器,域名服务器一共有四类:

  • 顶级域名服务器
  • 根域名服务器
  • 权威域名服务器
  • 本地域名服务器

DNS查询有两种方式

  • 迭代查询
  • 递归查询

域名解析记录类型包含

  • A记录 将域名指向一个 IPV4 地址
  • MX记录 将域名指向邮件服务器地址
  • CNAME记录 将域名指向另外一个域名
  • TXT记录 文本长度限制512,通常做 SPF 记录
  • NS记录 将子域名指定其他 DNS 服务器解析

HTTP协议

HTTP 超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议。基于TCP/IP通信协议来传递数据。

HTTP 状态码

  • 1xx 服务端收到请求,但需要客户端再发一个请求以进行后续动作
  • 2xx 服务端收到请求并处理成功
  • 3xx 临时请求,需要进一步细化 重定向
  • 4xx 客户端发起请求出现了问题
  • 5xx 服务端处理请求出现了问题

HTTP 1.0

1.0的HTTP版本,是一种无状态,无连接的应用层协议。 HTTP1.0 规定浏览器和服务器保持短暂的链接。

  • 无法复用连接,每次请求都会建立一个新的TCP连接
  • 队头阻塞,后一个请求必须得在前一个请求响应之后才能发起
  • 没有 host 域

HTTP 1.1

  • 默认支持长连接,增加了 Connection 字段,通过设置 Keep-Alive 保持HTTP连接不断卡
  • 管道化(假并行传输) 后一个请求可以在前一个请求响应前发起,但请求的响应必须与发起顺序相同
  • 增加了缓存处理(强缓存、协商缓存)
  • 增加了Host字段,允许一个服务端同时处理多个Web站点的请求
  • 由于长连接会给服务器造成压力

HTTP 2.0

  • 二进制分帧

    在应用层和传输层之间增加一个二进制分层帧,将请求header和body通过二进制编码分帧后传输,从而提升性能改进传输性能

  • 多路复用(真并行传输),

    可以在一个连接中并行请求,并通过帧头的stream id来进行消息组装和请求归属

  • 头部压缩

    使用HPACK算法进行头部压缩

  • 服务器推送

    服务端可以主动向客户端推送消息

HTTP 3.0

Google 搞了一个基于 UDP 协议的 QUIC 协议,并且使用在了HTTP/3上, HTTP/3之前的名称为 HTTP-over-QUIC。

  • 0-RTT — QUIC协议相比HTTP2.0的最大优势

    缓存当前会话的上下文,下次恢复会话时,只需将之前的缓存传递给服务器,验证通过,即可进行传输

  • 多路复用

    QUIC基于UDP,一个连接上的多个stream之间没有依赖,即使丢包,只需要重发丢失的包即可

  • 更好的移动端表现

    而QUIC是通过ID识别链接,无论网络环境如何变化,只要ID不变,就能迅速重连

  • 加密认证的报文

    武装到牙齿

  • 向前纠错机制

    每个数据包除了它本身的内容之外还包括了其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传

HTTPS

概念

安全超文本传输协议

HTTPS 利用 HTTP 协议位于应用层,底层可以调用多种协议的可扩展性,通过调用SSL安全套接字层/TLS(传输层安全协议)保证数据传输的安全(SSL就是TLS的前身,TLS 在 SSL 基础上做了部分优化,所以文章后面直接用 TLS 代称 SSL/TLS)因此 HTTPS 在 TCP 三次握手之后还需要进行 TLS 握手,并且二者之间还有一个区别是 HTTP 默认端口是 80 且性能较低,而 HTTPS 是 443 且性能较高基于 HTTP + SSL/TLS)。

优点

  • 数据完整性

    内容传输会进行完整性校验

  • 数据加密性

    内容经过对称加密,每一个链接生成唯一密钥

  • 身份认证

    第三方无法伪造客户端(服务端)的身份

加密方式

  • 对称加密

    同一个密钥可以同时用作信息的加密和解密(算法公开、计算量小、加密速度快、加密效率高)

  • 非对称加密

    需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)私有密钥(private key,简称私钥)

  • 非对称加密+对称加密

    先通过对称加密来加密报文,再通过非对称加密来加密对称加密的密钥

数字签名

数据摘要

数据摘要(也称为数字指纹)是指通过一种算法将任意长度的数据转换成固定长度的二进制字符串。这个转换过程使得不同的数据很难产生相同的数字指纹,同时保证相同的数据始终能够生成相同的数字摘要

特点

  • 唯一性

    理论上,不同的数据生成的数字摘要应该是唯一的,即使数据中只有微小的差异,生成的数字指纹也会有显著的变化

  • 不可逆性

    数字指纹的生成算法具有不可逆性,不能通过数字指纹还原出原始数据,这样可以保持原始数据的机密性

  • 固定长度

    生成的数字指纹具有固定的长度,不论输入数据多长,都会生成指定长度的数字指纹。

  • 敏感性

    对于输入数据的微小改动,生成的数字指纹也会有较大的差异,这使得数字指纹可以用于检测数据是否被篡改

数字签名

数字签名是一种用于验证电子文档或数据完整性和真实性的技术手段。它类似于传统纸质文件的签名,在数字领域提供了身份认证、数据完整性保护和防止抵赖等功能。

基本原理如下

  • 私钥和公钥

    数字签名使用非对称加密算法,签名者拥有一对密钥,一个私钥,用于生成数字签名;一个公钥,用于验证签名

  • 数据摘要

    签名者首先对原始数据进行哈希计算,生成唯一的数据摘要,数据摘要的作用是将数据压缩成固定长度的字符串,具备唯一性和不可逆性

  • 数字签名生成

    签名者使用私钥对数据摘要进行加密操作,生成数字签名,只有使用对应的公钥才可以验证数字签名的合法性

  • 数字签名验证

    接收者获取到原始数据、数字签名和签名者的公钥。接收者使用签名者的公钥(CA公钥是公开的)对数字签名进行解密操作,得到解密后的数据摘要。然后,接收者对原始数据进行同样的哈希计算,生成新的数据摘要。最后将两个数据摘要进行比较,如果相同,则说明数据完整且未被篡改,数字签名有效

签名流程图示

验证流程图示

数字证书

数字证书由CA机构颁发,并且会在系统和浏览器中预装根证书。

TCP / UDP

TCP

TCP 是一种面向有连接可靠的基于字节流的传输层协议,能够对自己提供的连接实施控制,适用于要求可靠传输的应用,例如文件传输。每次数据传输都需要先建立连接

特点

  • 面向连接

    一定是“一对一”才能连接,TCP协议无法实现一个主机向多个主机发送消息,即一对多是无法实现的

  • 可靠的

    无论网络链路中出现怎样的链路变化,TCP都能保证一个报文一定能到达接收端

  • 字节流

    • (1)当使用TCP协议进行传输时,数据传输可能会被操作系统分组成多个TCP报文,如果接收方不知道数据的边界,就无法读取出一个有效的数据。
    • (2)同时TCP的报文是有序的,当接收方先接收到后一个报文,前一个报文没有收到时,也不能交给应用层去处理
    • (3)当TCP接收到重复的TCP报文时,会自动丢弃重复的报文,只保留一个

TCP原理

TCP的可靠性传输是由确认应答机制超时重传机制来实现的。

  • 1)、确认应答机制(安全机制)

    确认应答机制是发送端发送数据给接收端,接收端收到数据后给发送端发送一个应答报文。

  • 2)、超时重传机制(安全机制)

  • 3)、连接管理机制(安全机制)

    在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。

  • 4)、滑动窗口机制(效率机制)

    使用滑动窗口机制,一次发送多条数据,可以提高性能(将多个段的等待时间重叠在一起)操作系统开辟发送缓冲区,确认应答的才会从缓存区清空。

  • 5)、流量控制机制

    接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段,通过ACK端通知发送端;窗口大小字段越大,说明网络的吞吐量越高;

    接收端一旦发现自己的缓冲区快满了,就将窗口大小设置成一个更小的值通知给发送端;发送端接受到这个窗口之后,就会减慢自己的发送速度;

    如果接收端缓冲区满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端

  • 6)、拥塞控制(安全机制)

    虽然 TCP 有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据。但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题。TCP引入 慢启动机制,先发少量的数据,了解网络拥堵状态,再决定按照多大的速率传输数据。

  • 7)、延迟应答(效率机制)

    如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小 。窗口越大,网络吞吐量就越大,传输效率就越高

  • 8)、捎带应答(效率机制)

    基于延时应答的基础上,引入的。ACK是立即就要返回的,但是由于延时应答,业务上也有一个响应的报文,就将二者合并打包发送。

UDP

UDP 是一种面向无连接的、不可靠的面向数据报的传输层协议,不会对自己提供的连接实施控制,适用于实时应用。

特点

  • 提供无连接的,尽最大可能的数据传输服务
  • 无连接,不保证可靠的交付
  • 面向报文
  • 没有拥塞控制,即使网络阻塞依然不影响发送速率
  • 支持一对一、一对多、多对多传输

三次握手与四次挥手

TCP 提供面向连接的服务,在传送数据之前必须先建立连接(三次握手),数据传送结束后要释放连接(四次挥手)。

三次握手

  • 第一次

    客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)

  • 第二次

    服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接

  • 第三次

    客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

SYN 标志数为 1,表示建立 TCP 连接;ACK表示验证字段

四次挥手

  • 第1次挥手

    客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;

  • 第2次挥手

    服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;

  • 第3次挥手

    服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;

  • 第4次挥手

    客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手

FIN 标志位为1,表示断开TCP连接

CDN

CDN 即内容分发网络,在距离用户更近的地方设置缓存服务器,当用户访问资源时,由该缓存服务器返回资源,从而提升响应速度。

当用户访问CDN地址时,请求会先打到CDN负载均衡服务器上,再由该服务器选择一台CDN缓存服务器去请求资源。

CDN的缓存除了受缓存时间到期自动刷新外,也支持用户手动刷新。

CDN的好处除了提升响应速度,还包含隐藏源服务器IP、分散请求压力等。