一. 概述·

1. 分层模型·

OSI模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP模型:网络接口层、网际层、传输层、应用层

应用层:为特定应用程序提供数据传输服务,数据单位为报文

表示层:对数据进行加密、压缩和转换,将不同计算机系统中的数据转换为一致的格式

会话层:控制通信会话的建立、管理和终止

传输层:负责主机中的两个进程通信,提供端到端的可靠传输、流量控制、差错控制等

网络层:为分组交换网上的不同主机提供数据传输服务,把传输层产生的报文段或用户数据报封装成分组

数据链路层:为相邻节点提供数据传输服务,把网络层传下来的分组封装成

物理层:考虑的是怎样在传输媒体上传输数据比特流,尽可能屏蔽传输媒体和通信手段的差异

微信消息是怎么发出去?从计算机网络层次模型的角度回答

  1. 应用层:微信客户端将消息封装成应用层的数据包,比如使用HTTP协议或者微信自己的应用层协议。
  2. 表示层:对消息进行加密。
  3. 会话层:建立一个会话。
  4. 传输层:应用层数据包被传输层进一步封装。传输层主要使用TCP或UDP协议。
  5. 网络层:传输层数据包会被封装成IP数据包,包含源IP地址和目的IP地址,并通过互联网路由到目的地。
  6. 数据链路层:IP数据包在这一层加上头部尾部,封装成帧。
  7. 物理层:数据链路层的帧在物理层被转换成电信号,通过物理媒介实际传输。

2. 性能指标·

速率:数据的传输速率,单位是b/s

带宽:单位时间内信道能传输的数据量,单位是b/s

吞吐量:单位时间通过网络的实际数据量,单位是b/s

时延:数据从网络的一端传送到另一端所需的时间,包括发送时延、传播时延、排队时延、处理时延

时延带宽积:信道可以容纳的比特数,等于传播时延*带宽

往返时间:双向交互一次所需的时间

利用率:信道利用率指出某信道有百分之几的时间是被利用的,网络利用率则是全网络的信道利用率的加权平均值,利用率过高就会产生非常大的时延

3. 通信方式·

客户-服务器(C/S):客户是服务请求方,服务器是服务提供方

对等连接(P2P):不区分客户和服务器

4. 交换技术·

电路交换:在通信双方之间建立一条专用的物理通路,数据在两个终端之间连续传输,直到通信结束释放连接。最典型的电路交换网络是传统电话网络,优点是传输速度快且稳定,缺点是信道利用率较低。

优点:通信时延小;有序传输没有冲突;控制简单。

缺点:建立连接时间长;效率低,灵活性差。

报文交换:交换节点接收并存储整个报文,然后转发到下一个节点,直至目的地,是存储-转发类型的交换方式。优点是信道利用率高,缺点是传输效率较低。

优点:无需建立连接。提高线路的利用率。

缺点:引起了转发时延。需要较大的存储缓存空间。

分组交换:交换节点接收并存储报文分组,然后转发到下一个节点,直至目的地,是存储-转发类型的交换方式。优点是信道利用率和传输效率高,缺点是不稳定性较高。

优点:无需建立连接。线路利用率高。

缺点:引起了转发时延。可能会出现失序、丢失、或重复分组

二、物理层·

1. 信道复用技术·

频分复用(FDM):每个信号被分配一个特定的频率范围,所有用户在相同时间内占用不同频带

时分复用(TDM):将时间分割成多个时隙,每个信号在特定的时隙内传输,所有用户在不同时间内占用相同频带

波分复用(WDM):用于光纤通信,将不同波长的光信号复用到一根光纤中传送

码分复用(CDM):每个信号使用唯一的编码序列,使其共存并互不干扰,所有用户可以在相同时间内使用相同频带进行通信

码分多址(CDMA):将每一个比特时间划分为m个短的间隔,称为码片

  • 为每个站分配一个唯一的m bit码片序列,如果要发送比特1,则发送它自己的码片序列,如果要发送比特0,则发送该码片序列的二进制反码,总的发送信号为每个站的发送信号之和。
  • 每个站分配的码片序列各不相同且互相正交,任意一个码片序列与自身的内积为1,与反码的内积为-1。
  • 接收站将发送站的码片序列与收到的信号求内积,结果为1说明发送了1,结果为-1说明发送了0,结果为0说明没有发送数据。

三. 数据链路层·

1. 三个基本问题·

