[学习笔记] - 计算机网络

因特网概述

  • 网络:局域网
  • 互联网:局域网的网络
  • 因特网:全球最大的一个互联网

Internet具有两个重要特点:连通性(connectivity)和共享(Sharing)

注释

本文几乎总结了计算机网络全部知识点,请自行Ctrl + F进行搜索,获取自己需要的部分

多层次ISP结构

英特网组成

边缘部分

由所有连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。这些主机又称为端系统 (end system)
主机A与主机B进行通信实际上指:运行在主机A上的某个程序和运行在主机B上的另一个程序进行通信。

端系统(主机)之间的通信方式通常可划分为两大类:

  • 客户-服务器方式(C/S方式)
  • 对等方式(P2P方式)

核心部分

由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)

数据交换方式

交换方式 特点
电路交换 需要先建立连接比特流连续的从原点直达终点,随后释放连接
报文交换 整个报文传送至相邻结点,全部储存下来后查找转发表,转发至下一个结点
分组交换 单个分组传送到相邻结点,存储后查找转发表,转发至下一个节点(存储转发)

在 20 世纪 40 年代,电报通信也采用了基于存储转发原理的报文交换 (message switching)。
报文交换的时延较长,从几分钟到几小时不等。现在报文交换已经很少有人使用了。

电路交换

每一部电话都直接连接到交换机上,而交换机使用交换的方法,让电话用户彼此之间可以很方便地通信。
所采用的交换方式就是电路交换 (circuit switching)。

电路交换必定是面向连接的。
电路交换分为三个阶段:

  1. 建立连接:建立一条专用的物理通路,以保证双方通话时所需的通信资源在通信时不会被其他用户占用
  2. 通信:主叫和被叫双方就能互相通电话
  3. 释放连接:释放刚才使用的这条专用的物理通路(释放刚才占用的所有通信资源)

分组交换

分组交换网以分组作为数据传输单元。

  1. 依次把各分组发送到接收端(假定接收端在左边)
  2. 每一个分组的首部都含有地址(诸如目的地址和源地址)等控制信息。
  3. 分组交换网中的结点交换机根据收到的分组首部中的地址信息,把分组转发到下一个结点交换机。
  4. 每个分组在互联网中独立地选择传输路径
  5. 用这样的存储转发方式,最后分组就能到达最终目的地。

互联网核心部分中的路由器之间一般都用高速链路相连接,而在网络边缘的主机接入到核心部分则通常以相对较低速率的链路相连接。
主机的用途是为用户进行信息处理的,并且可以和其他主机通过网络交换信息。路由器的用途则是用来转发分组的,即进行分组交换的。

路由器处理分组的过程是:

  1. 把收到的分组先放入缓存(暂时存储);
  2. 查找转发表,找出到某个目的地址应从哪个端口转发;
  3. 把分组送到适当的端口转发出去。

计算机网络的类别

性能指标可以从不同的方面来度量计算机网络的性能

作用范围

  • 广域网 WAN (Wide Area Network):作用范围通常为几十到几千公里。
  • 城域网 MAN (Metropolitan Area Network):作用距离约为 5 ~ 50 公里。
  • 局域网 LAN (Local Area Network) :局限在较小的范围(如 1 公里左右)。
  • 个人区域网 PAN (Personal Area Network) :范围很小,大约在 10 米左右。

使用者

  • 公用网 (public network):按规定交纳费用的人都可以使用的网络。因此也可称为公众网。
  • 专用网 (private network):为特殊业务工作的需要而建造的网络。

拓扑结构

环状(Ring) 网状(Mesh) (星状)Star 全连通(Fully Connected) 线形(Line) 树状(Tree) 总线(Bus)

交换方式

  • 电路交换网
  • 报文交换网
  • 分组交换网

工作方式

  • 资源子网
  • 通信子网
  • 接入网

计算机网络性能

性能指标

  • 速率:连接在计算机网络上的主机在数字信道上传送数据位数的速率
    • 信道:一个接收端一个发送端就是一个信道
  • 带宽:数据通信领域,数字信道所能传输的最高速率
  • 吞吐量:单位时间内通过某个网络的数据量
  • 时延
    • 发送时延:数据块长度(比特)/ 信道带宽(比特/秒)
    • 传播时延:信道长度(米)/ 信号在信道上的传播速率(米/秒)
    • 处理时延:网络结点存储转发处理时间
    • 排队时延:网络结点缓存队列排队时间
  • 时延带宽积:传播时延 * 带宽(能够承载的数据量)
  • 往返时间:从发送方发送数据开始,到发送方收到接收方确认
  • 利用率
    • 信道利用率:有数据通过时间 /(有+无)数据通过时间
    • 网络利用率:信道利用率加权平均值

非性能指标

  • 费用
  • 质量
  • 标准化
  • 可靠性
  • 可扩展性
  • 可升级性
  • 维护与管理

体系结构

  • ISO:国际标准化组织
  • OSI/RM:互联网法律上的国际标志
  • TCP/IP Suite:因特网事实上的国际标准
  • Network Protocols:数据狡猾 遵守的规则、标准或约定
  • 网络体系结构:计算机网络各层及其协议的集合

OSI 7层模型

层次 中文 英文 作用 获取信息
7 应用层 Application Layer 能够产生网络流量,能够和用户交互的应用程序
6 表示层 Presentation Layer 加密 压缩
5 会话层 Session Layer 服务端和客户端建立的会话
4 传输层 Transport Layer 可靠传输建立会话 不可靠传输 TCP/UDP协议, 端口
3 网络层 Network Layer IP地址变址 选择最佳路径 IP地址
2 数据链路层 Data Link Layer 输入如何封装 添加物理层地址 MAC MAC地址
1 物理层 Physical Layer 电压 接口标准

开放系统信息交换

  • 实体:交换信息的硬件或软件进程
  • 协议:控制两个对等实体通信的规则
  • 下层向上层提供服务,上层 需要使用下层提供的服务来实现本层的功能
  • 相邻两层实体间交换信息的地方

五层协议对应的数据单元

数据片段在各层网络结构中采用的形式就称为协议数据单元(Protocol Data Unit, PDU)

  • 应用层:传输数据单位PDU
  • 传输层:运输层报文
  • 网络层:IP数据报
  • 数据链路层:数据帧
  • 物理层:01

数据通信的基础知识

  • 通信的目的时传送消息
  • 数据:运送消息的实体
  • 信号:数据的电气的或电磁的表现
    • 模拟信号:代表消息的参数的取值是连续的
    • 数字信号:代表消息的参数的取值是离散的
  • 码元:在使用时间域的波形表示数字信号时,则代表不同离散数值的基本波形成为码元

信道

表示向一个方向传送信息的媒体。

  • 单向通信:只能由一个方向的通信而没有反方向的交互
  • 双向交替通信:通信的双方都可以发送信息,但不能双方同时发送、接受
  • 双向同时通信:通信的双方可以同时发送和接受消息

基带信号丨带通信号

  • 基带信号:来自信源的信号,像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。基带信号就是发出的直接表达了要传输的信号的信号,声波就是基带信号。
  • 带通信号:把基带信号经过载波调制后,把信号的频率范围搬移到较高的频段以便在信道中传输。

传输距离较近的时候,计算机网络一般采用基带传输。

调制方法

  • 调幅(AM):载波的振幅随着基带数字信号而变化
  • 调频(FM):载波的频率随着基带数字信号而变化
  • 调相(PM):载波的初始相位随着基带数字信号而变化

常用编码

  • 单极性不归零码:只使用一个电压值,用高电平表示1,没电压表示0
  • 双极性不归零码:用正电平和负电平分别表示二进制数据的1和0,正负幅值相等
  • 双极性归零码:正负零三个电平,信号本身携带同步信息
  • 曼切斯特编码:信号低-高为0,高-低为1
  • 差分曼切斯特编码:bit与bit直接有信号跳变为0,没有信号跳变为1

信道的极限容量

奈氏准则

在任何信道中,码元传输的速率是上限的,否者就会出现码间干扰的问题,使接收双端对码元的判决成为不可能。
理想低通信道的最高码元传输速率:2WBaud

  • W是理想低通信道的带宽,单位为Hz
  • Baud是波特,是码元传输速率的单位

波特

Bit是信息量,如果一个码元含有3个Bit信息量,1波特=3Bit/s

香农公式

香农用信息论的理论推导出了带宽受限且高斯白噪声干扰的信道的极限无差错的信息传输速率
信道的极限信息传输速率C可表达为

C=Wlog2(1+S/N)b/sC = Wlog_2(1+S/N) \quad b/s

  • W为信道的带宽(Hz)
  • S为信道内所传信号的平均功率
  • N为信道内部的高斯噪声功率

香农公式表明:

  • 信道的带宽或信道中的信噪比越大,则信息的极限传输速率就越高
  • 只要信息传输速率低于信道的极限信息的传输速率,就一定可以找到某种办法来实现无差错的传输
  • 若信道带宽W或信噪比S/N没有上限(实际不能实现),则信道的极限信息传输速率C也就没有上限
  • 实际信道上能够达到的信息传输速率要比香农的极限传输速率低不少

物理层

物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。
物理层的主要任务描述为:确定与传输媒体的接口的一些特性,即:

  • 机械特性:接口形状,大小,引线数目
  • 电气特性:规定电压范围(-5V,+5V)
  • 功能特性:规定-5V表示0,+5V表示1
  • 过程特性:规定建立连接时各个相关部件的工作

导向传输媒体

导向传输媒体中,电磁波沿着固体媒体传播

  • 双绞线
    • 屏蔽双绞线STP
    • 无屏蔽双绞线UTP
  • 同轴电缆
    • 50Ω同轴电缆:用于数字传输,由于多用于基带传输,也叫基带同轴电缆
    • 75Ω同轴电缆:用于模拟传输,即宽带同轴电缆
  • 光缆

非导向传输媒体

非导向传输媒体就是指自由空间,其中的电磁波传输被称为无线传输

  • 地面微波接力通信
  • 卫星通信

集线器

工作特点:

  • 在网络中只起到信号放大和重发作用,目的是扩大网络的传输范围,不具备信号的定向传送能力
  • 最大传输距离:100M
  • 集线器是一个大的冲突域

