面试八股文-计算机网络篇

OSI七层模型和TCP/IP四层协议概述

OSI七层模型协议

20230703141100

帧结构

20230703141556

各层级之间的作用

网络层:

关键协议:IP协议、ICMP协议

  • 主机之间的通信,目的是向上提供简单灵活、无连接的、最大努力的交付的数据报服务,网络层不提供服务质量的承诺
  • 不需要建立连接
  • 每个数据报单独路由
  • 每个数据报有完整的目标地址
  • 不提供可靠的连接
  • 到达终点可能无序
  • 每终点进行差错控制

传输层:

关键协议:TCP协议、UDP协议

  • 主机间进程之间的通信,向应用层提供通信服务,屏蔽下面的核心网的网络细节,使得面向传输层编程就像二个主机之间有一条端到端的逻辑通信信道一样
  • 传输层使用TCP协议的时候,这个逻辑通信信道是可靠的,尽管下面的网络是不可靠的

应用层:

关键协议:HTTP协议、FTP协议、SMTP协议、DNS

  • 定义了运行不同端系统上的应用程序如何互相传递报文
  • 提供了不同应用之间的通信

TCP/IP四层协议

20230703141236

HTTP版本的演进

graph LR
A(HTTP0.9/1991)
B(HTTP1.0/1996)
C(HTTP1.1/1997)
D(HTTP2.0/2015)
A-->B
B-->C
C-->D
HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2.0
HTTP协议原型 广泛使用 长连接 性能进一步提升
设计缺陷 增加多种方法 管道化 二进制分帧
只支持Get 支持多种多媒体对象 缓存处理 多路复用
不支持多媒体 无连接、无状态 断点传输 首部压缩
只有HTML对象 服务端推送

keep-alive长连接

20230703162008

2.0多路复用

一个信道上传输多路信号或者数据流的过程和技术,采用多路复用技术,通信运营商考研避免维护多条线路,有效节约运营成本。

  • 二进制分帧是基础,通信单位为帧

  • 多请求并行,不依赖多TCP连接

  • 并行在一个TCP连接,交互多种类型信息

2.0头部压缩

HTTP/2 协议由两个 RFC 组成:一个是 RFC 7540,描述了 HTTP/2 协议本身;一个是 RFC 7541

哈夫曼编码压缩

2.0服务推送

服务器可以对一个客户端请求发送多个响应,服务器向客户端推送资源无需客户端明确地请求。并且,服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤

常见的HTTP状态码、报文结构、请求方法

报文结构

20230703153437

请求方法

  • GET:最常用方法,请求服务器资源

  • HEAD:与Get类似,但是响应只返回首部

  • POST:向服务器写入数据

  • TRACE:观察请求报问到达服务器的最终样子

  • PUT:写入(更新)服务器资源

  • DELETE:删除URL所指定的资源

  • OPTIONS:…资源支持操作的方法

  • 幂等操作:幂等操作只其任意多次执行所产生与一次执行的影响相同

  • 幂等函数:使用相同参数重复执行,并能获得相同结果的函数

HTTP状态码

状态码 含义
200~299 成功状态码
300~399 重定向状态码
400~499 客户端错误状态码
500~599 服务器错误状态码

常见:

状态码 含义
204 OK, 请求没问题,实体主体有所请求的资源
204 No content,响应报问有首部和状态行,没有实体的主体
304 Not Modified 请求资源未修改,服务器返回此状态码,不会返回任何资源
400 Bad Request 客户端请求错误,服务器无法理解
401 Unauthorized 请求客户端获得资源的访问之前,需要认证
403 Forbidden 请求被服务器拒绝
404 Not Found 服务器找不到所请求的URL
500 Internal Server Error 服务器内部错误
502 Bad Gateway 网关或者代理服务,从远程服务器收到一个无效的响应
503 Server Unavailable 服务器无法提供服务(服务器宕机)
504 Gateway Timeout 网关服务器,未即使从远端服务器获取请求

安全传输

对称加密

也称为对称密码,是指在加密和解密时使用同一密钥得加密方式

DES、AES、3DES

非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。 公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。

RSA、ECC、DH

散列算法

又称散列算法、哈希函数,是从任何一种数据创建小的数字“指纹”。散列函数把消息压缩成摘要,使得数据量变小,讲数据的格式固定下来

哈希算法是不允许逆向

HTTPS协议基础-TLS技术

TLS:传输层安全协议(Transport Layer Security),综合了对称加密、非对称加密技术设计的安全协议

数字证书

  • 互联网中标识各方身份信息的一个数字认证,人们可以网上来识别对方身份

  • 可信任组织颁发给特定对象的认证

  • 格式:证书序列号、签名算法、有效期、对象名称、对象公开密钥…

20230703161240

流程

20230703161455

20230703161539

DNS域名系统工作流程

DNS系统(Domain Name system):存储域名和IP互相映射,是一个分布式数据库,提供更好的访问互联网

  • DNS以点、字母和数字组成
  • 点组成不同域
  • 有顶级域名、二级域名、三级域名

DNS工作原理:

graph LR
A(本地DNS)
B(根域名服务器)
C(顶级域名服务器)
D(权威域名服务器)
A-->B
B-->C
C-->D

20230703162719

DNS安全

DNS劫持

预防:不使用DNS自动获取,使用固定权威DNS服务器

20230703191844

DNS欺骗

伪造了权威服务器

20230703191917

DDoS攻击

  • DNS本质是一种程序
  • 物理设备容量有承载极限
  • 超过容量导致宕机
  • 出现拒绝服务工具(denial-of-service attack),消耗目标主机的资源,让用户无法正常访问

TCP、UDP协议

UDP协议

16位源端口号、16位目的端口号

TCP协议