封装成帧:在一段数据的前后分别添加首部和尾部

透明传输:无论什么样的比特组合的数据,都能够按照原样没有差错地通过

差错检测:在发送的比特序列中加入适当的冗余度,使得接收端能够发现传输中是否发生差错

  • 循环冗余检验:发送端在数据后面添加n个0,再除以n+1位的除数,将n位余数作为冗余码添加在数据后面。接收端把收到的每一个帧都除以同样的除数,检查得到的余数是否为0。

2. 点对点协议PPP·

组成:IP数据报的封装方法,链路控制协议LCP,网络控制协议NCP

过程:建立物理层连接,LCP配置协商,鉴别身份,NCP配置协商,链路打开,链路终止

3. CSMA/CD协议·

多点接入:许多计算机以多点接入的方式连接在一根总线上

载波监听:在发送数据之前和发送数据之中,每个站都必须不停的检测信道

碰撞检测:适配器边发送数据边检测信道上的信号电压的变化情况

  • 争用期:总线的端到端往返传播时延
  • 截断二进制指数退避算法:令k=Min[重传次数,10]k=Min[重传次数,10],从集合[0,1,...,(2k1)][0,1,...,(2^k-1)]中随机取出一个数r,重传应推后的时间为r倍的争用期

局域网中的数据采用 CSMA/CD 协议。

WIFI 无线网中采用 CSMA/CA 协议。

4. 虚拟局域网VLAN·

定义:由一些局域网网段构成的与物理位置无关的逻辑组

作用:缩小局域网的广播域范围,提高局域网的安全性

5. 自动重传请求ARQ·

停止等待协议(SW):发送方每次只能发送一帧数据,必须等到接收方的确认信息才能发送下一帧,超时则重传这一帧。

后退N帧协议(GBN):采用窗口机制,发送方每次可以发送N帧数据,接收方采用累积确认的方式,对按序到达的最后一个分组发送确认,失序或超时则重传所有未被确认的数据。

选择重传协议(SR):采用窗口机制,发送方每次可以发送N帧数据,接收方逐帧发送确认并缓存失序的帧,超时则重传未被确认的数据。

6. 设备·

中继器,集线器,双绞线:物理层

网桥:数据链路层

交换机:通常是数据链路层,根据功能也可以在网络层,传输层。

网卡:一半物理层,一半数据链路层

路由器:网络层

网关:应用层

防火墙:网络层,会话层,应用层。

VPN:数据链路层,网络层(IPSec)

IDS:应用层,网络层

四、网络层·

1. 两种服务·

虚电路服务(Virtual circuit):当两台计算机进行通信时,应当先建立连接,双方沿着已建立的虚电路发送分组

数据报服务:每个分组独立发送,选择路由进行转发,在分组传送的过程中有丢失的可能

2. 两个层面·

数据层面:路由器根据生成的转发表,把收到的分组从查找到的对应端口转发出去

控制层面:路由器和相邻的路由器交换路由信息,创建出本路由器的路由表

软件定义网络SDN:分离数据层面和控制层面,使用集中控制器来进行路由决策和网络管理,路由器只负责转发分组

3. 中间设备·

集线器:工作在物理层,半双工模式。每个端口仅仅简单地转发比特,不进行碰撞检测,使用集线器的以太网在逻辑上仍是总线网

交换机:工作在数据链路层,全双工模式。每个端口直接与一台主机或另一台交换机相连,交换机能同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体那样,无碰撞地传输数据。

路由器:工作在网络层,具有路由选择分组转发功能

网关:工作在网络层以上,需要在高层进行协议的转换

4. IP地址·

格式:网络号+主机号=32位

  • 网络号全0表示本网络,网络号127保留作为本地软件环回测试
  • 主机号全0表示网络地址,主机号全1表示该网络上的所有主机

分类:A类(网络号8位,0开头)、B类(网络号16位,10开头)、C类(网络号24位,110开头)、D类(多播地址,1110开头)、E类(保留地址,1111开头)

CIDR:使用斜杠后跟一个数字来表示子网掩码,可以更加有效地分配IP地址空间

路由聚合:在路由器的转发表中,把许多前缀相同的地址块用一个较大地址块来代替

IPv6:地址长度128位,内置IPsec,首部长度固定,定义了许多可选的扩展首部。