信道复用技术

  • 频分复用丨FDM:频分复用的所有用户在同样的时间占用不同的带宽资源(不同频率)
  • 时分复用丨TDM:时分复用的所有用户在不同的时间占用同样的带宽资源
  • 码分复用丨CDM:各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰(手机信号)

宽带接入技术

用户要连接道互联网,必须先连接到某个ISP,以便获取上网所需的IP地址。

标准模拟电话信号的频带被限制在 300~3400Hz的范围内,但用户本身实际可通过的信号频率任然超过1Mhz
xDSL技术把0~4Khz低端频谱留给传统电话使用,而把原来没有利用的高端频谱留给用户上网使用

  • ADSL
  • 光纤同轴混合网HFC
  • FTTx技术

数据链路层

数据链路层使用的信道主要有以下两种类型:

  • 点对点信道:使用一对一的点对点通信方式
  • 广播信道:使用一对多的广播通信方式

链路丨数据链路

  • 链路:是一条点对点的物理线路段,中间没有任何其他点
    • 一条链路只是一条通路的一个组成部分
  • 数据链路:需要通信协议来控制这些数据,把实现这些协议的硬件和软件加到链路上,即为数据链路
    • 现最常用的方法是使用适配器(网卡)来实现协议和硬件和软件
    • 一般适配器都包括了数据链路层和物理层这2层功能

数据链路层传输的基本单位

封装成帧

  • 封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧,确定帧的界限
  • 根据首部和尾部的标记,从比特流中识别帧的开始和结束

为了提高帧的传输效率,应当使帧的数据部分长度尽量大于首部和尾部的长度。
最大传输单元MTU(Maximum Transfer Unit):帧数据部分长度上限。

当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。ASCII码是7位编码,一共可以组合成128个不同的ASCII码,其中可打印的有95个,而不可打印的控制字符有33个。(可打印的字符就是可以在键盘上输入的字符,我们使用的标准键盘有47个键可输入94个字符,包括使用shift键,加上空格键,一共可以输入95个可打印字符)

透明传输

当传送的帧是用文本文件组成的帧时(文本文件中的字都是从键盘上输入的),其数据部分显然不会出现像SOHEOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。

如果数据中的某个字节的二进制代码恰好和SOHEOT这种控制字符一样,数据链路层就好错误地"找到帧的边界",把部分帧收下(误以为是个完整的帧),而把剩下的那部分数据丢弃。

为了解决透明传输问题,字节填充法或字符填充:在控制字符SOHEOT的前面插入一个转义字符ESC(其十六进制编码是1B,二进制是00011011)。而接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。

差错控制

传输过程中可能会产生比特差错

  • 1可能变成0
  • 0可能变成1

因此,在计算机网络传输数据时,必须采用各种差错控制技术。目前在数据链路层广泛使用了**循环冗余检验(CRC)**的检错技术

循环冗余检验

CRC算法的基本思想是将传输的数据当做一个位数很长的数。将这个数除以另一个数。得到的余数作为校验数据附加到原数据后面。

  • 仅用循环冗余检验CRC差错检验技术只能做到无差错接受
  • 可靠传输需要假设确认重传
    • 帧重复
    • 帧丢失
    • 帧乱序
  • CRC是一种无比特差错,而不是无传输差错的检验机制,由应用程序实现可靠传输
帧检验序列FCS

6、23、4 可以看做一个2进制数: 00000110000101110000001000000110 00010111 00000010
假如被除数选9,二进制表示为:10011001
则除法运算可以表示为:

最后的余数为1,叫做FCS。如果我们将这个余数作为校验和的话,传输的数据则是:6、23、4、1
CRC 算法和这个过程有点类似,不过采用的不是上面例子中的通常的这种除法。在CRC算法中,将二进制数据流作为多项式的系数,然后进行的是多项式的乘除法。

以太网的两个标准

MAC帧(DIX Ethernet V2):

  • DIX Ethernet V2是世界上第一个局域网产品的规约
  • IEEE 802.3 标准
    • DIX Ethernet V2标准与IEEE 802.3标准只有很小的差别,因此可以将802.3局域网简称为"以太网"
    • 严格来说,以太网是指符合DIX Ethernet V2标准的局域网

为了使数据链路层能更好地适应多种局域网标准,802委员会将局域网的数据链路层才分为两个子层

  • 逻辑链路控制LLC子层
    • 不管采用何种协议的局域网对LLC子层来说都是透明的
  • 媒体接入控制MAC子层
    • 与接入道传输媒体有关的内容都归属于MAC子层

由于TCP/IP体系经常使用的局域网使DIX Ethernet V2而不是802.3标准中的几种局域网,因此现在802委员会制定的逻辑链路控制子层LLC的作用已经不大。

以太网提供的服务

  • 以太网提供的服务使不可靠的交付
  • 当接收站收到有差错的数据帧使丢掉此帧,差错纠正由高层决定

PPP协议

用户使用拨号电话接入因特网时,一般都是使用PPP协议

PPP协议需满足要求:

  • 简单(首要)
  • 封装成帧
  • 透明性
  • 多种网络层协议
  • 多种类型链路
  • 差错检测
  • 检测连接状态
  • 最大传送单元
  • 网络层地址协商
  • 数据压缩协商

不需要满足要求:

  • 纠错
  • 流量控制
  • 序号
  • 多点线路
  • 半双工或单工链路

PPP协议有三个组成部分

  • 数据链路层协议可以用于异步串行或同步串行介质
  • 使用LCP(链路控制协议)建立并维护数据链路连接
  • 网络控制协议(NCP)允许在点对点连接上使用多种网络层协议

PPP协议帧格式

  • 标志字段:第一个字段和尾部的第二个字段为标志字段F(Flag)
  • 地址字段:地址字段A只置为0xFF(预留)
  • 控制字段:控制字段C规定为0x03(预留)
  • 协议字段
    • 0x0021:IP数据报
    • 0xC021:PPP数据链路控制协议LCP的数据
    • 0x8021:网络层的控制数据
    • 0xC023:信息字段是安全性认证PAP
    • 0xC025:信息字段是LQR
    • 0xC223:信息字段时安全性认证CHAP
  • FCS字段:CRC的帧校验序列FCS

PPP协议透明传输

字节填充
  • 将信息字段中出现的每个0x7E字节转变为2字节序列(0x7D0x5E
  • 若信息字段中出现一个0x7D字节,则将其转变为2字节序列(0x7D0x5D
  • 若信息字段中出现ASCII码的控制字符,则在该字符前加入0x7D,同时将该字符的编码加以改变
零比特填充

PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特位连续发送),而不是异步发送(逐字符发送),采用零比特填充实现透明传输

  • 发送段:每当发现5个连续1,则立刻填入一个0
  • 接收端:每当发现5个连续1,就把这5个连续1后的一个0删除。

PPP协议的工作状态

  • 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接
  • PC 机向路由器发送一系列的 LCP 分组(例如拨号的账户和密码。封装成多个 PPP 帧)
  • 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机
  • 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接

CSMA/CD协议

  • 多点接入:表示许多计算机以多点接入的方式连接在一根总线上
  • 载波监听:指每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发送碰撞。

碰撞检测

计算机边发送数据边检测信道上的信号电压大小

  • 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大
  • 当一个站检测到的信号电压摆动值超过一定门限值时,就认为总线上至少有2个站在同时发送数据,产生了碰撞

检测道碰撞后

  • 总线上传输的信号产生了严重的失真,无法恢复处有用的信息
  • 发送碰撞后,就要立刻停止发送,免得浪费网络资源,然后等待一段时间再继续发送

重要特性

  • 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)
  • 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性
  • 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率