序号:

  • 4个字节
  • TCP数据流是字节流–每个字节都有唯一的序号
  • 起始序号在建立TCP连接的时候设置
  • 序号表示本报文段的第一个字节的序号

确认号:

  • 和序号一致–四个字节
  • 期待收到对方下一个报文的第一个数据字节序号
  • 若确认号=N,则序号N-1为止的所有数据都已经正确收到

控制位:

控制位 含义
URG Urgent;紧急位,URG=1,表示紧急数据
ACK Acknowledgement;确认位,ACK=1,确认号才生效
PSH Push;推送位,PSH=1,尽快地把数据交付给应用层
RST Reset;重置位,RST=1,重新建立连接
SYN Synchroniation;同步位,SYN=1,连接请求报文
FIN Finish;终止位,FIN=1,释放连接

窗口:

  • 2字节
  • 窗口指明允许对方发送的数据量
  • 数据缓存空间有限,不能无限缓存数据

20230703194446

UDP TCP
性能 负载低 负载高
速度
实现难度 简单 复杂
应用场景 简单 复杂
面向连接 无连接 有连接
可靠性 不可靠 可靠

应用场景:

应用 应用层协议 传输层协议
名字转换 DNS UDP
文件传送 TFTP(简单文件传输协议) UDP
流式多媒体通信 - UDP
IP地址配置 DHCP UDP
电子邮件 SMTP(简单邮件传送协议 TCP
文件传送 FTP TCP
远端终端接入 TELNET TCP
WWW HTTP TCP

TCP连接的过程(三次握手)

  • 第一次,SYN=1,请求同步并告诉对方自己的数据序列号
  • 第二次,SYN=1,ACK=1,确认对方的数据并且告诉自己的数据序列号
  • 第三次,ACK=1,确认对方的数据并开始传输数据

20230703204315

TCP释放连接(四次挥手)

  • 第一次,FIN=1,主动请求中断
  • 第二次,ACK=1、ack=u+1,表示确认收到中断报文
  • 第三次,FIN=1、ACK=1、seq=w,ack=u+1,请求中断连接
  • 第四次,ACK=1、seq=u+1,ack=w+1,确认中断连接
  • TIME-WAIT状态,这个时候,主动方尚未完全关闭TCP连接,端口不可复用
  • MSL(Max Segment Lifetime):最长报文段寿命RFC 793标准时间设置位2min

20230703225005

为什么TIME-WAIT状态需要等待2MSL?

  1. 最后一个报文没有确定
  2. 确认没有一个ACK报文一定能达到对方
  3. 2MSL时间内,如果没有达到对方,那么对方会重新进行三次挥手,确保连接正常释放
  4. 确保当前所有连接的报文都已经过期

滑动窗口的工作过程

停止-等待协议

  • 最简单的可靠传输协议
  • 对信道的利用效率不高

20230703230353

连续ARQ(Automatic Repeat reQuest)协议

滑动窗口

20230703231224

拥塞避免算法

什么是网络拥塞

在某一段时间内,若对网络中的某一资源(带宽、缓存、处理机等)的需求超过了该资源所能提供的可用部分,网络性能就会变坏,这种情况称为网络拥塞。

满开始与拥塞避免

拥塞窗口(cwnd):拥塞窗口是TCP协议基于窗口的拥塞控制需要的一个变量配置。发送方在发送数据的时候维护一个拥塞窗口的状态变量,并且可以动态改变,在TCP报文头部,发送方让自己的发送窗口等于拥塞窗口

门限值(ssthewah):拥塞避免算法启动阈值,当拥塞窗口cwnd超过门限ssthres时,启动慢启动算法

传输轮次(Route-Trip):一次报文发送和确认的时间称为一次传输轮次,RTT(Route-Trip-Time)定义一次传输轮次的往返时间

20230703232138

快重传与快恢复

快重传:让发送方尽早知道个别报文文段的丢失,并立即重传,以避免发送方认为网络发生了拥塞,从而拥塞避免算法降低发送数据

  • 不是捎带确认,而是立即确认

  • 对丢失报文多次重复确认

    20230703232433

    快恢复:

    20230703232542

TCP粘包

什么是粘包

指TCP协议中,发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

Nagle算法

使用通过减少数据包的方式提高TCP传输性能的算法

粘包拆包发生场景

因为TCP是面向流,没有边界,而操作系统在发送TCP数据时,会通过缓冲区来进行优化,例如缓冲区为1024个字节大小。

如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题。

如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包。

TCP协议粘包拆包问题是因为TCP协议数据传输是基于字节流的,它不包含消息、数据包等概念,需要应用层协议自己设计消息的边界,即消息帧(Message Framing)。如果应用层协议没有使用基于长度或者基于终结符息边界等方式进行处理,则会导致多个消息的粘包和拆包。

SYN flood攻击

攻击原理

  • 利用三次握手的过程漏洞
  • 大量发送第一次握手(假IP)的报文
  • 攻击方忽略第二次握手的报文
  • 被攻击方多个TCP连接处于(SYNC-RCVD)阶段,耗费大量资源
  • 最终因为资源耗尽,拒绝服务(DoS)

VPN(虚拟专用网)

VPN的隧道协议主要有三种,PPTP、L2TP和IPSec,其中PPTP和L2TP协议工作在OSI模型的第二层,又称为二层隧道协议;IPSec是第三层隧道协议。
按VPN的应用分类:
(1)Access VPN(远程接入VPN):客户端到网关,使用公网作为骨干网在设备之间传输VPN数据流量;
(2)Intranet VPN(内联网VPN):网关到网关,通过公司的网络架构连接来自同公司的资源;
(3)Extranet VPN(外联网VPN):与合作伙伴企业网构成Extranet,将一个公司与另一个公司的资源进行连接。