ipv4与ipv6的区别

  • 地址类型:IPv4具有三种不同类型的地址:多播,广播和单播。IPv6还具有三种不同类型的地址:任播,单播和多播。
  • 地址长度: 32;128
  • IP 报头:ipv4报头有20-60 个字节的可变长度;ipv6报头长度为固定的40字节。

为什么有了MAC地址还要有IP地址?

​ 只拥有MAC地址的话,只有在同一网络区域内,才能进行数据传输,不能跨网络区域。两点不在一个网络内,这时就需要IP地址了。

5. 地址解析协议ARP·

工作在网络层

工作过程

  • 主机检查ARP表,查看是否已经有目标IP地址对应的MAC地址
  • 如果没有,主机在本网段上广播发送一个ARP请求数据包,包含源主机的IP地址、MAC地址及目标主机的IP地址
  • 其他主机检查目标IP地址字段是否与自己的IP地址一致,如果是,则将源主机的地址映射存储到ARP表中,并向源主机发送一个ARP响应数据包,包含自己的IP地址和MAC地址
  • 源主机收到ARP响应数据包后,将目标主机的地址映射存储到ARP表中

6. 路由选择协议·

路由信息协议(RIP):基于距离向量算法,每个路由器维护自己到其他网络的最短距离,每隔固定时间和相邻路由器交换信息,交换的信息是自己现在的路由表。缺点是坏消息传播得慢

开放最短路径优先(OSPF):基于链路状态算法,每个路由器向自治系统中所有路由器发送信息,发送的信息是相邻路由器链路状态,构建一个完整的链路状态数据库。使用Dijkstra计算最短路径

区别

  • RIP适用于小型互联网,收敛速度慢;OSPF适用于大型互联网,收敛速度快
  • RIP按固定时间间隔交换信息,OSPF只在链路状态发生变化时交换信息
  • RIP通过跳数来确定最佳路径,OSPF允许管理员给每条路由指派不同的代价
  • RIP分组使用UDP用户数据报传送,OSPF分组使用IP数据报传送

边界网关协议(BGP):基于路径向量算法,和其他自治系统的边界路由器交换网络可达性信息,用于在不同自治系统之间进行路由选择

7. 分组转发·

工作过程

  • 从收到的分组的首部提取目的主机的IP地址
  • 若查找到特定主机路由,则按照这条路由的下一跳转发分组
  • 从转发表中网络前缀最长的一行开始依次检查,将这一行的子网掩码与目的地址进行按位与运算,若结果与前缀匹配,则按照这条路由的下一跳转发分组
  • 若转发表中有一个默认路由,则把分组传送到指明的默认路由器,否则报告转发分组出错
  • 在得到下一跳的IP地址后,将其送交数据链路层转换为MAC地址,写入帧首部传送到下一跳的数据链路层,再取出数据部分交给网络层

8. 网际控制报文协议ICMP·

功能:允许主机或路由器报告差错情况和提供有关异常情况的报告

分类:ICMP差错报告报文(终点不可达,时间超过,改变路由)、ICMP询问报文(回送请求/回答,时间戳请求/回答)

应用

  • PING:用来测试两台主机之间的连通性
  • tracert:跟踪一个分组从源点到终点的路径

9. 虚拟专用网VPN·

定义:在公用网络上建立专用网络,进行加密通讯

分类:内联网VPN、外联网VPN、远程接入VPN

VPN工作在网络层

10. 网络地址转换NAT·

定义:通过路由器将本地IP地址转换为外部IP地址

工作在传输层

NAPT:利用端口号,使多个主机可以共用一个外部IP地址

五、传输层·

1. 端口·

硬件端口:不同硬件设备进行交互的接口

软件端口:应用层的各种协议进程与运输实体进行层间交互的地点

2. 用户数据报协议UDP·

定义:一种无连接、不可靠的通信协议,数据单位为用户数据报

特点

  • 支持一对一、一对多、多对一和多对多的通信服务
  • 一次交付一个完整的报文,对应用层交下来的报文添加首部后直接向下交付IP层
  • 计算检验和时需要添加伪首部,把首部和数据部分一起检验

3. 传输控制协议TCP·

定义:一种面向连接、可靠的通信协议,数据单位为报文段

特点

  • 只支持一对一的通信服务,提供全双工通信
  • 将应用程序交下来的数据看成无结构的字节流,不保证发送和接收的数据块具有对应大小关系
  • 连接的端点为套接字,即(IP地址:端口号)