争用期

  • 最先发送数据帧的站,在发送数据帧后至多经过时间2τ2\tau(两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞
  • 以太网的端到端往返时延2τ2\tau称为争用期,或碰撞窗口,一般取51.2us
  • 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
  • 对于10Mb/s以太网,争用期内可发送512bit(64字节)
  • 若前64字节未发生冲突,则后去数据也不会发送冲突

最短有效帧长

  • 如果发送冲突,则一定是在前64字节内
  • 由于会立刻停止,发送的数据一定小于64字节
  • 于是以太网规定最短有效帧长为64字节,长度小于64字节的帧都是由于冲突而异常终止的无效帧

二进制指数类型退避算法

发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据

  • 确定基本退避时间,一般是取为争用期2τ2\tau
  • 定义重传次数kkk10k \leq 10,即k=min(重传次数,10)k = min(\text{重传次数}, 10)
  • 从整数集合[0,1,...,(2k1)][0, 1, ..., (2^k -1)]中随机地取出一个数,记为rr。重传所需的时延就是rr倍的基本退避时间
  • 当重传达16次仍不能成功时即丢弃该帧,并向高层报告

以太网的信道利用率

以太网的信道被占用的2种情况

  • 争用期长度为2τ2\tau,即端到端传播时延的2倍,检测到碰撞后不发送干扰信号
  • 帧长为L(bit),数据发送速率为C(b/s),发送时间为L/C = T(s)

一个帧从开始发送,经可能发生的碰撞后,将再重传无数次,到发送成功且信道为空闲时为止,时发送一帧所需的平均时间。
要提高利用率,就需要要以下值尽可能的小

a=τTa = \frac{\tau}{T}

  • aa越小表示发送碰撞就立即可以检测出来,并立刻停止发送,因而信道利用率高
  • aa越大表示争用期所占比增大,每一次碰撞就会浪费更多信道资源,因而信道利用率低

对以太网参数的要求

  • 当数据率一定时,以太网的连线的长度收到限制,否则τ\tau的数值会太大
  • 以太网的帧长不能太短,否则TT的值会太小,导致aa值变大

信道利用率的最大值

  • 理想情况下,各站发送的数据不会发生碰撞
  • 发生一帧占用线路的时间时T+τT+\tau,而帧本身的发送时间时TT

Smax=TT+τ=11+aS_{max} = \frac{T}{T+\tau} = \frac{1}{1+a}

MAC地址

802标准所说的地址,严格的应当是每个站的名字标识符

  • IEEE的注册管理机构RA负责向厂家分配地址字段的前三个字节
  • 地址字段中的后三个字节由厂家自行指派,称为扩展标识符,必须保证生产出来的适配器没有重复地址
  • 一个地址块可以生成2242^{24}个不同的地址,这种48位地址称为MAC-48,通用名称位EUI-48
  • MAC地址实际就是适配器上的EUI-48

适配器从网络上每收到一个MAC帧就首先用硬件检查MAC帧中的MAC地址

  • 如果是发往本站的帧则收下,再处理
    • 单播帧(一对一)
    • 广播帧(一对ALL)
    • 多播帧(一对多)
  • 不是则直接丢弃

无效MAC帧

  • 帧的长度不是整数个字节
  • 用收到的帧检验序列FCS查出有差错
  • 数据字段的长度不在64-1500字节之间
  • 有效的MAC帧长度为64-1518字节之间

对于检测出的无效MAC帧就直接丢弃,以太网不负责重传丢弃的帧

帧间最小间隔

帧间最小间隔为9.6us,相当于96bit的发送时间
一个站再检测到总线开始空闲后,还需要等待9.6us才能再次发送数据,这样是为了等待刚刚收到数据帧的站的接受缓存即使清理,做好接受下一帧的准备。

扩展以太网

单纯的物理层次扩展以太网,会导致站点增多,碰撞的机会急速增加,降低效率

网桥

通过过滤非通过其他冲突域的帧进行扩展

好处

  • 过滤通信量
  • 扩大了物理范围
  • 提高了可靠性
  • 可互连不同物理层,不同MAC子层和不同速率的局域网

坏处

  • 储存转发增加了时延
  • 在MAC子层并没有流量控制功能
  • 具有不同MAC子层的网段桥接在一起时,时延更大
  • 网桥只适合用户数不多和通信量不太大的局域网,否则可能堵塞
STP生成树协议

交换机为了冗余、带宽提升等可能会导致环路的产生,以太网的转发机制决定了不能有环路的产生,否则数据帧会一直在环路中被转发。
多链路形成环路的问题:

  • 形成广播风暴
  • 多重复帧复制
  • MAC地址表不稳定

STP运行原理:通过阻断冗余链路将一个有环路的桥接网络修剪成一个无环路的树形拓扑结构
能够确保数据帧在某一时刻从一个源出发,到达网络中任何一个目标的路径只有一条,而其他的路径都处于非激活状态(不能进行转发),如果在网络中发现某条正在使用的链路出现故障时,网络中开启了STP技术的交换机会将非激活状态的阻塞端口打开,恢复曾经断开的链路,确保网络的连通性。

  1. 选择根桥(根交换机)
    • BPDU(桥协议数据单元)中BID最小的就是根交换机
    • BID = 桥优先级 + 桥MAC地址
  2. 选择根端口RP:从离根桥最近的端口选
    • 每台非根桥,要选择一个端口用来连接到根桥,这就是根端口
    • 根端口只能在非根交换机上选取的。
    • 选择的依据是: 首先比较开销Q,其次比较PID(端口ID)
  3. 选择指定端口DP:在每一个交换机之间的链路上选择一个端口,作为指定端口。
    • 选择的依据同根端口
  4. 设置根端口、指定端口转发状态,其他端口设为阻塞状态

通过上述四部,就可以形成无环路的网络。

\color{blue}{\bullet}:端口初始化或使能
\color{red}{\bullet}:端口禁用或链路失效
\color{green}{\bullet}:端口被选为RP或DP
\color{orange}{\bullet}:端口不再是RP或DP
\color{purple}{\bullet}:转发延迟计时器超时

状态 作用
禁用 不收发任何报文
阻塞 不接受也不转发帧,接受但发送BPDU,不学习MAC地址
倾听 不接受也不转发帧,接受并且发送BPDU,不学习MAC地址
学习 不接受也不转发帧,接受并且发送BPDU,学习MAC地址
转发 接受并转发帧,接受并且发送BPDU,学习MAC地址
STP计时器
  • Hello Time:根桥发送BPDU之间的时间间隔,也是网络初始化的时候,每个网桥发送各自的BPDU的时间间隔
  • Forwarding Time:指一个端口Listening和Learning的各自时间,默认为15s
  • Max Age:存储BPDU最长的时间,超过这个时间端口接受不到BPDU,就会采取相应的措施。这个时间默认为20s

这三个时间在拓扑稳定后都是由根桥发出的,由根桥在全网统一计时器,在根桥修改才有效。

VLAN

交换机的使用使得VLAN的创建成为可能
虚拟局域网(VLAN):实由一些局域网网段构成的与物理位置无关的逻辑组

  • 这些网段具有某些共同的需求
  • 每一个VLAN的帧都有一个明确的标识符,指明发送这个帧的工作站时属于哪一个VLAN

如上图,我们可以无视物理距离,把一些站点分为一个VLAN,方便我们进行管理。

跨交换机VLAN

交换机端口有2种类型:

  • 访问端口:只能属于某一个VLAN,只能承载某一个VLAN的流量,连接访问端口的链路称为访问链路
  • 中继端口:能够同时承载多个VLAN的流量,连接中序端口的链路称为干道链路。
ISL标记

虚拟局域网协议允许在以太网的帧格式中插入一个4字节的标识符称为VLAN标记,用来指明发送该帧的工作站属于哪一个虚拟局域网

  • 使用ISL头和CRC封装Frames
  • 支持1024个
  • VLAN字段
  • BPDU bit

高速以太网

物理介质

速率到达或超过100Mb/s的以太网称为高速以太网
在双绞线上传送100Mb/s基带信号的星型拓扑以太网,仍使用IEEE 802.3 的CSMA/CD协议。100BASE-T以太网又称为快速以太网

  • 10/100/1000:用单位MHz表示网线设计的频率。即100MHz。MHz的值越大,网线所支持的速度就越快
  • BASE:指的就是基带。表示没有使用频分复用或者其它频率转换技术,每一个信号在一个单一频率上完全控制线缆
  • 数字T/F/C等:一般数组表示传输长度
    • T代表承载信号的物理介质是双绞线缆
      • UTP(Unshielded Twisted Pair,非屏蔽双绞线)
      • STP(Shielded Twicted Pair,屏蔽双绞线)
    • 在这里每一对传送信号的双绞线互相缠绕以(FEXT和NEXT之间)减少电磁干扰和串扰
    • F表示光纤
  • 最后的字母或数字(4/X等):在同一种传送速率下有多种不同的标准,它们之间以一个字母或数字跟随T/F/C之后的方式来区隔(例如TX)。它显示了网线的结构并指出包含的绞线对的数量。某些高速标准使用同轴电缆,则分配代号为CX。

100Base-T

可在全双工方式下工作而无冲突发生。因此,不使用CSMA/CD协议。MAC帧格式仍然时802.3标准规定的
保持最短帧长不变,但将一个网段的最大电缆长度减小到100M,帧间时间从9.6us变为0.96us

  • 100BASE-TX:使用2对UTP 5类线或屏蔽双绞线STP
  • 100BASE-FX:使用2对光纤
  • 100BASE-T4:使用4对UTP3类线或5类线

吉比特以太网

先吐槽这什么破名字2333

  • 允许在1Gb/s下全双工和半双工两种工作方式
  • 使用802.3协议规格的帧格式
  • 在半双工方式下使用CSMA/CD协议(全双工不使用)
  • 与10BASE-T和100BASE-T技术向后兼容
  • 当吉比特网以太网以全双工方式工作时,不使用载波延伸和分组突发

物理层

  • 1000BASE-X:基于光纤通道的物理层
    • 1000BASE-SX:短波长
    • 1000BASE-LX:长波长
    • 1000BASE-CX:铜线
  • 1000BASE-T:使用4对5类线UTP

10吉比特以太网

  • 与10Mb/s,100Mb/s,1000Mb/s和1GB/s以太网的帧格式完全相同
  • 保留了802.3标准规定的以太网最小和最大帧长,便于升级
  • 不在使用铜线而只使用光纤作为传输媒体
  • 只使用全双工方式,没有争用问题,不使用CSMA/CD

从局域网扩展到了城域网和广域网,从而实现了端对端的以太网传输

  • 成熟的技术
  • 互操作性很好
  • 在广域网在使用以太网时价格便宜
  • 同意的帧格式简化了操作和管理

网络层

网络层关注的时如何将分组的源端沿着网络路径送达目的地。

网络层提供的两种服务

虚电路

表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。

数据报

网络层向上只提供简单灵活的,无连接的尽最大努力交付的数据报服务。
网络在发生分组时不需要线建立连接,每一个分组(IP数据报)独立发送,与前后分组无关
网络层不提供服务质量的承诺,即所传送的分组可能出错,丢失,重读和失序。当然也不保证分组传送的时限。

  • 由于传输网络不提供端到端的可靠传输服务,这可以让路由器制作变得简单。
  • 如果主机中进程之间的通信需要时可靠的,那么由网络的主机中的运输层负责
  • 采用这种设计可以让网络造价大大降低,运行方式灵活,适应多种应用

虚电路vs数据报

对比的方面 虚电路 数据报
连接的建立 必须有 不需要
目的站地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有目的站的全地址
路由选择 在虚电路连接建立时进行,所有分组均按同一路由 每个分组独立选择路由
当路由器出故障 所有通过了出故障的路由器的虚电路均不能工作 出故障的路由器可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达目的站 到达目的站时可能不按发送顺序
端到端的差错处理 由通信子网负责,也可由用户主机负责 由主机负责
端到端的流量控制 由通信子网负责,也可由用户主机负责 由主机负责

中间设备

中间设备又称为中间系统或中继系统

  • 物理层中继系统:转发器
  • 数据链路层中继系统:网桥或桥接器
  • 网络层中继系统:路由器
  • 网络层以上的中继系统:网关

路由器

当中继系统是转发器或网桥时,一般不是网络互连,这只是一个网络扩大了,还是一个网络

  • 网关由于比较复杂,使用较少
  • 互联网都是指用路由器进行互连的网络
  • 由于历史的原因,许多有关TCP/IP的文献将网络层使用的路由器称为网关

网络层4个协议

  • Internet协议:IP(RIP OSPF BGP)
  • 地址解析协议:ARP
  • Internet控制信息协议:ICMP
  • 反向地址解析协议:RARP

虚拟互联网

也就是逻辑互连网络,互连起来的各种物理网络的异构性本来时客观存在的,但是我们利用IP协议就可以使这些性能各异的网络从用户看起来好像使一个统一的网络

使用IP协议的虚拟互连网络可简称为IP网

IP协议

网络类别 最大网络数 开始网络号 最后网络号 主机数
A 271=1272^7 - 1 = 127 1 126 1677721416777214
B 2141=163832^{14} - 1 = 16383 128.1 191.255 6553465534
C 2211=20971512^{21} - 1 = 2097151 192.0.1 223.255.255 254254
D(组播)
E(研究)
1
2
3
4
5
Class A:   1.0.0.0 - 127.255.255.255
Class B: 128.0.0.0 - 191.255.255.255
Class C: 192.0.0.0 - 223.255.255.255
Class D: 224.0.0.0 - 239.255.255.255
Class E: 240.0.0.0 - 255.255.255.255

IP地址现在由因特网名字与号码指派公司ICANN进行分布,IP地址的编址方法:

  • 分类的IP地址:最基本的编址方法
  • 子网的划分:最基本编址方法的改进
  • 构成超网:较新的无分类编址

常见二进制

  • 10000000 - 128128
  • 11000000 - 192192
  • 11100000 - 224224
  • 11110000 - 240240
  • 11111000 - 248248
  • 11111100 - 252252
  • 11111110 - 254254
  • 11111111 - 255255

特殊的IP地址

  • 127.0.0.1:本地回流地址
  • 169.254.0.0:windows预设地址
  • 保留的私网地址
    • 10.0.0.0 - 10.255.255.255
    • 172.16.0.0 - 172.31.255.255
    • 192.168.0.0 - 192.168.255.255

子网掩码

指明一个IP地址的哪些位标识的使主机所在的子网以及那些位标识的是主机的位掩码。子网掩码不能单独存在,他必须结合IP地址一起使用,其作用位将某个IP地址划分位网络地址主机地址两个部分

子网划分

会了,不知道怎么写,暂时不写

IP地址丨MAC地址

  • IP:决定最终的目的地
  • MAC:决定下一个设备是谁

超网

解决问题:如何让两个子网合并为一个网段
相对子网划分,我们子网划分是减少主机数,增加了网段,相反的,我们可以减少(合并)网段

IP数据报

IP数据报由首部和数据组成

  • 首部:固定20字节
  • 数据:长度可变
  • 版本:IPv6,IPv4
  • 首部长度:首部的长度有多长
  • 区分服务:数据报的优先级(实际上没有被使用过,路由器QoS)
  • 总长度:指首部和数据部分的长度,因此数据报最大65535字节
  • 标识:计数器,产生数据报的标识,不是序号,每产生一个数据报+1
  • 标志:占3位,目前只有前2位有意义
    • MF(More Fragment)
      • 1:还有分片
      • 0:最后一个分片
    • DF(Don’t Fragment)
      • 1:不允许分片
      • 0:允许分片
  • 片偏移:较长的分组在分片后,某片在原分组中的相对位置,以8个字节位偏移单位
  • 生存时间(TTL):每过一个路由器减取1,为0的时候丢弃数据报
  • 协议:指出数据报携带的数据使用哪种协议,以便上层处理
    • ICMP
    • IGMP
    • TCP
    • UDP
    • OSPF
  • 首部检验和:只验证数据报的首部,采用的简单的方法

ICMP协议

为了提高IP数据交付成功的机会,在网络层使用了网际控制报文协议ICPM

  • ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告
  • ICMP不是高层协议,而是IP层的协议
  • ICMP报文作为IP层数据报,假设数据报的首部,组成IP数据报发出发送出站

ICMP报文有2种类型

  • ICMP差错报告报文
    • 终点不可达
    • 源点抑制
    • 时间超过
    • 参数问题
    • 改变路由(重定向)
  • ICMP询问报文
    • 会送请求丨回答报文
    • 时间戳请求丨回答报文

差错报文

  • 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
  • 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
  • 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
  • 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。

RIP协议

  • RIP-1
  • RIP-2(1的扩展)

最早的动态路由协议,较为简单的内部网关协议

  • 使用跳数(Hop Count)作为度量来衡量到达目的网络的距离
    • 每经过一个三层设备跳数增加1
    • 规定度量值取0~15之间的整数
    • 大于或等于16的跳数被定义为无穷大,主机不可达(限制规模)
  • 通过UDP报文进行路由信息的交换,使用的端口号为520。(不可靠)
  • 优点:实现简单,开销较小
  • 缺点
    • 设备故障,长时间才能传达所有路由
    • 使用的完整路由表,规模大增大开销

RIP2协议报文格式

OSPF协议

OSPF内部网关协议是对链路状态路由协议的一种实现,是大中型网络上使用最为广泛的IGP协议

  • 向本自治系统中所有路由器发送信息(洪泛法)
  • 发送的信息就是与本路由器相邻的所有路由器的链路状态,这只是路由器所知道的部分信息
  • 只有当链路发送变化时,路由器采用泛洪法发送此信息
  • 区域是以接口(Interface)为单位来划分的,所以一台多接口路由器可能属于多个区域。

一个OSPF网络被分割成多个区域。区域将网络中的路由器在逻辑上分组并以区域为单位向网络的其余部分发送汇总路由信息。

区域编号由一个长度为32 bits的字段所定义,区域编号通常使用 32 bits的点分十进制表示。

  • 点分十进制(如Area 1.1.1.1,写法规则同IPv4地址)
  • 十进制数字格式(如Area 1,注意Area 1不等于Area 1.1.1.1

优点:

  • 某一区域内的路由器只用维护该区域的链路状态数据库,不用维护整个OSPF网络的链路状态数据库。
  • 将某一区域网络拓扑变化的影响限制在该区域内,不会影响到整个OSPF网络,从而减小OSPF计算的频率。
  • 将链路状态通告(LSA)的洪泛限制在本区域内,从而降低OSPF协议产生的数据量。
  • 划分区域可以对网络进行层次化结构设计。
  • 划分区域有利于资源合理调配,核心区域部署性能较好的设备资源,边缘区域部署性能较差的设备资源即可。
  • 不使用UDP而是直接用IP数据报发送
  • 可以进行多路径间的负载均衡
  • 所有在OSPF路由器之间交换的分组都具有鉴别功能
  • 支持可变长度的子网划分和无分类编址CIDR
  • 每个链路状态都带上一个32位的序号,序号越大状态就越新

OSPF区域划分

  • 骨干区域Area 0是整个OSPF域的核心区域。所有其他非骨干区域必须和骨干区域直接相连。
  • 末梢区域:不允许AS外部路由通告(AS External LSA,即类型5 LSA)在其内部进行洪泛扩散的区域
  • 不完全末梢区域
  • 完全末梢区域
  • 完全非纯末梢区域

OSPF路由器类型

  • 内部路由器(Internal Router):所有启用了OSPF的接口都在同一区域
  • 骨干路由器(Backbone Router):至少有一个启用了OSPF的接口是和骨干区域(Area 0)相连的路由器
  • 区域边界路由器(Area Border Router,ABR):指连接一个或者多个区域的路由器。
  • 自治系统边界路由器(Autonomous System Boundary Router,ASBR):把从其他路由协议学习到的路由以路由重分发的方式注入到OSPF进程中,从而使得整个OSPF域内的路由器都可以学习到这些路由。

注释:

  • 一台路由器可以同时属于多种类型
  • 每一台OSPF路由器都有一个路由器标识符,一般写作路由器ID(32 bits)

OSPF网络类型

  • 点到点网络(point-to-point)
  • 广播网络(broadcast)
  • 非广播多路访问网络(non-broadcast multi-access,NBMA)
  • 点到多点网络(Point-to-MultiPoint)

BGP协议

BGP是不同自治系统的路由之间交换路由信息的协议,较新版本是BGP-4
其功能只能力求寻找一条能够到达的网络且比较好的路由,但不是最佳路由
每一个自治系统的管理员至少选一个路由器作为自治系统的发言人

  • BGP协议交换路由信息数量不多
  • BGP发言人数目不多,路由选择相对简单
  • BGP协议支持CIDR
  • BGP建立时,减缓整个路由表之后只交换变化部分

VPN

VPN的主要用途是为数据创建安全隧道,以便在传递到Internet之前传输到其服务器。

  • 匿名
  • 资金安全(加密)
  • 访问地理位置被阻止的服务

VPN有许多不同的协议,下图是PPTP的协议包

常见的VPN协议

在安装VPN服务器时的痛苦选择:

  • PPTP
    • 不描述加密或认证功能,而是依靠PPP协议实现安全功能。
    • 把数据封装成PPP数据桢通过隧道传送
  • SSTP
    • 使用433端口,这使得它看起来像一般的HTTPS流量并且难以被防火墙阻止
    • SSTP被认为是一个非常安全的协议
    • 不能提供非常快的速度
  • L2TP/IPSec
    • L2TP代表二层隧道协议,它是PPTP的演变
    • IPSec:互联网协议安全
    • L2TP在固定的UDP端口500/4500上运行,容易地被防火墙阻止
  • IKEv2/IPSec
    • IKEv1标准的演变
    • 结合了2048位Diffie-Hellman组、强大的密钥交换、AES-256位加密和SHA256散列进行完整性检查
    • 不旨在隐藏VPN活动,因此它可能容易被防火墙过滤
  • Cisco IPSec
    • IKEv1/IPSec的修改
    • 安全且快速的协议,适用于iOS设备和Linux。
    • 使用强大的密钥交换算法(高达2048位)并且在加密密钥建立后还具有非常强大的AES-256位加密
    • 不是为了屏蔽VPN连接而设计的,所以它可能容易受到防火墙的过滤
    • IPSec在两种模式下运行
      • 传输模式:加密数据包的内容
      • 隧道模式:加密整个数据包
  • OpenConnect
    • 开源VPN协议,可以在UDP和TCP上工作
    • 作为思科专有的AnyConnect SSL VPN客户端的开源替代品而编写的
    • 利用TLS进行身份验证和配置路由,然后使用DTLS有效地加密和传输隧道VPN流量
    • 可以回退到基于TLS的传输,防火墙阻止基于UDP的流量
    • AES-128和AES-256将实施于数据层加密
  • OpenVPN
    • 可通过UDP提供高速,或通过TCP提供更可靠和稳定的服务
    • 不旨在隐藏VPN活动,因此它可能容易被防火墙过滤
    • 开源协议,并常有更新和改进
    • 可以使用各种加密算法,如AES、BlowFish、Camelia等。该协议非常安全
  • Wireguard
    • 非常简单、快速且现代化的VPN协议
    • 旨在比IPSec更快、更简单、更精简、更有用,同时避免处理过多的琐碎
    • 比OpenVPN更高效。WireGuard设计用于通用VPN,适用于许多不同的环境
    • 使用最先进的密码术,如噪声协议框架、 Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF以及安全可信任的构造
    • WireGuard是冗长且充分学术研究的结晶,产生技术白皮书
PN在OSI中的层次 VPN实现技术
应用层 SSL VPN
会话层 Socks5 VPN
网络层 IPSec VPN
数据链路层 PPTP及L2TP

NAT

NAT英文全称是Network Address Translation(网络地址转换)
简单的来说,主机想要与互联网上的其他主机进行通信,就必须要有公网地址,但是局域网下主机都只有内部地址。这个时候,就需要通过NAT,将内部地址替换成公用地址。

  • NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的
  • 内部网计算机用户通常不会意识到NAT的存在(透明)

NAT 功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。这就是为什么NAT的地址和路由器的地址一般是一样的原因

NAT应用

  • 数据伪装:可以将内网数据包中的地址信息更改成统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。
  • 端口转发:在网关上进行端口转发,将特定服务的数据包转发给内网主机。
  • 负载平衡:目的地址转换NAT可以重定向一些服务器的连接到其他随机选定的服务器。
  • 失效终结:目的地址转换NAT可以用来提供高可靠性的服务。
  • 透明代理:将某些链接指向存在另外一台服务器的空间

地址转换

NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。

NAT类型

  • 动态地址(Pooled)
  • 网络地址端口转换(NAPT)
    • SNAT
    • DNAT
静态NAT

通过手动设置,使 Internet 客户进行的通信能够映射到某个特定的私有网络地址和端口。

动态NAT

动态地址NAT只是转换IP地址

  • 每一个内部的IP地址分配一个临时的外部IP地址

  • 应用于拨号,对于频繁的远程联接也可以采用动态NAT。

  • 动态NAT方式适合于当机构申请到的全局IP地址较少,而内部网络主机较多的情况。

  • 内网主机IP与全局IP地址是多对一的关系。

    • 当数据包进出内网时,具有NAT功能的设备对IP数据包的处理与静态NAT的一样,只是NAT table表中的记录是动态的,
    • 若内网主机在一定时间内没有和外部网络通信,有关它的IP地址映射关系将会被删除,并且会把该全局IP地址分配给新的IP数据包使用,形成新的NAT table映射记录。
网络地址端口转换NAPT

NAPT(Network Address Port Translation)

  • 把内部地址映射到外部网络的一个IP地址的不同端口上。
  • 它可以将中小型的网络隐藏在一个合法的IP地址后面。
  • APT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。

NAPT是使用最普遍的一种转换方式,它又包含两种转换方式:SNATDNAT

  • 源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
  • 目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据包的目的地地址,如平衡负载、端口转发和透明代理
连接跟踪
            sequenceDiagram
            alt Dst
    Client A->>NAT GW: 202.20.65.4
else Src
    Client A->>NAT GW: 192.168.1.2
end
Note over Client A, NAT GW: SNAT并且记录
Track Table:
192.168.1.2 -> 202.20.65.4 alt Dst NAT GW->>Server: 202.20.65.4 else Src NAT GW->>Server: 202.20.65.5 end alt Dst Server->>NAT GW: 202.20.65.5 else Src Server->>NAT GW: 202.20.65.4 end Note over Server, NAT GW: 根据记录DNAT alt Dst NAT GW->>Client A: 192.168.1.2 else Src NAT GW->>Client A: 202.20.65.4 end

在NAT Gateway收到客户机发来的请求包后,做源地址转换,并且将该连接记录保存下来,当NAT Gateway收到服务器来的响应包后,查找Track Table,确定转发目标,做目的地址转换,转发给客户机。

端口转换

但是只通过连接跟踪的话,如果同时有Client AClient B两个客户端同时访问服务器A,那么网关就无法分别数据包具体是发往谁的了

            sequenceDiagram
            participant Client A
participant Client B
participant NAT GW
participant Server
alt Dst
    Client A->>NAT GW: 202.20.65.4
else Src
    Client A->>NAT GW: 192.168.1.2
end
alt Dst
    Client B->>NAT GW: 202.20.65.4
else Src
    Client B->>NAT GW: 192.168.1.3
end
Note over Client A, NAT GW: Track Table:
192.168.1.2 -> 202.20.65.4
192.168.1.3 -> 202.20.65.4 alt Dst NAT GW->>Server: 202.20.65.4 else Src NAT GW->>Server: 202.20.65.5 end alt Dst Server->>NAT GW: 202.20.65.5 else Src Server->>NAT GW: 202.20.65.4 end Note left of NAT GW: 无法分辨 NAT GW-->>Client A: - NAT GW-->>Client B: -

这个时候网关会对不同端口进行转换。如果两客户机访问同一服务器的源端口不同,那么在Track Table里加入端口信息即可区分,如果源端口正好相同,那么在实行SNAT和DNAT的同时对源端口也要做相应的转换,如下图所示。

            sequenceDiagram
            participant Client A
participant Client B
participant NAT GW
participant Server
alt Dst
    Client A->>NAT GW: 202.20.65.4/80
else Src
    rect rgb(236, 236, 255)
    Client A->>NAT GW: 192.168.1.2/4096
    end
end
alt Dst
    NAT GW->>Server: 202.20.65.4/80
else Src
    rect rgb(236, 236, 255)
    NAT GW->>Server: 202.20.65.5/4096
    end
end
alt Dst
    Client B->>NAT GW: 202.20.65.4/80
else Src
    rect rgb(154, 245, 159)
    Client B->>NAT GW: 192.168.1.3/4096
    end
end
alt Dst
    NAT GW->>Server: 202.20.65.4/80
else Src
    rect rgb(154, 245, 159)
    NAT GW->>Server: 202.20.65.5/4097
    end
end
Note over Client A, NAT GW: Track Table:
192.168.1.2/4096 -> 202.20.65.4
192.168.1.3/4097 -> 202.20.65.4 alt Dst rect rgb(236, 236, 255) Server->>NAT GW: 202.20.65.5/4096 end else Src Server->>NAT GW: 202.20.65.4/80 end alt Dst rect rgb(236, 236, 255) NAT GW->>Client A: 192.168.1.2/4096 end else Src NAT GW->>Client A: 202.20.65.4/80 end alt Dst rect rgb(154, 245, 159) Server->>NAT GW: 202.20.65.5/4097 end else Src Server->>NAT GW: 202.20.65.4/80 end alt Dst rect rgb(154, 245, 159) NAT GW->>Client B: 192.168.1.2/4096 end else Src NAT GW->>Client B: 202.20.65.4/80 end

NAT的缺陷

  • 不能处理嵌入式IP地址或端口
  • 不能从公网访问内部网络服务
  • 某些应用程序用不同端口接受信息,导致接受失败(下:端口转发)
  • 一些P2P应用在NAT后无法进行

端口映射

想必这个东西一定把不少国内想联机Minecraft的小伙伴搞的焦头烂额23333,可惜国内基本上都是内网IP,即使端口映射了,还是在一层NAT下面。
端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。端口映射有动态静态之分。

动态端口映射

内网中的一台电脑要访问网站,会向NAT网关发送数据包。
包头中包含

  • 对方网站IP
  • 端口
  • 本机IP -> 自己的公网IP
  • 端口 -> 未使用的端口

并且会记下这个映射关系,为以后转发数据包使用。然后再把数据发给网站,网站收到数据后做出反应,发送数据到NAT网关的那个未使用的端口,然后NAT网关将数据转发给内网中的那台电脑,实现内网和公网的通讯.当连接关闭时,NAT网关会释放分配给这条连接的端口,以便以后的连接可以继续使用。

此类动态端口映射就是上方的端口转换。

静态端口映射

就是在NAT网关上开放一个固定的端口,然后设定此端口收到的数据要转发给内网哪个IP和端口,不管有没有连接,这个映射关系都会一直存在。就可以让公网主动访问内网的一台电脑。
如果你是公网IP,然后想和小伙伴联机的话,就使用这个方式的端口映射

组播丨多播

是指把信息同时传递给一组目的地址(多个地址)。

  • 它使用的策略是最高效的,因为消息在每条网络链路上只需传递一次,且只有在链路分叉的时候,消息才会被复制。
  • 组播潜在问题:就是组播的接收者(数量)未知(解决:对称加密)
  • 可用于网络会议,直播等,缓解上传宽带
路由形式 单播 任播 多播 广播 地域性广播

传输层

两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元

TCP传送的协议数据单元是TCP报文段
UDP传送的协议数据单元是UDP报文用户数据报

UDP

用户数据报协议(英语:User Datagram Protocol)

  • UDP是无连接的
  • UDP尽最大努力交付,但是不保证可靠交付,也不使用拥塞控制
  • UDP是面向报文,UDP没有拥塞控制,适合多媒体通信
  • UDP是一对一,一对多,多对一,多对多的交互通信
  • UDP的首部开销很小(8字节)不需要或在程序中执行错误检查和纠正的应用,避免了协议栈中此类处理的开销。

当UDP运行在IPv4之上时,为了能够计算校验和,需要在UDP数据包前添加一个"伪头部"

伪首部:又称为伪包头(Pseudo Header):是指在TCP的分段或 DP的数据报格式中,在数据报首部前面增加源IP地址、目的IP地址、IP分组的协议字段、TCP或UDP数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。

  • UDP长度
    • 该字段指定UDP报头和数据总共占用的长度,可能的最小长度是8字节
    • 数据最大65535字节(数据 = 65535 − 8字节UDP报头 − 20字节IP头部 = 65507字节)
  • 校验和:可以用于发现头部信息和数据中的传输错误
    • 不使用校验和,该字段应被填充为全0。
    • IPv4中是可选的
    • IPv6中是是强制

TCP

  • TCP是面向连接的运输层协议
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点
  • TCP提供可靠交付的服务
  • TCP提供全双工通信
  • TCP面向字节流

可靠传输的工作原理

使用确认重传机制,我们就可以在不可靠的传输网络上实现可靠的通信
可靠传输协议称为自动重传请求ARQ

ARQ:表明重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组
缺点:信道利用率低

停止等待协议

停止等待就是每发送完一个分组就停止发送,等待对方确认后再发送下一个分组

超时重传
  • 当A在发送M1分组的过程中丢失时,又或者B接收到M1分组检测到差错并丢弃了M1分组时
  • 只要A没有在规定时间内收到B的确认,就认为刚才发送的分组丢失了,并对丢失的分组进行重传
  • A发送完一个分组后,必须暂时存储已发送的分组的副本,当收到该分组的确认时就清除本地存储的分组的副本
  • 分组和确认分组都必须进行编号,这样才能明确哪一个已发送的分组被确认,哪一个还没被确认
            sequenceDiagram
            A--xB: 发送M1(丢失)
activate A
Note left of A: 超时重传
A->>B: 重传M1
deactivate A
B->>A: 确认M1
          
确认丢失
  • 当B收到A的M1分组后,B发送的M1确认分组在网络中丢失了
  • 且A在设定的超时重传时间内又没有收到B的M1确认分组
  • 这时A无法知道是自己发送的M1分组出错丢失,还是B发送的M1确认分组丢失了
  • 那么A会在超时计时器到期后重传M1分组
            sequenceDiagram
            A->>B: 发送M1
B--xA: 确认M1
A->>B: 重传M1
Note right of B: 收到重复的M1分组后
丢失并确认重传M1确
认分组 B->>A: 重传确认M1
确认迟到
  • A在发送M1分组后,B发送的确认M1分组却迟到了
  • A在超时计时器规定的时间内又没有收到B的确认M1分组,那么A将会重传M1分组
  • B在收到重复的M1分组后会丢弃并重传确认M1分组
  • A收到重传的确认分组后,又收到了B迟到的确认M1分组,这是A会丢弃迟到的确认M1分组
            sequenceDiagram
            A->>B: 发送M1(第一次)
activate A
Note right of B: 此时B发出确认
旦A没有收到 Note left of A: 超时重传 A->>B: 重传M1 deactivate A B->>A: 重传确认M1 B->>A: 确认M1(第一次) Note right of B: 确认M1(第一次)
会被丢弃

TCP报文格式

  • 序号:TCP是面向字节流的,每个字节都是按顺序编号。当达到最大范围,又从0开始
  • 确认号:期望收到对方下一个报文段的第一个字节的序号。若确认号=N,则表示序号N前所有的数据已经正确收到了
  • 数据偏移:表示报文段的数据部分的起始位置,距离报文段的起始位置的距离
  • 保留:保留使用,目前为0
  • URG(紧急):当URG=1,表明紧急指针字段有效,该报文段有紧急数据,会被优先发送
  • ACK(确认):仅当ACK=1时,确认号才有效,连接建立后,所有的报文段ACK都为1
  • PSH(推送):接收方接收到PSH=1的报文段,会尽快交付接收应用进程,不再等待整个缓存填满再交付。实际较少使用
  • RST(复位)RST=1时,表明TCP连接中出现严重差错,必须是否连接,再重连
  • SYN(同步):在建立连接时用来同步序号
    • SYN=1, ACK=0:表明是一个连接请求报文段
    • SYN=1, ACK=1:表示对方同意连接。TCP建立连接用到
  • FIN(终止):用来释放一个连接窗口
    • FIN=1:表明此报文段的发送方不再发送数据,请求释放单向连接
  • 窗口:表示自己的发送方自己的接收窗口,窗口值用来告诉对方允许发送的数据量
  • 校验和:检验和字段查验范围包括首部和数据部分
  • 紧急指针:指出本报文段中的紧急数据的字节数(紧急字节数结束后为普通字节)
  • 选项:长度可变,最长可达40字节。例如最大报文段长度MSS。MSS指的是数据部分的长度而不是整个TCP报文段长度,MSS默认为536字节长。窗口扩大,时间戳选项等。

TCP流量控制

发送方中的数据分为三种:

  • 发送已确认
  • 发送未确认
  • 未发送
滑动窗口协议

TCP滑动窗口协议主要为了解决数据在网络传输的过程中,发送方和接收方速率不一致的问题,从而保证数据传输的可靠性,达到流量控制的效果。

  • 发送方的滑动窗口
    • 发送窗口:数据已发送接收方,但未接到接收方的确认
    • 可用窗口:发送方还可以发送多少数据,受到接收方窗口的改变而改变。

应用层把数据传递给传输层的TCP的发送缓存后,TCP通过不同的机制来控制报文段的发送时机。 主要有下面三种机制:

  • TCP维护一个变量,等于最大报文段长度MSS,缓存中存放的数据达到MSS字节时,则以一个报文段发送出去。
  • 发送应用层指明要求的报文段,即TCP支持的推送操作。
  • 发送法计时器期限到了,就要把前面缓存的数据以报文段发送出去,前提是长度不能超过MSS。
TCP传输效率
超时重传时间的选择

TCP每发送一个报文段,就对这个报文段数值一次计时器,只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段

新的RTTs=(1a)×(旧的RTTs)+a×(新的RTT样本)\text{新的}RTT_s = (1 - a) \times (\text{旧的}RTT_s) + a \times (\text{新的RTT样本})

超时重传时间应略大于上面得出的加权平均往返时间RTTsRTT_s(RFC2988推荐aa值为1/81/8

TCP拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏了,这种情况就叫拥塞
出现资源拥塞的条件:对资源需求的总和 >> 可用资源

  • 拥塞控制:一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素
  • 流量控制:指在给定的发送端和接收端之间的点对点通信量的控制,他所要做的就是抑制发送端发送数据的速率以便使接收端来得及接受

拥塞控制是基于拥塞窗口 cwnd,窗口大小取决网络的拥塞程度
发送发控制拥塞窗口的原则:

  • 只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去
  • 只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数

拥塞避免并非指完全能够避免了拥塞,利用以上的措施要完全避免网络拥塞时不可能的
只是在拥塞避免阶段把拥塞窗口控制在线性规律增长,使网络比较不容易出现拥塞

TCP拥塞控制四个算法是相辅相成,共同维护这拥塞控制机制

慢开始

慢开始指主机由小到大逐渐增大发送窗口,即增大拥塞窗口的数值。
初始拥塞窗口cwnd设置为不超过2到4个最大报文段SMSS的数值,具体规定:

  • SMSS <= 1095字节,cwnd = 4 * SMSS字节,不得超过4个报文段
  • 1095 < SMSS <= 2190字节,cwnd = 3 * SMSS字节,不得超过3个报文段
  • SMSS > 2190字节,则cwnd=2 * SMSS字节,不得超过2个报文段

从上面的规定限制了初始拥塞窗口的大小。
慢开始在每收到一个对新的报文段的确认后,cwnd$可以增加最多一个SMSS的数值。

拥塞窗口cwnd每次的增加量=min(N,SMSS)\text{拥塞窗口}cwnd\text{每次的增加量} = min(N, SMSS)

  • N是刚收到确认的报文段所确认的字节数
  • 拥塞窗口每次的增加量要小于SMSS

具体:

  1. 初始化窗口为1,所有发送M1报文段
  2. 收到确认号之后,发送M2-M3两个报文段
  3. 因为拥塞窗口增大了,后面的轮次也是这样翻倍增加的
  4. 那么发送到网络的数据就会急剧增加,容易出现拥塞,因此需要慢开始门限(ssthresh)状态变量。
  • cwnd < ssthresh时,使用慢开始算法
  • cwnd > ssthresh时,使用拥塞避免算法
  • cwnd = ssthresh时,忙开始或者拥塞避免算法
快重传

快重传算法首先要求接收方收到一个失序的报文段后就立刻发送出重复确认,这样做可以让发送方及早知道有报文段没有达到接收方。

  • (出现丢包情况)当发送端收到联系三个重复的确认时
  • 就执行"乘法减小"算法,把满开始门限ssthresh减半,
  • 但拥塞窗口cwnd选择不设置为1,而是设置为慢开始门限ssthresh减半后的数值
  • 然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

送方的发送窗口的上限值应当取为接收方窗口和拥塞窗口这两个变量中较小的一个,即应按以下公式确定

发送窗口的上限值=Min(rwnd,cwnd)\text{发送窗口的上限值} = Min(rwnd, cwnd)

快恢复

在上文,知道只是报文段丢失,而不是网络出现拥塞后,发送方会调整ssthresh为原来的一半,然后继续进行拥塞避免算法,这个过程就叫快开恢复算法。

TCP传输连接管理

传输连接有三个阶段

  • 连接建立
  • 数据传送
  • 连接释放

TCP连接的建立都是采用客户服务器方式

  • 客户:主动发起连接建立的应用进程
  • 服务器:被动等待建立连接的应用进程
三次握手
            sequenceDiagram
            Client->>Server: SYN=1, ack=0, seq=x
Server->>Client: SYN=1, ack=1, seq=y, ack=x + 1
Client->>Server: ACK=1, seq=x + 1, ack=y + 1
          
  • Client: SYN=1, ack=0, seq=xSYN_SEND状态
  • Server: SYN=1, ack=1, seq=y, ack=x + 1SYN_RCVD状态
  • Client: ACK=1, seq=x + 1, ack=y + 1丨C/S:ESTABLISHED

第三次发送包目的:防止多次握手(第一次握手多次收到)

连接关闭
            sequenceDiagram
            Client->>Server: FIN=1, seq=u
Server->>Client: ACK=1, seq=v, ack=u + 1
Server->>Client: FIN=1, ACK=1, seq=w, ack=u + 1
Client->>Server: ACK=1, seq=u + 1, ack=w + 1
          
  • Client: FIN=1, seq=uFIN_WAIT_1状态
  • Server: ACK=1, seq=v, ack=u + 1FIN_WAIT_2状态
  • Server: FIN=1, ACK=1, seq=w, ack=u + 1LAST_ACK状态
  • Client: ACK=1, seq=u + 1, ack=w + 1丨C:TIME_WAIT -> CLOSED丨S:CLOSED
  1. 数据传输结束后,通信的双发都可释放连接。现在A的应用进程先向其TCP发出释放报文段,并停止再发送数据,主动关闭TCP连接
  2. A把连接释放报文段首部的FIN=1,其序号seq=u,等待B的确认,
  3. B发出确认,确认号ack=u + 1,而这个报文段自己的序号seq=v
  4. TCP服务器通知高层应用进程
  5. 从A到B这个方向的连接就释放了,TCP连接处于半关闭状态,B若发送数据,A仍要接受
  6. 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接
  7. A收到连接释放报文后,必须发出确认

会话层

该层被弃用。应用层的HTTP、RPC、SDP、RTCP等协议有类似的功能

表示层

该层被弃用。应用层的HTTP、FTP、Telnet等协议有类似的功能。传输层的TLS/SSL也有类似功能

应用层

DNS协议

  • 根域名服务器:最高层次的域名服务器,球共有13个不同IP地址的根域名服务器
  • 顶级域名服务器:负责管理在该顶级域名服务器下注册的二级域名
    • 当根域名服务器告诉查询者顶级域名服务器地址时,查询者紧接着就会到顶级域名服务器进行查询
  • 权限域名服务器:负责一个区的域名解析工作
  • 本地域名服务器:当一个主机发出DNS查询请求的时候,这个查询请求首先就是发给本地域名服务器的

域名解析过程

  1. 本机向本地域名服务器发出一个DNS请求报文
  2. 本地域名服务器向本机回应一个DNS响应报文

递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询

DNS协议报文格式

  • 会话标识:是DNS报文的ID标识,对于请求报文和其对应的应答报文,通过它可以区分DNS应答报文是哪个请求的响应
  • 标志
    • QR:查询/响应标志
      • 0为查询
      • 1为响应
    • opcode
      • 0表示标准查询
      • 1表示反向查询
      • 2表示服务器状态请求
    • AA:表示授权回答
    • TC:表示可截断的
    • RD:表示期望递归
    • RA:表示可用递归
    • rcode:表示返回码
      • 0表示没有差错
      • 3表示名字差错
      • 2表示服务器错误(Server Failure)
  • 数量字段
    • Questions:表示查询问题区域节的数量
      • 查询名:长度不固定,且不使用填充字节
        • 一般该字段表示的就是需要查询的域名
        • 如果是反向查询,则为IP,反向查询即由IP地址反查域名
      • 查询类型
        • 1:A由域名获得IPv4地址
        • 2:NS查询域名服务器
        • 5:CNAME查询规范名称
        • 6:SOA开始授权
        • 11:WKS熟知服务
        • 12:PTR把IP地址转换成域名
        • 13:HINFO主机信息
        • 15:MX邮件交换
        • 28:AAAA由域名获得IPv6地址
        • 252:AXFR传送整个区的请求
        • 255:ANY对所有记录的请求

资源记录(RR)区域,该区域有三个,但格式都是一样的。

  • Answers:表示回答区域的数量
  • Authoritative namesversers:表示授权区域的数量
  • Additional recoreds:表示附加区域的数量

格式:

  • 域名:和Queries区域的查询名字字段是一样的。当报文中域名重复出现的时候,该字段使用2个字节的偏移指针来表示。
  • 查询类型:表明资源纪录的类型
  • 查询类:对于Internet信息,总是IN
  • 生存时间(TTL)
    • 以秒为单位,表示的是资源记录的生命周期
    • 一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间
    • 它同时也可以表明该资源记录的稳定程度,极为稳定的信息会被分配一个很大的值(比如86400,这是一天的秒数)
  • 资源数据
    • 该字段是一个可变长字段,表示按照查询段的要求返回的相关资源记录的数据。
    • 可以是Address(表明查询报文想要的回应是一个IP地址)
    • 可以是CNAME(表明查询报文想要的回应是一个规范主机名)

DHCP

动态主机设置协议(英语:Dynamic Host Configuration Protocol)是一个用于局域网的网络协议

  • 用于内部网或网络服务供应商自动分配IP地址给用户
  • 用于内部网管理员作为对所有计算机作中央管理的手段

DHCP工作原理

  • scope:DHCP从一个IP地址池中提供IP地址,该池有DHCP服务器数据库定义
  • 租约:如果客户端接受这一地址,则它可在一个预定义的期限内使用该地址
    • 如果客户端无法从DHCP服务器获取IP地址,它就无法正常初始化TCP/IP

在DHCP为客户端配置TCP/IP参数时,DHCP服务器和客户端都需要经历四步过程
当客户端处于以下四种状态之一时,必须使用IP租约进程:

  • 配置使用DHCP的客户端第一次初始化TCP/IP;
  • 客户端请求特定的IP地址但服务器拒绝了该地址,在DHCP丢弃租约时即会发生。
  • 客户端之前租约了一个IP地址,但
客户机请求IP地址(DHCPDISCOVER)

客户端向DHCP服务器发送请求IP地址的真实报文称为DHCPDISCOVER报文。
网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

  • 当一个IPv4客户机启动时监测到需要IP地址,它会初始化一个TCP/IP的限制版本
  • 广播一个报文请求寻找DHCP服务器的地址。该广播报文告知监听服务器客户端需要IP地址信息
  • DHCP客户端发送的报文这一阶段包括租约请求(客户端源地址,0.0.0.0,目的地址,即广播地址255.255.255.255
  • 报文也包括客户端硬件MAC地址和机器名,该信息也指明了向DHCP服务器发起请求的设备
服务器提供IP地址(DHCPOFFER)
  • 所有拥有有效IP地址的DHCP服务器都会向DHCP客户端提供IP地址信息
  • 它响应以地址池中一个未分配的IP地址供请求主机使用
  • 要能够响应DHCPDISCOVER报文,DHCP服务器必须拥有客户端的有效IP配置信息

DHCP服务器回复的DHCPOFFER报文包含以下信息:

  • 客户端的硬件地址
  • 提供的IP地址
  • 合适的子网掩码
  • 租约有效期
  • 服务器ID,即DHCP服务器的IP地址
客户机选择IP地址(DHCPREQUEST)
  • DHCP客户端选择它所接收到的第一个DHCPOFFER报文提供的IP地址
  • 它把这一信息广播至网络。该报文中,客户端请求服务器提供给它的IP地址
  • 客户端可能收到不止一个DHCP服务器发送的offer
  • 通过广播这一请求,客户端告知其他DHCP服务器不会再接受其他offer

为了进一步确保客户端接受的服务器offer没有疑义,DHCPREQUEST报文中还包含以下信息:

  • 提供所接受offer的服务器IP地址
  • 客户端硬件地址
  • 客户端接受的IP地址
服务器确认IP租约(DHCPACK)
  • DHCP服务器对客户端作出响应,将IP地址分配给客户端
  • 之后服务器发送DHCPACK确认信息给客户端。该信息包含IP地址的有效租约以及其他配置信息

有时,在客户端接收服务器提供的租约后,DHCP租约请求仍可能不成功。可能有以下几种情况:

  • 由于客户端移动至其他子网,IP地址无效
  • 客户端尝试租约它之前的IP地址但该IP地址不再可用

在上述情况下,服务器会发送一条不成功信息DHCPNACK。收到DHCPNACK的客户端必须重新开始整个DHCP初始化进程。也就是说,它必须发送另一个DHCPDISCOVER报文查找新的IP地址

FTP

网络共享文件的传输协议

FTP协议中将命令与数据分开传送的方法提高了效率

  • FTP使用2个端口
    • 一个数据端口
      • 显示目录列表,上传、下载文件
    • 一个命令端口
      • 操作如"登录"、“改变目录”、“删除文件”

FTP协议规定了控制协议传送与存储的多种选择,在以下4个方面必须做出一个选择。

  • 文件类型
    • ASCII码文件(默认的)
    • 图像文件类型(二进制的)
    • 本地文件类型(用于在具有不同字节大小主机间传送二进制数据)
  • 格式控制
    • 该选项针对ASCII类型文件适用
    • 非打印(默认选择,文件中不包含垂直格式信息)
    • 远程登录格式控制
  • 结构
    • 文件结构(默认选择,文件被认为是一个连续的字节流,不存在内部的文件结构)
    • 记录结构(用于文本文件)
  • 传输方式
    • 流方式(模式选择,文件以字节流方式传输,对于文件结构,发方在文件尾提示关闭数据连接,对于记录结构,有专用的两字节序列码记录结束和文件结束)
    • 块方式(文件以一系列块来传送,每块前面有一个或多个首部字节)
    • 压缩方式

FTP模式

主动模式
  • 客户端随机打开一个大于 1024 的端口向服务器的命令端口发起连接
  • 同时开放N + 1端口监听,并向服务器发出port N + 1 命令
  • 由服务器从它自己的数据端口20主动连接到客户端指定的数据端口N + 1

由于是服务器来连接,可能会被防火墙拦截

被动模式

命令连接和数据连接都由客户端发起

  • 开启一个 FTP 连接时,客户端打开两个任意的本地端口 (N > 1024N + 1)
  • 第一个端口连接服务器的 21 端口,提交 PASV 命令
  • 服务器会开启一个任意的端口 (P > 1024 ),返回如227 entering passive mode (127,0,0,1,4,18)
    • 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字
    • 前四个指服务器的地址
    • 最后两个,将倒数第二个乘 256 再加上最后一个数字,就是数据传输的端口
  • 客户端收到命令取得端口号之后, 会通过N + 1号端口连接服务器的端口

Telnet

Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议
Telnet协议具有如下的特点:

  • 适应异构
    • Telnet协议定义了数据和命令在Internet上的传输方式,此定义被称作网络虚拟终端NVT(Net Virtual Terminal)
    • 发送的数据:转换为NVT格式,发送到服务器,服务器收到的数据和命令,从NVT格式转换为远地系统需要的格式
    • 返回的数据:远地服务器将数据从远地机器的格式转换为NVT格式,而本地客户机将将接收到的NVT格式数据再转换为本地的格式
  • 传送远地命令
    • 普通字符时,NVT将按照其原始含义传送
    • 快捷键(组合键)时,NVT将把它转化为特殊的ASCII字符再传送
    • 做到无二义性的指定信令,而不会产生控制功能与普通字符的混乱
  • 数据流向
    • 数据信息被用户从本地键盘键入并通过操作系统传到客户机程序
    • 客户机程序将其处理后返回操作系统,并由操作系统经过网络传送到远地机器
    • 远地操作系统将所接收数据传给服务器程序,并经服务器程序再次处理后返回到操作系统上的伪终端入口点
    • 远地操作系统将数据传送到用户正在运行的应用程序
    • 因此:Telnet的效率不高
  • 强制命令
    • 操作系统的缓冲区可能被占满,无法再将数据写入伪终端,导致读取数据失败,指令执行失败
    • TCP用紧急数据机制实现外带数据信令,那么Telnet只要再附加一个被称为数据标记(date mark)的保留八位组
    • 过让TCP发送已设置紧急数据比特的报文段通知服务器
  • 选项协商
    • Telnet采用选项协商机制来解决两端的机器和操作系统的异构性
    • 每个选项的处理都是对称的,即任何一端都可以发出协商申请

网络虚拟终端(NVT)

网络虚拟终端(NVT)是一种虚拟的终端设备,它被客户和服务器所采用,用来建立数据表示和解释的一致性。
NVT的组成:

  • 输出设备:输出远程数据,一般为显示器
  • 输入设备:本地数据输入

数据格式:采用8bit字节数据,其中最高位为0的字节用于一般数据,最高位为1的字节用于NVT命令

  • Telnet使用了一种对称的数据表示,当每个客户机发送数据时,把它的本地终端的字符表示影射到NVT的字符表示上,当接收数据时,又把NVT的表示映射到本地字符集合上
  • 在通信开始时,通信双方都支持一个基本的NVT终端特性子集(只能区分何为数据,何为命令),以便在最低层次上通信,在这个基础上,双方通过NVT命令协商确定NVT的更高层次上的特性,实现对NVT功能的扩展
  • 在TELNET中存在大量的子协议用于协商扩展基本的网络虚拟终端NVT的功能,由于终端类型的多样化,使得TELNET协议族变得庞大起来

RDP

RDP, Remote Desktop Protocol,远程桌面协议,是一个多通道(multi-channel)的协议,提供微软终端机服务功能
RDP协议网络功能数据传送时通常都包含的各层次

  • 网络连接层
    • RDP协议建立在TCP/IP协议之上
    • 由于传输的数据量比较大,因此在协议的底层首先定义一层网络连接层。它定义了一个完整的RDP数据逻辑包,以避免由于网络包长度过长而被分割使数据丢失
  • ISO数据层:在网络连接层之上是ISO数据层,它表示RDP数据的正常连接通信
  • 虚拟通道层:在ISO数据层之上,RDP协议定义一个虚拟通道层,用以拆分标示不同虚拟通道的数据,加快客户端处理速度,节省占用网络接口的时间
  • 加密解密层:在虚拟通道层之上,RDP定义一个数据加密解密层。此层用于对所有的功能数据进行加密、解密处理
  • 功能数据层
    • 在加密解密层之上是功能数据,画面信息,本地资源转换,声音数据,打印数据等所有的功能数据信息都在此层进行处理
    • 根据数据类型的不同,这些数据都有各自不同层次的分割

RDP连接过程

  1. 客户端连接服务器
  2. ISO数据层建立连接
  3. 发送初始协议相关信息,接收加密、解密密钥
  4. 虚拟通道申请
  5. 加密形式发送客户端系统信息,同时验证加密协议
  6. 平台软件证书验证
  7. 各功能建立连接,各功能数据传输,功能实现

HTTP

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议

  • HTTP是一个基于TCP/IP通信协议来传递数据
  • HTTP是一个属于应用层的面向对象的协议
  • HTTP协议工作于客户端-服务端架构之上

URI丨URL

  • URI:uniform resource identifier,统一资源标识符,用来唯一的标识一个资源
  • URL:uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源
  • URN:uniform resource name,统一资源命名,是通过名字来标识资源

HTTP协议格式

例子:

1
2
3
4
5
6
7
GET /photo.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.baidu.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8

这里不过多描述HTTP

Web代理

就是别人代替你去访问东西然后给你(正向代理)
一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源

  • Web代理都是基于TCP的,VPN可以基于其他层

功能:

  • 提高访问速度
  • 制对内部资源的访问
  • 过滤内容
  • 隐藏真实IP
  • 突破自身IP访问限制
  • 突破内容过滤机制限制

Web代理种类

协议区分:

  • FTP代理服务器:访问FTP服务器
  • HTTP代理服务器:访问网页,一般有内容过滤和缓存功能
  • SSL/TLS代理:访问加密网站,一般有SSL或TLS加密功能
  • RTSP代理:Realplayer访问Real流媒体服务器,一般有缓存功能
  • Telnet代理:用于telnet远程控制(黑客入侵计算机时常用于隐藏身份)
  • POP3/SMTP代理:用于POP3/SMTP方式收发邮件,一般有缓存功能
  • SOCKS代理:只是单纯传递数据包,不关心具体协议和用法

匿名程度:

  • 高度匿名代理:高度匿名代理会将数据包原封不动的转发,在服务端看来就好像真的是一个普通客户端在访问,而记录的IP是代理服务器的IP
  • 普通匿名代理:普通匿名代理会在数据包上做一些改动,服务端上有可能发现这是个代理服务器,也有一定几率追查到客户端的真实IP
  • 透明代理:透明代理不但改动了数据包,还会告诉服务器客户端的真实IP。这种代理除了能用缓存技术提高浏览速度,能用内容过滤提高安全性之外,并无其他显著作用
  • 间谍代理:间谍代理指组织或个人创建的,用于记录用户传输的数据,然后进行研究、监控等目的代理服务器

TLS

TLS:又名 SSL,是针对数据流的安全传输协议,其要求为:

  • 数据被加密,任何可以截取到 TCP 数据流的人,无法解密出原始数据
  • 数据不可被篡改,一旦篡改会导致解密失败,连接断开
  • 服务器身份验证,基于 X509 的证书体系去确认目标服务器是否为真实的服务器

HTTP + TLS = HTTPS
SOCKS5 + TLS = SOCKS5-TLS

电子邮件

邮件发送协议是一种基于"推"的协议,主要包括SMTP
邮件接收协议是一种基于"拉”的协议,主要包括POPIMAP

SMTP

  • 端口:25
  • 通过命令和响应的形式进行交互
  • 邮件传送主要包括3个阶段:建立连接邮件传送终止连接
建立连接阶段
  • SMTP客户端每隔一定时间对邮件缓存扫描一次,如发现有邮件,就使用SMTP的熟知端口号25与接收方的邮件服务器的SMTP服务器建立TCP连接
  • 接收方SMTP服务器发出“220 Service ready"告诉客户端它已经准备好接收邮件。若服务器未就绪,它就发送代码421
  • 客户发送HELLO报文,并使用它的域名地址标志自己。目的是:用来把客户的域名通知服务器
  • 注意的是,在TCP的连接建立阶段,发送方和接收方都是通过它们的IP地址来告诉对方的
  • 服务器响应代码250(请求命令完成)或根据情况的其他一些代码。
报文传送阶段
  • 客户发送MAIL FROM报文介绍报文的发送者。它包括发送人的邮件地址
  • 服务器响应代码250(请求命令完成)或其他适当的代码
  • 客户发送RCPT(收件人)报文,包括收件人的邮件地址
    • RCPT命令的作用是:先弄清接收方系统是否已经准备好接收邮件的准备,然后才发送邮件
    • 这样做视为了避免浪费通信资源,不至于发送了很长的邮件以后才知道是因地址错误
  • 服务器响应代码250或其他适当的代码
  • 客户发送DATA报文对报文的传送进行初始化,DATA命令表示要开始传送邮件的内容了
  • 服务器响应代码354 Start mail input: end with <CRLF>.<CRLF>
    • 或其他适当的报文(如421服务器不可用,500命令无法识别)
  • 客户用连续的行发送报文的内容。每一行的行结束时输入<CRLF>.<CRLF>,即回车换行,知道邮件内容结束
  • 服务器响应代码(250 请求命令完成)或其他适当的代码

虽然SMTP使用TCP连接试图使邮件的传送可靠,但它并不能保证不丢失邮件。也就是说,使用SMTP传送邮件只能说可以可靠地传送接收方的邮件服务器,在往后的情况就不知道了

终止连接

在报文传送成功后,客户就终止连接

  • 客户发送QUIT命令
  • 服务器响应221(服务关闭)或其他代码
  • 在连接终止阶段后,TCP连接必须关闭

POP

  • 端口:110
  • POP3(Post office Protocal)采用C/S的工作方式
  • POP服务器只有在用户输入鉴别信息(用户名+密码)后,才允许对方对邮箱进行读取
  • POP3有两种工作方式
    • 删除方式:就在每一次读取邮件后就把邮箱中的这个邮件删除
    • 保存方式:就是在读取邮件后仍然在邮箱中保存这个邮件
  • POP是一种极其简单的邮件获取协议

IMAP

  • 端口:143
  • IMAP(Internet Mail Access Protocal)采用C/S的工作方式,较新的版本是IMAP4
  • 接收方的邮件服务器上的IMAP服务器程序建立TCP连接
  • IMAP协议比POP3协议复杂的多
    • 允许用户在邮件服务器上整理自己的邮件
    • 允许用户在下载邮件之前读取邮件的部分内容

IMAP4提供了以下功能

  • 用户在下载邮件之前可以检查邮件的首部
  • 用户在下载邮件之前可以用特定的字符串搜索电子邮件的内容
  • 用户可以部分地下载电子邮件
  • 用户可以在邮件服务器上创建、删除邮箱,或对邮箱重命名
  • 为了存放电子邮件,用户可以在文件夹中创建分层次的邮箱

MIME

MIME协议( Multipurpose Internet Mail Extensions ),通用因特网邮件扩充协议 ,作为SMTP的一种辅助协议,其引入是为了克服SMTP的如下不足:

  • SMTP只能发送使用NVT( 虚拟网络终端 ) 7位ASCII码格式的报文,它不能使用NVT 7位ASCII码不支持的语言(如汉语,日语,德语等)
  • SMTP不能传送可执行文件或其他二进制对象(如图像文件)
  • SMTP不支持音频或视频文件
  • SMTP发送的邮件的长度受到限制

MIME定义了5种首部,用来加在原始的电子邮件部分以定义参数的转换

  • MIME版本:定义了MIME使用的版本
  • 内容-类型:定义报文主体使用的数据类型和子类型,用<数据类型/子类型>表示
  • 内容-传送-编码:定义了邮件的主体在传送时是如何编码的
  • 内容-标识:在多报文的环境中唯一地标识报文
  • 内容描述:定义了主体是否为图像、音频或视频

基于WWW的邮件

  • 从发送者的浏览器传送到发送方邮件服务器是通过HTTP协议
  • 从发送方服务器到接收方邮件服务器是通过SMTP协议
  • 从接收方到接收者是通过HTTP协议

总结

参考