TCP 实现可靠传输的实现方法:停止-等待协议、TCP连接管理、确认机制、超时重传、流量控制以及拥塞控制等

停止等待协议:

发送方发送一个数据包后,就会停止发送并等待接收方的确认,只有在收到接收方的确认后,才会发送下一个数据包。

TCP 和 UDP 的区别

  • TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务
  • TCP面向字节流,UDP面向数据报
  • TCP 没有UDP速率快、实时性高
  • TCP 通常一对一通信,UDP可以一对多通信。
  • TCP 的首部开销大,首部最小 20 字节,最大 60 字节;UDP 的首部开销小,只有 8 字节

4. TCP流量控制·

定义:让发送方的发送速率不要太快,要让接收方来得及接收

方法滑动窗口机制

  • 发送窗口:在没有收到确认的情况下,可以连续把窗口内的数据都发送出去
  • 接收窗口:临时存储不按序到达的数据,等缺少的数据收到后,再按序交付上层的应用进程
  • 累积确认:对按序收到的数据中的最高序号给出确认
  • 超时重传:重传所有未被确认的数据

5. TCP拥塞控制·

定义:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载

方法:发送方维持拥塞窗口

  • 慢开始:每经过一个传输轮次,拥塞窗口的大小加倍,直至达到门限值
  • 拥塞避免:每经过一个传输轮次,拥塞窗口的大小加1,超时则调整门限值为拥塞窗口的一半,执行慢开始算法
  • 快重传:当发送方连续收到三个重复确认时,立即重传丢失的报文段
  • 快恢复:在快重传之后,调整门限值为拥塞窗口的一半,执行拥塞避免算法

6. TCP连接管理·

三次握手

  • 客户端选择初始序列号,发送一个SYN=1,seq=xSYN=1,seq=x连接请求报文段给服务端
  • 服务端收到报文,如果同意建立连接,则选择初始序列号,发送一个SYN=1,ACK=1,seq=y,ack=x+1SYN=1,ACK=1,seq=y,ack=x+1确认报文段给客户端
  • 客户端收到报文,发送一个ACK=1,seq=x+1,ack=y+1ACK=1,seq=x+1,ack=y+1确认报文段给服务端,此时连接成功建立

四次挥手

  • 客户端选择初始序列号,发送一个FIN=1,seq=uFIN=1,seq=u连接释放报文段给服务端
  • 服务端收到报文,选择初始序列号,发送一个ACK=1,seq=v,ack=u+1ACK=1,seq=v,ack=u+1确认报文段给客户端。此时客户端到服务端的连接已经释放,但服务端仍可以发送数据
  • 服务端的数据发送完毕,选择初始序列号,发送一个FIN=1,ACK=1,seq=w,ack=u+1FIN=1,ACK=1,seq=w,ack=u+1连接释放报文段给客户端
  • 客户端收到报文,发送一个ACK=1,seq=u+1,ack=w+1ACK=1,seq=u+1,ack=w+1确认报文段给服务端
  • 服务端收到报文后立即释放连接,客户端等待2MSL2MSL(最长报文段寿命)后释放连接

常见问题

  1. 为什么不采用“两次握手”建立连接?

    防止已失效的连接请求报文段突然又传送到服务端。例如服务端收到了客户端已失效的连接请求,在发送SYN+ACKSYN+ACK报文后就为其分配了资源,造成了服务端资源的浪费。

  2. 为什么不采用“三次挥手”释放连接?

    TCP是全双工通信,每个方向上的连接都需要单独关闭

    防止已失效的连接释放报文段突然又传送到服务端。例如服务端收到了客户端已失效的释放请求,在发送FIN+ACKFIN+ACK报文后就立即断开连接,影响当前的通信。

  3. 为什么建立连接是三次握手,关闭连接却是四次挥手呢?

    建立连接时,服务端可以将SYN+ACKSYN+ACK放在一个报文里。释放连接时,服务端收到FINFIN报文时,只代表客户端不会再发送数据,而服务端还有可能继续发送数据,所以此时服务端的ACKACKFINFIN不能同时发给接收方。

  4. 为什么客户端最后还要等待2MSL2MSL

    保证客户端发送的最后一个确认报文段能够到达服务端。如果客户端发送的ACKACK报文丢失,服务端会重发FIN+ACKFIN+ACK报文,往返的最长时间是2MSL2MSL

    使本连接持续的时间内产生的所有报文段都从网络中消失,使下一个新的连接中不会出现旧的连接请求报文段。

  5. 如果已经建立了连接,但客户端突然出现故障了怎么办?

    TCP设有一个保活计时器,服务器每收到一次客户端的请求都会复位这个计时器,若客户端长时间没有反应,服务器就认为客户端出现故障,关闭连接。

六、应用层·

1. 域名系统DNS·

域名服务器

  • 根域名服务器:负责管理顶级域名服务器的域名和IP地址
  • 顶级域名服务器:负责管理特定顶级域名下的二级域名
  • 权威域名服务器:负责管理一个区的域名
  • 本地域名服务器:缓存特定域名与IP地址的映射信息

查询过程

  • 用户在浏览器中输入一个域名
  • 浏览器或操作系统检查本地域名缓存
  • 浏览器向配置的本地域名服务器发送查询请求
  • 根域名服务器发送查询请求,返回相应顶级域名服务器的IP地址
  • 向顶级域名服务器发送查询请求,返回相应权威域名服务器的IP地址
  • 向权威域名服务器发送查询请求,最终获取域名对应的IP地址,将其保存并返回给发起查询的客户端

递归查询:域名服务器收到查询请求,向其他域名服务器继续发出请求,最终返回查询结果,查询工作由域名服务器完成

迭代查询:域名服务器收到查询请求,返回另一台域名服务器地址,客户端再向这台域名服务器发出请求,查询工作由客户端完成

DNS 根服务器只有 13 台,亚洲唯一在日本

2. 超文本传送协议HTTP·

统一资源定位符(URL):协议 : // 主机名 : 端口 / 路径

从输入url到显示页面的过程:DNS解析,TCP连接,客户端发送HTTP请求报文,服务器返回HTTP响应报文,浏览器解析渲染页面

HTTP请求

  • GET方法:用来从服务器获取资源,请求数据附加在URL后面,传输的数据量较小
  • POST方法:用来更新服务器的资源,请求数据位于HTTP报文的请求体中,可以传输更大的数据量,安全性较高

Cookie:在HTTP服务器和客户端之间传递的状态信息

  • HTTP1.0:(非持续性连接)
  • HTTP1.1:(持续性连接)(默认流水线)先来先服务(FCFS)
  • HTTP2:划分成帧,多路复用,调度帧以减轻阻塞,根据优先级来传输数据而不是 FCFS
  • HTTP2 之前还是 TCP 服务,TCP 连接没有安全性;
  • HTTP3 是基于 QUIC 协议,出现了 UDP 服务,增加了安全性

HTTP HTTPS 的区别

​ HTTPS 是基于 HTTP 的加密传输协议,使用 SSL 或 TLS 协议对 HTTP 进行加密,使得传输过程更加安全可靠。过使用公钥加密和私钥解密的方式,对客户端和服务器之间的通信进行加密保护,使得第三方无法轻易获取和篡改传输的数据。

主要区别如下:

(1)安全性:HTTP 不进行数据加密,数据以明文形式传输,容易被拦截、窃取和篡改;而 HTTPS 通过加密技术对数据进行加密,通信过程更加安全。

(2)协议端口:HTTP 默认使用 80 端口进行通信,而 HTTPS 默认使用 443 端口进行通信。

(3)证书认证:HTTPS 使用数字证书来验证网站的身份,确保通信的安全性和可信度,防止中间人攻击等安全问题;而 HTTP 不需要进行证书认证。

(4)网络性能:由于 HTTPS 需要进行数据加密和解密操作,相比 HTTP 会增加一定的计算和传输开销,因此可能会稍微降低网络性能。

3. DHCP动态主机配置协议·

Dynamic Host Configuration Protocol

DHCP位于OSI参考模型的应用层,使用UDP协议进行通信。

工作过程:

  1. DHCP Discover:客户端广播一个 Discover 消息,寻找网络上的 DHCP 服务器。
  2. DHCP Offer:一个或多个 DHCP 服务器响应客户端的请求,提供 Offer 消息,包含 IP 地址和其他网络配置信息。
  3. DHCP Request:客户端选择一个 DHCP 服务器的 Offer,并发送 Request 消息,请求该服务器提供的配置。
  4. DHCP Ack:被选中的 DHCP 服务器确认客户端的请求,并发送 Ack 消息,正式分配 IP 地址和网络配置。