计算机网络总结(超大章)

196 阅读1小时+

计算机网络体系结构

OSI七层体系结构具有概念清楚、理论完整的特点,是一个理论上的国际标准,但却不是事实上的国际标准;而具有简单易用特点的 TCP/IP 四层体系结构则是事实上的标准。 需要指出的是,五层体系结构虽然综合了 OSI 和 TCP/IP 的优点,但其只是为了学术学习研究而提出的,没有具体的实际意义

体系结构

OSI七层体系结构

物理层

物理层实现了相邻计算机节点之间比特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关心网络的具体传输介质。“透明传送比特流”的意思是经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

物理层规定了物理接口的各种特性和物理设备的标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。

数据链路层

数据链路层负责建立和管理节点(节点指的是同一网络内的相邻主机或设备)间的链路。该层的主要功能是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路

数据链路层接收来自物理层的比特流形式的数据,将其转化成数据帧的形式,然后拆帧成数据包,传送到上一层;同样,也将来自上层的数据包,封装成数据帧,然后转化为比特流形式的数据转发到物理层。此外,该层还负责提供物理地址寻址、数据的成帧、流量控制、差错控制等功能,确保数据的可靠传输。差错控制是指处理接收端发回的确认帧的信息(对等层通信),以便提供可靠的数据传输;流量控制是指抑止发送方的传输速率,使接收方来得及接收。

**数据帧是数据链路层的传送单位。**为了保证数据的可靠传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的物理地址以及纠错和控制信息。其中的物理地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错的传递。

网络层

网络层的目的是**实现不同网络的两台主机之间数据的透明传送。**具体功能包括寻址和路由选择,连接的建立、保持和终止等,可以概括为:路径选择、路由及逻辑寻址。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。

基本数据单位为IP数据报

网络层主要任务是将IP地址翻译成对应的Mac地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。特别地,网络层将通过综合考虑发送优先权、网络拥塞程度、服务质量以及可选路由的花费来决定从一个网络中节点A 到另一个网络中节点B的最佳路径。

网络层是可选的,它只用于当两个计算机系统处于不同的由路由器分割开的网段这种情况,或者当通信应用要求某种网络层或传输层提供的服务、特性或者能力时。对于两台主机处于同一个LAN网段的直接相连这种情况,它们之间的通信只使用LAN的通信机制就可以了,即OSI参考模型的物理层和数据链路层。

传输层

传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的、透明的数据传输功能。此外,传输层还要处理端到端的差错控制和流量控制问题。

传输协议同时进行流量控制,即基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较大的数据进行强制分割(例如,以太网无法接收大于1500字节的数据包),发送方节点的传输层将数据分割成较小的数据片,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组,这个过程也叫做排序。

网络层只是根据IP地址将源主机发出的数据包传送到目的主机,而传输层则负责将数据可靠地传送到主机上运行的进程的相应端口。

在协议栈中,传输层位于网络层之上,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信。

传输层的主要功能如下:

  • 传输连接管理:提供建立、维护和拆除传输连接的功能,传输层在网络层的基础上为高层提供“面向连接”和“面向无接连”的两种服务;
  • 处理传输差错:提供可靠的“面向连接”和不太可靠的“面向无连接”的数据传输服务、差错控制和流量控制。在提供“面向连接”服务时,通过这一层传输的数据将由目标设备确认,如果在指定的时间内未收到确认信息,数据将被重发。

会话层

会话层负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。

会话层为通信的两个进程建立会话连接,保持会话过程通信连接的畅通,同步两个节点之间的对话,决定通信是否被中断以及通信中断时决定从何处重新发送。

表示层

表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用层理解。表示层的数据转换包括数据的编码、加密、压缩、格式转换等。

应用层

为所有能产生网络流量的程序提供访问网络服务的接口。

OSI体系结构失败的原因

  • OSI的专家缺乏实际经验,他们在完成OSI标准时缺乏商业驱动力
  • OSI的协议实现起来过分复杂,而且运行效率很低
  • OSI制定标准的周期太长,因而使得按OSI标准生产的设备无法及时进入市场(20世纪90年代初期,虽然整套的OSI国际标准都已经制定出来,但基于TCP/IP的互联网已经抢先在全球相当大的范围成功运行了)
  • OSI的层次划分不太合理,有些功能在多个层次中重复出现

体系结构分层的好处

  • 各层之间是独立的
  • 灵活性好
  • 结构上可分割开
  • 易于实现和维护
  • 能促进标准化工作

OSI参考模型对网络排错指导

  1. 物理层故障—查看连接状态,网线是否正常,发送和接受的数据包
  2. 数据链路层故障—MAC地址冲突,宽带欠费,网速没办法协商一致
  3. 网络层故障—错误的IP地址,错误的网关,路由器没有目标网络的路由地址
  4. 应用层故障—应用程序配置错误

计算机网络的性能

1. 速率

连接在计算机网络上的主机在数字信道上传送数据的速率,也成数据率或比特率。

单位:b/s (比特每秒),有时也写做 bps;kb/s (k=10310^3=千);Mb/s (M=10610^6=兆);Gb/s (G=10910^9=吉)

比特 (bit) 是计算机中数据量的单位,一个比特就是二级制数字中的一个 1 或 0。

我们通过软件监控看到的网速其实是字节速率,1 字节 = 8 比特,4M的网络看到的可能是400k/s,100M的网络看到的可能是10M/s。

2. 带宽

数字信道所能传送的最高数据率。单位与速率一致。

3. 吞吐量

在单位时间内通过某个网络(或信道、接口)的数据量。单位与速率一致。

4. 时延

时延是指数据(一个报文或分组,甚至比特)从网络的一段传送到另一端所需的时间。

  1. 发送时延

    发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。

    发送时延 = 数据帧长度 / 发送速率(信道带宽)

  2. 传播时延

    传播时延是电磁波在信道中传播一定的距离所花费的时间。

    传播时延 = 信道长度(m) / 电磁波在信道上的传播速率(m/s)

  3. 处理时延

    主机或路由器在收到分组后,对分组进行相应处理所花费的时间。

  4. 排队时延

    分组在经过网络传输时,要经过许多路由器,但分组在进入路由器后要先在输入队列中排队等待处理。在路由器确定了转发接口后,还要在输出队列中排队等待转发。

5. 时延带宽积

时延带宽积 = 时延 * 带宽,又称为以比特为单位的链路长度。实际意义:计算机在通信的时候,链路上有多少数据。

6. 往返时间

7. 利用率

数据链路层

基本概念

信道类型

  • 点对点信道
  • 广播信道,必须使用专用的共享信道协议来协调多个主机的数据发送

链路:一条点对点的物理线路段,中间没有任何其他的交换节点。

数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输,若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

适配器(即网卡)一般都包括了数据链路层和物理层这两层的功能。

数据发送模型

数据帧的组成部分:帧头、IP数据报、帧尾、物理层地址、校验值

解决的三个基本问题

1.封装成帧

  • 封装成帧就是在一段数据的前后分别添加首部和尾部,构成一个帧。确定帧的界限
  • 首部和尾部的一个重要作用就是进行帧定界。

封装成帧

2.透明传输

在接收端接收数据帧的过程中,如果数据帧的数据部分包含了帧结束符,那么就会导致接收端误认为这是一个完整的帧,然后把剩余的部分当做无效帧抛弃掉,为了解决这个问题,引入了字节填充法。

发送端的数据链路层会对网络层传过来的数据进行处理,当数据中出现控制字符 SOH 或 EOT 时,在字符前插入一个转义字符 ESC (其十六进制编码是 1B)。

接收端的数据链路层在将数据送往网络层之前,会将插入的转义字符删除掉。

如果转义字符也出现在了数据中,那么应在转义字符前再插入一个转义字符,当接收端接收到两个连续的转义字符时,会把前一个转义字符删除掉。

以上这个过程,就是透明传输。

字节填充

3.差错控制

数据链路层只负责无差错的接收数据,当收到错误数据时,就直接丢弃掉,它并不负责让源主机重新发送数据帧。

在数据后面添加上冗余码称为帧检验序列 FCS,循环冗余检验CRC和帧检验序列FCS并不等同。

  • CRC是一种常用的检错方法,而FCS是添加在数据后面的冗余码
  • FCS可以用CRC计算得出,但是CRC并非是用来生成FCS的唯一方法

仅用循环冗余检验CRC差错检测技术只能做到无差错接受,即凡是接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错,也就是说,凡是接收端数据链路层接受的帧都没有传输差错(有差错的帧就丢弃而不接受)。

如果要做到可靠传输,即发送什么就收到什么,就必须要加上确认重传机制。

CRC是一种无比特差错,而不是无传输差错的检测机制。

点到点信道

在使用点到点信道的数据链路层,使用的最多的数据链路层协议是点到点协议PPP(Point-to-Point Protocol)。主要用于广域网。

PPP协议应该满足的功能:

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

PPP协议不需要满足的功能:

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

PPP协议的三个组成部分:

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

PPP协议帧格式

PPP协议帧格式

标志字段 F = 0x7E,表示PPP协议帧的开始或者结束,0x表示后面的字符是用十六进制表示的,如果换成二进制就是 01111110。

地址字段 A = 0xFF,表示地址,但是由于PPP协议是针对于点到点通信的,其实不需要地址,所以就固定为0xFF。

控制字段 C = 0x03,未启用,通常设置为0x03。

PPP是面向字节的,所有的PPP帧的长度都是整数字节。

PPP实现透明传输

字节填充
  • 将信息字段中出现的每个0x7E字节转变成2字节序列(0x7D,0x5E)
  • 若信息字段中出现一个0x7D字节,则将其转变为2字节序列(0x7D,0x5D)
零比特填充

PPP协议用在 SONET/SDH 链路时,是使用同步传输(一连串的比特连续传送)。这时PPP协议采用零比特填充法来实现透明传输。

在发送端,只要发现有五个连续的1,则立即填入一个0,接收端对帧中的比特流进行扫描,每当发现五个连续的1时,就把这五个连续1后的一个0删除。

PPP协议为什么不使用序号和确认机制

PPP协议之所以不使用序号和确认机制是出于以下的考虑:

  • 在数据链路层出现差错的概率不大时,使用比较简单的PPP协议较为合理。
  • 在因特网环境下,PPP的信息字段放入的数据是IP数据报,数据链路层的可靠传输并不能够保证网络层的传输也是可靠的。
  • 帧检验序列FCS字段可保证无差错接受。

广播信道

在使用广播信道的数据链路层,使用的最多的数据链路层协议是CSMA/CD。主要用于局域网(使用集线器或总线连接的网络)。

局域网特点

局域网拓扑

局域网的主要特点是:网络为一个单位所拥有,且地理范围和站点数目均有限。

局域网的主要优点:

  • 具有广播功能,从一个站点可以很方便的访问全网。局域网上的主机可共享连接在局域网上的各种硬件资源和软件资源。
  • 便于系统的扩展和逐渐的演变,各设备的位置可灵活调整和改变
  • 提高了系统的可靠性、可用性和生存性
局域网共享通信媒体

静态划分信道:频分复用、时分复用、波分复用、码分复用。缺点:很麻烦,每接入一台设备,都要与网络中的其他设备建立信道。目前一般不再使用。

动态媒体接入控制(多点接入):

  • 随机接入,主要被以太网采用,一台主机随时随地都可以和局域网中的另一台计算机通信。
  • 受控接入,目前已不被采用
认识以太网

总线型以太网

不管是总线网还是星型网,他们都是通过具有广播特性的总线上实现一对一的通信。这里的广播指的是,所有连接在局域网中的主机都可以收到发送的电信号,但是只有Mac地址匹配的设备,才会接受该数据。

安全隐患:黑客可以通过修改网卡配置,让网卡不管收到的数据是不是发给自己的,统统都接受,那么就可能导致信息泄露。

CSMA/CD协议

多点接入:多台计算机通过多点接入的方式连接在一根总线上。

载波监听:就是用电子技术检测总线上是否其他计算机发送的数据信号。每个主机在发送数据之前,先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。

使用CSMA/CD协议的以太网不能进行全双工通信,只能进行双向交替通信(半双工通信)。

每个站在发送数据之后的一小段时间内,都存在着遭遇碰撞的可能性。这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。

碰撞检测

碰撞检测就是计算机边发送数据边检测信道上的信号电压大小。

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

检测到碰撞后:

  • 在发生碰撞时,总线上传输的信号发生了严重的失真,无法从中恢复出有用的信息
  • 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送数据,免得继续浪费网络资源,然后等待一段随机时间后再次发送。

传播时延对载波监听的影响

假设A传播到B的单程传播时延为t,那么A检测到冲突存在,最长的时间为2t。

争用期

最先发送数据帧的站,在发送数据帧后至多经过时间2t(两倍的端到端传播时延)就可知道发送的数据帧是否遭受了碰撞,如果经过了2t时间后还没有检测到碰撞,那么基本可以说之后也不会发生碰撞了。

以太网的争用期:

  • 以太网两倍端到端传播时延2t称为争用期,通常取 51.2 微秒为争用期的长度。
  • 对于 10Mb/s 的以太网,在争用期内可发送 512bit,即64字节。
  • 以太网在发送数据时,若前64字节未发生冲突,则后续的数据就不会发生冲突。

最短有效帧长:

  • 如果发生冲突,就一定是在发送的前64字节之内。
  • 由于一检测到冲突就立即停止发送,这时已经发送出去的数据一定小于64字节。
  • 以太网规定了最短有效帧长为64字节,凡长度小于64字节的帧都是由于冲突而异常终止的无效帧。

以太网

以太网与数据链路层的两个子层:

  • 逻辑链路控制子层 LLC (基本不再使用)
  • 媒体接入控制子层 MAC

很多厂商生产的网络适配器上仅装有MAC协议,而没有LLC协议

以太网提供的服务:尽最大努力的交付。当接收端收到有差错的帧的时候,就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。如果高层发现丢失了一些数据而进行重传,但是以太网并不知道这是一个重传的帧,只是当做一个新的数据帧来发送。

集线器

集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。

集线器属于纯硬件网络底层设备,工作于OSI/RM参考模型的物理层数据链路层的MAC子层。物理层定义了电气信号,符号,线的状态和时钟要求,数据编码和数据传输用的连接器。因为集线器只对信号进行整形、放大后再重发,不进行编码,所以是物理层的设备。集线器采用了CSMA/CD(载波帧听多路访问/冲突检测)协议,CSMA/CD为MAC层协议,所以集线器也含有数据链路层的内容。

使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是CSMA/CD协议,并共享逻辑上的总线。

HUB是一个多端口的转发器,当以HUB为中心设备时,网络中某条线路产生了故障,并不影响其它线路的工作。所以HUB在局域网中得到了广泛的应用。

由于集线器会把收到的任何数字信号,经过再生或放大,再从集线器的所有端口提交,这会造成信号之间碰撞的机会很大,而且信号也可能被窃听,并且这代表所有连到集线器的设备,都是属于同一个碰撞域名以及广播域名,因此大部份集线器已被交换机取代

集线器的工作过程是非常简单的,它可以这样的简单描述:首先是主机发信号到线路,集线器接收该信号,因信号在电缆传输中有衰减,集线器接收信号后将衰减的信号整形放大,最后集线器将放大的信号广播转发给其他所有主机。

每台主机到集线器的距离不超过100m。

MAC层

MAC层的硬件地址

在局域网中,硬件地址又称为物理地址,或MAC地址。

802标准为局域网规定了一种48位的全球地址,指的是局域网中每一台计算机中固化在适配器的ROM中的地址。该地址全球唯一且生产出来后就固定在适配器中,无法修改

所谓的修改MAC地址,其实并不是修改了适配器中的MAC地址,而是让计算机不再使用适配器中的地址,而采用自己设定的MAC地址。

MAC地址有6个字节,48位,为了保证MAC地址全球唯一,现在由 IEEE 的注册管理机构RA来对MAC地址进行管理,它负责分配MAC地址6个字节中的前三个字节(即高位24位),世界上凡是要生产适配器的厂家都必须向它购买由这三个字节构成的号(即地址块),这个号的正式名称是组织唯一标识符OUI,通常也叫做公司标识符。MAC地址的后三个字节(即低位24位)则是由厂家自行指派,称为扩展标识符,只要保证生产的适配器没有重复的地址即可。用一个地址块可以生产2242^{24}个不同的地址。

适配器检查MAC地址

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

  • 如果是发往本站的帧则收下,然后再进行其他处理
  • 否则直接将帧丢弃,不再进行其他处理

"发往本站的帧"包括以下三种:

  • 单播帧(一对一)
  • 广播帧(一对全体),目标MAC地址是 FF-FF-FF-FF-FF-FF
  • 多播帧(一对多)
MAC帧格式

MAC帧格式

  • 类型,指明上层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。
  • 以太网最短帧长度为64字节,减去固定的18个字节,所以数据字段最短为46个字节,最长为1500个字节,若数据字段不足46个字节,我们需要填充数据至46个字节。
  • 为了达到比特同步,在传输媒体上实际传送的数据要比MAC帧多8个字节,前7字节是前同步码,用来迅速实现MAC帧的比特同步,后1字节是帧开始定界符,表示后面的信息就是MAC帧。

扩展以太网

在物理层考虑扩展

距离上的扩展:主机使用光纤和一对光纤调制解调器连接到集线器。

数量上的扩展:用一个集线器把其他多个集线器连接起来。

集线器扩展

使用集线器扩展以太网的优点:

  • 使原来属于不同碰撞域的局域网上的计算机可以进行跨碰撞域的通信。
  • 扩大了局域网覆盖的范围

使用集线器扩展以太网的缺点:

  • 碰撞域增大了,但总的吞吐量并未提高,总的效率降低了
  • 如果不同的碰撞域使用不同的数据率,那就不能用集线器把他们互连起来

在数据链路层考虑扩展

网桥

在数据链路层扩展局域网使用的是网桥,网桥是早期的两端口二层网络设备,用来连接不同网段。网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域。网桥比集线器(Hub)性能更好,集线器上各端口都是共享同一条背板总线的。后来,网桥被具有更多端口、同时也可隔离冲突域的交换机(Switch)所取代。

网桥的原理:

网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。网桥不但能扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。网络1 和网络2 通过网桥连接后,网桥接收网络1 发送的数据包,检查数据包中的地址,如果地址属于网络1 ,它就将其放弃,相反,如果是网络2 的地址,它就继续发送给网络2.这样可利用网桥隔离信息,将同一个网络号划分成多个网段(属于同一个网络号),隔离出安全网段,防止其他网段内的用户非法访问。由于网络的分段,各网段相对独立(属于同一个网络号),一个网段的故障不会影响到另一个网段的运行。

网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据MAC帧的目的地址处于哪一网段来进行转发和滤除

网桥可以是专门硬件设备,也可以由计算机加装的网桥软件来实现,这时计算机上会安装多个网络适配器(网卡)。

网桥的基本特征:

1.网桥在数据链路层上实现局域网互连;

2.网桥能够互连两个采用不同传输介质与不同传输速率的网络

3.网桥以接收、存储、地址过滤与转发的方式实现互连的网络之间的通信;

4.网桥需要互连的网络在数据链路层以上采用相同的协议

5.网桥可以分隔两个网络之间的通信量,有利于改善互连网络的性能与安全性。

6.网桥对网段的了解是靠自学习实现的,它内部维护了一张地址表

网桥的优点:

  • 扩大了物理范围,也增加了整个局域网上的工作站的最大数目。
  • 过滤通信量。网桥可以使局域网的一个网段上各工作站之间的信息量局限在本网段的范围内,而不会经过网桥溜到其他网段去。
  • 可使用不同的物理层,可互连不同的局域网。
  • 网桥将一个较大的LAN 分成段,有利于改善可靠性、可用性和安全性。

网桥的缺点:

  • 网桥对接收的帧要先存储和查找站表,然后转发,这就增加了时延。
  • 在MAC子层并没有流量控制功能。当网络上负荷很重时,可能因网桥缓冲区的存储空间不够而发生溢出,以致产生帧丢失的现象。
交换机

交换器又被称为多端口网桥。它和网桥一样,是基于MAC地址来进行数据转发,能够自学习MAC地址表。

由于交换机的端口很多,所以不再需要集线器,可以直接连接主机。

交换机的优点:

  • 端口带宽独享
  • 安全性大大提高
  • 全双工通信

网络层

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

如果主机中的进程之间的通信需要是可靠的,那么就由运输层负责(包括差错处理、流量控制等)。

网络设备与OSI参考模型

  • 物理层 — 集线器
  • 数据链路层 — 网桥、交换机
  • 网络层 — 路由器
  • 网络层以上 — 网关

网际协议IP

**网际协议IP是TCP/IP体系中两个最重要的协议之一,也是最重要的因特网标准协议之一。**与IP协议配套使用的还有四个协议:

  • 地址解析协议 ARP
  • 逆地址解析协议 RARP
  • 网际控制报文协议 ICMP
  • 网际组管理协议 IGMP

互联网是由多个异构网络互连组成,整个因特网是一个虚拟互连网络,它的意思是,互联起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层看起来好像是一个统一的网络。这种使用IP协议的虚拟互联网络可简称为IP网,使用IP网的好处是:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,他们看不见互连的各网络的具体异构细节。

计算机通信的过程

发送端

  1. 应用层准备要传输的文件
  2. 传输层将文件分割成可在网络层传输的数据段,并编号
  3. 网络层给上层传下来的数据段加上源IP地址和目的IP地址
  4. 数据链路层给网络层传下来的IP数据报加上源MAC地址和目的MAC地址
    • 先判断自己处于哪个网段,然后判断目标处于哪个网段,若在同一网段,使用ARP协议广播解析目标IP地址的MAC地址,然后将MAC地址设置为目标MAC地址,直接发送
    • 若不是同一网段,需要将分组交个路由器让它负责转发到目的IP地址。使用ARP协议广播解析本局域网连接的路由器的MAC地址,然后将该路由器端口的MAC地址设置为目标MAC地址。
  5. 物理层将数据帧转化为Bit流

ARP与RARP

简单来说,ARP负责根据IP地址找到其对应的MAC地址,RARP负责根据MAC地址找到其对应的IP地址。

逆地址解析协议RARP在过去曾起到重要作用,但是现在的DHCP协议已经包含了RARP协议的功能,所以现在已经没有人再单独使用RARP协议了。

ARP协议的要点

每一个主机都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。那么主机是如何知道这些地址的呢?

  1. 当主机A想本局域网内的某个主机B发送IP数据报时,首先主机A去APR高速缓存中查看是否有主机B的IP地址,若有,就直接从中取出对应的硬件地址,写入到MAC帧,然后通过局域网将该MAC帧发往此硬件地址。
  2. 若未查到,主机A上的ARP进程会在局域网上广播发送一个ARP请求分组,主要内容是:"我的IP地址是10.0.0.2,硬件地址是 00-00-CF-14-AD-18,我想知道IP地址为 10.0.0.3 的主机的硬件地址"。
  3. 本局域网内的所有主机上运行的ARP进程都收到此ARP请求分组。
  4. 主机B在APR请求分组中发现请求的是自己的IP地址,就像主机A发送ARP响应分组,并写入硬件地址,其余主机都不理睬这个ARP分组。ARP响应分组的主要内容是:"我的IP地址为 10.0.0.3,我的硬件地址是00-00-3F-14-AD-17"。
  5. 主机A收到主机B的响应分组后,就在其ARP高速缓存中写入主机B的IP地址和硬件地址。

ARP请求分组是广播发送的,ARP响应分组是单播发送的,即从一个源地址发送至目的地址。

ARP高速缓存大大节省了局域网的网络带宽,高速缓存中的每一个地址映射都设有生存时间,超时的就删除掉。

ARP欺骗

地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。

主机A想要与主机B通信,有IP地址但是不知道主机B的MAC地址,所以它发送ARP广播,主机B收到后就发送响应告诉它自己的MAC地址,但这时候主机C也向主机A发送了响应,告诉它该IP地址对应的MAC地址是自己的MAC地址,主机A内的ARP高速缓存就把主机B的MAC地址替换为了主机C的MAC地址,之后发送的数据就发给了主机C,而原本应该受到数据的主机B就无法收到数据了。

IP地址

IP地址(Internet Protocol Address),缩写为IP Adress,是一种在Internet上的给主机统一编址的地址格式,也称为网络协议(IP协议)地址。它为互联网上的每一个网络和每一台主机分配一个逻辑地址,常见的IP地址,分为IPv4与IPv6两大类,当前广泛应用的是IPv4,目前IPv4几乎耗尽,下一阶段必然会进行版本升级到IPv6;如无特别注明,一般我们讲的的IP地址所指的是IPv4。

IP地址表示

IP地址(IPv4)由32位二进制数组成,分为4段(4个字节),每一段为8位二进制数(1个字节),中间使用英文的标点符号“.”隔开,由于二进制数太长,为了便于记忆和识别,把每一段8位二进制数转成十进制,大小为0至255。IP地址的这种表示法叫做“点分十进制表示法”。

IP地址的组成

计算机的IP地址由两部分组成,一部分为网络号,它标志主机(或路由器)所连接到的网络,一个网络号在整个因特网范围内必须是唯一的。一部分为主机号,它标志该主机(或路由器),一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。

IP地址具有以下重要特点:

  1. IP地址是一种分等级的地址结构,有两个好处:
    • IP地址管理机构只负责分配网络号,主机号由得到该网络号的单位自行分配,方便了IP地址的管理
    • 路由器仅根据目的主机所连接的网络的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大大减少,从而减小了路由表所占的存储空间以及查找路由表的时间
  2. 实际上IP地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机就必须同时具有两个响应的IP地址,其网络号必须是不同的,这种主机称为多归属主机。路由器总是具有两个或两个以上的IP地址,即路由器的每一个接口都有一个不同网络号的IP地址。
  3. 一个网络是指具有同一个网络号的主机的集合,因此,用转发器或网桥连接起来的若干个局域网仍是一个网络,具有不同网络号的局域网必须使用路由器来连接
  4. 在IP地址中,所有分配到网络号的网络都是平等的。

当两个路由器直接相连时,在连线两端的接口处,可以分配也可以不分配IP地址,因为这里是点到点的连接,使用的是PPP协议。

IP地址与MAC地址区别
  • 长度不同:IP地址为32位(二进制),MAC地址为48位(十六进制)。
  • 分配依据不同:IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商。
  • 寻址协议层不同:IP地址应用于OSI第三层(网络层),而MAC地址应用在OSI第二层(数据链路层)。

IP地址分类

由于各种网络差异很大,有的网络主机很多,有的很少,为了满足不同用户的需求,所以把IP地址分为了A类、B类和C类。D类为组播地址,E类为保留地址,这两类不是常用的IP地址。

IP地址分类

A类地址范围:1.0.0.0 - 126.255.255.255

B类地址范围:128.1.0.0 - 191.255.255.255

C类地址范围:192.0.1.0 - 223.255.255.255

特殊的保留IP地址
  • 网络号为全0的IP地址,指本网络
  • 网络号为127(即01111111)的IP地址,保留作为本地软件环回测试地址
  • 主机号为全0的IP地址,代表本网段
  • 主机号为全1的IP地址,特指该网段的全部主机,如果你的计算机发送数据包使用主机ID全是1的IP地址,数据链层地址用广播地址FF-FF-FF-FF-FF-FF
  • 128.0.0.0 不指派
  • 192.0.0.0 不指派

IP数据报格式

IP数据报由首部和数据两部分组成,数据部分来自于传输层。

  • 首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。
  • 在首部的固定部分的后面是一些可选字段,其长度是可变的。

IP数据报格式

首部具体分析:

  • 版本:标识 TCP/IP 协议的版本,V4 还是 V6

  • 区分服务:不同的内容,在网络上的传输速度不同

  • 总长度:整个数据报的大小,该区域占有4字节,16位,表示一个数据报最多可以有 21612^{16}-1 个字节的数据。

  • 标识:标识一个完整的数据报,在数据报分片以后,可以重新组装成一个完整的数据报

  • 标志:用来区分收到的分组是一个数据报分片还是一个完整的数据报。标志占3位,目前只有前两位有意义。标志字段的最低位是MF(More Fragment)。MF = 1 表示后面还有分片。MF = 0 表示最后一个分片。标志字段中间的一位是DF(Don't Fragment)。只有当 DF = 0 时才允许分片。

  • 片偏移:

  • 生存时间:每过一个路由器,TTL减一,当 TTL = 0 时,数据报被丢弃。

  • 协议:标识数据部分采用的是什么协议,是 UDP 还是 TCP 等等。

    协议

    常见协议号:ICMP = 1,IGMP = 2,TCP = 6,UDP = 17,IPv6 = 41,OSPF = 89。

  • 首部检验和

    检验过程

抓包分析:

数据报抓包

未分片的数据报:

未分片

数据报分片:

在不同数据链路中,MAC帧各自的最大传输单位不同。 MTU的值在以太网中是1500字节,在FDDI中是4352字节,在ATM则为9180字节。

在数据链路层,数据部分最大可有1500个字节,而网络层的数据报中最大可有65535个字节,当网络层的数据包的大小大于数据链路层的MTU的时候,就需要进行数据报分片。一般来说,传输层分割的数据不会大于1500字节,所以也就不需要数据报分片了。

如果IP数据报不想分片,那么单个数据报的数据部分,不能大于1480个字节

分片的时候,经过分片的数据16位标识都一样,为了组装的时候能够知道哪些是同一片数据。

通过片偏移来保证分片与组装的顺序,片偏移为0的数据为数据首部,而下一次偏移量等于当前片偏移+总长度。

数据报分片

IP层转发分组流程

划分子网和构造超网

划分子网

为什么要划分子网?
  1. IP地址空间的利用率有时很低,有的单位主机数并不多,并不需要申请一个B类地址网络,但是为了以后的发展又不愿意申请一个足够使用的C类网络,所以造成了IP地址的浪费,会使有限的IP地址空间过早的被用完。
  2. 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
  3. 两级IP地址不够灵活。如果一个单位需要在新的地点马上开通一个新的网络,但是在申请到一个新的IP地址之前,新增加的网络是不可能连接到因特网上工作的。
划分子网的意义与好处
  1. 减少广播所带来的负面影响,提高网络的整体性能。
  2. 节省了IP地址资源。
  3. 由于不同子网之间是不能直接通信的(但可通过路由器或网关进行),在网络安全形势不容乐观的今天,网络越小,安全性就相对越高,因为入侵的途经小了。
  4. 便于维护。
划分子网的思路
  1. 一个拥有多个物理网络的单位,可将所属的物理网络划分为若干个子网。划分子网纯属一个单位内部的事情,对外仍然表现为一个网络。
  2. 划分子网的方法是从网络的主机号借用若干位作为子网号,主机号也就相应的减少了同样的位数。二级IP地址在本单位内部就变为三级IP地址:网络号、子网号、主机号。IP地址 ::= {<网络号>,<子网号>,<主机号>}
  3. 凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但是此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机。
子网掩码

子网掩码是一个32位二进制的值,使用点分十进制来表示,子网掩码中的1对应于IP地址中原来的网络号加上子网号,而子网掩码中的0对应于现状的主机号。将子网掩码与IP数据报的目的IP地址逐位相与,得出来的就是子网的网络地址。

使用子网掩码的好处是:不过网络有没有划分子网,只要把子网掩码和IP地址进行逐位与运算,就能立即得出网络地址来。

如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。

划分子网后分组的转发

使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址

在划分子网的情况下,路由器转发分组的算法如下:

  1. 从收到的数据报的首部提取目的IP地址 D
  2. 先判断是否为直接交付,对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相与,看结果是否和相应的网络地址匹配,若匹配,则直接交付,否则,执行3
  3. 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行4
  4. 对路由表中的每一行,用其中的子网掩码和D逐位相与,看结果是否和该行的目的网络地址匹配,若匹配,则把数据报传送给改行指明的下一跳路由器,否则,执行5
  5. 若路由表中有一个默认路由,则传送给默认路由器,否则,报告转发分组出错。

构造超网

无分类编制CIDR
  • CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,可以更加有效的分配IPv4的地址空间。

  • CIDR把32位的IP地址分为两个部分,网络前缀和主机号,无分类的两级编址,IP地址 ::= {<网络前缀>,<主机号>}

  • CIDR还是用斜线记法,在IP地址后面加上斜线 \ ,然后写上网络前缀所占的位数。

  • CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块,我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址和最大地址,以及地址块中的地址数。

  • CIDR采用32位的地址掩码,斜线记法中斜线后面的数字就是地址掩码中1的个数。

  • 由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络,称为路由聚合,也称为构成超网。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个因特网的性能。

最长匹配前缀

在使用CIDR时,路由表中的每个项目由网络前缀和下一跳地址组成,但是在查找路由表时可能会得到不止一个匹配结果,这时**应当从匹配结果中选择具有最长网络前缀的路由,这叫做最长前缀匹配。**因为网络前缀越长,地址块就越小,路由就越精确。

路由选择协议

静态路由:简单、开销小,但不能及时适应网络状态的变化,适用于小网络,人工配置每一条路由。需要管理员告诉路由器,所有没有直连的网络,下一跳给谁。

动态路由:复杂、开销较大,能及时适应网络状态的变化,适用于复杂的大型网络。

路由信息协议 RIP

RIP 是一种分布式的基于距离向量的路由选择协议。RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。距离也被称为跳数。

RIP 认为好的路由就是它通过的路由器的数目少,即距离短。RIP 允许一条路径最多只能包含15个路由器,因此距离等于16时即相当于不可达。可见 RIP 只适用于小型互联网。

RIP 协议的特点:

  • 仅和相邻的路由器交换信息。
  • 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
  • 按固定的时间间隔交换路由信息。一般为30秒。

路由表中的信息就是:到某个网络的距离(即最短距离),以及下一跳路由器的地址。

路由表更新的原则是找出每个目的网络的最短距离。采用距离向量算法。

RIP协议最大的优点:实现简单,开销较小

RIP协议的缺点:

  • 限制了网络的规模,最大距离为15
  • 路由器之间交换的路由信息是路由器中的完整路由表,随着网络规模的扩大,开销也就增加。
  • 好消息传播的快,坏消息传播的慢。当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。

RIP协议使用运输层的用户数据报UDP进行传送(端口 520)

开放最短路径优先 OSPF

OSPF 使用分布式的链路状态协议。

  • 向本自治系统内的所有路由器发送信息。采用的是洪泛法。
  • 发送的信息就是与本路由器相邻的所有路由器的链路状态,费用、距离、时延、带宽等。
  • 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。

网际控制报文协议 ICMP

ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。

ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

ICMP报文的种类

ICMP报文有两种,ICMP差错报告报文ICMP询问报文

ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码和检验和。接着四个字节的内容与ICMP的类型有关。最后是数据字段,其长度取决于 ICMP 的类型。

ICMP报文格式

ICMP报文格式

常见的五种ICMP差错报告报文

  • 终点不可达,当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
  • 源点抑制,当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
  • 时间超过,当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当重点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
  • 参数问题,当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
  • 改变路由(重定向),路由器把改变路由报文发送给主机,让主机知道下次应将数据报文发送给另外的路由器。

ICMP差错报告报文格式

差错报告报文格式

所有的ICMP差错报告报文的数据字段都具有同样的格式,把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上响应的ICMP差错报告报文的前8字节,就构成了ICMP差错报告报文。

IP数据报首部要被传回的原因,因为IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的8个字节。而IP首部后面的8字节(UDP的首部或者TCP首部,UDP和TCP首部的8个字节分别包含了16位的目的端口号和源端口号),根据源端口号就可以把差错报文与某个特定的用户进程关联。

常用的两种ICMP询问报文

  • 回送请求和回答
  • 时间戳请求和回答

ICMP的应用

ICMP的一个重要应用就是分组网间探测 PING(Packet InterNet Groper),用来测试两个主机之间的连通性。

PING 是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP或UDP。

  • time:延时
  • TTL:生存时间,每经过一个路由器就减一,为了防止数据报在网络中循环传送,占用带宽。

另一个非常有用的应用是 traceroute (这是UNIX操作系统中的名字),它用来跟踪一个分组从源点到终点的路径。

traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。第一个数据报的生存时间TTL设置为1,经过第一个路由器后,TTL减一变为零,这时路由器就将该数据报丢弃并向源主机发送一个ICMP时间超过差错报告报文。之后发送的数据报TTL依次增加。

当最后一个数据报刚刚到达目的主机时,数据报的TTL是1,主机不转发数据报,也不把TTL值减一,但是因为IP数据报中封装的是无法交付的运输车的UDP用户数据报,因此目的主机要向源主机发送ICMP终点不可达差错报告报文。

这样源主机就获得了到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间

IGMP协议

组播(多播)

组播技术的初衷是在IP网络中,以"尽力而为"的形式发送信息到某个目标组,这个目标组称为组播组,这个组中的所有主机的网卡绑定的是组播组地址,这样在有源主机向多点目标主机发送信息需求时,源主机只发送一份数据,数据的目的地址是组播组地址,这样,凡是属于该组的成员,都可以接收到一份原主机发送的数据的拷贝,此组播方式下,只有真正信息需要的成员会收到信息,其他主机不会收到。

因此组播方式解决了单播情况下数据的重复拷贝及带宽的重复占用,也解决了广播方式下带宽资源的浪费。

组播并不建立会话。

传输层

TCP 传输控制协议,实现可靠传输,将需要传送的文件分段编号后传输,需要建立会话,有流量控制功能。

UDP 用户数据报协议,实现不可靠传输,一个数据包就能够完成数据通信,不需要建立会话,不需要流量控制。

常见的应用层协议使用的传输层协议及默认端口号

  • HTTP:TCP + 80
  • HTTPS:TCP + 443
  • RDP:TCP + 3389 远程桌面
  • FTP:TCP + 21
  • 共享文件夹:TCP + 445
  • SMTP:TCP + 25 发邮件
  • POP3:TCP + 110 收邮件
  • TELNET:TCP + 23
  • SQL:TCP + 1433
  • DNS:UDP + 53

服务和应用层协议之间的关系

  • 服务安装以后,就可以通过TCP或UDP的端口来侦听客户端的请求
  • 可以在服务器的网卡上设置只开放必要的端口,实现网络安全

更改服务的默认端口号,可以迷惑入侵者,提升服务器安全性

传输层实现的功能

传输层为应用进程之间提供端到端的逻辑通信,网络层是为主机之间提供逻辑通信。

传输层还要对收到的报文进行差错检测。

传输层提供面向连接和无连接的服务。

传输层功能

端口

端口使用一个16位端口号进行标志。端口号的取值范围 0 ~ 65535。

端口号只具有本地意义,即端口号只是为了标志本计算机应用层的各进程。

  • 熟知端口号:0 ~ 1023
  • 登记端口号:1024 ~ 49151
  • 客户端端口号:49152 ~ 65535

UDP

UDP概述

  • UDP是无连接的
  • UDP使用尽最大努力交付
  • UDP是面向报文的
  • UDP没有拥塞控制,很适合多媒体通信的要求。
  • UDP支持一对一、一对多、多对一、多对多的交互通信。
  • UDP的首部开销小,只有8个字节。

UDP首部的格式

UDP格式

  • 源端口,在需要对方回信时选用,不需要时可用全0
  • 目的端口,在终点交付报文时必须要使用到。
  • 长度,UDP数据报的长度,包含首部和数据,最小值为8(仅有首部)
  • 检验和,检测UDP用户数据报在传输中是否有差错。

伪首部其实并不存在,只是为了计算检验和。

TCP

TCP的特点

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

TCP的连接

TCP连接的端点不是主机,不是IP地址,不是应用进程,也不是传输层的协议端口,TCP连接的端点叫做套接字(socket)。

套接字 soket = IP地址 : 端口号

每一条TCP连接唯一的被通信两端的两个套接字所确定,即 { socket, socket } = { IP1:port1, IP2, port2}

TCP报文段首部格式

TCP首部格式

TCP是全双工通信,在一方发送数据的同时,另一方也可以发送数据,所以TCP在建立会话以后,在通信两端都会维持一个发送缓存和一个接收缓存,用来发送数据和接收数据。

发送缓存用来暂时存放:

  • 发送应用程序传送给发送方 TCP 准备发送的数据
  • TCP 已发送出但尚未收到确认的数据

接收缓存用来暂时存放:

  • 按序到达的、但尚未被接收应用程序读取的数据;
  • 不按序到达的数据

首部格式:

  • 序号:该报文段中的数据的第一个字节在整个文件数据中处于第几个字节,序号就是几。
  • 确认号:告诉发送者,下一个报文段内的数据应该从整个文件数据的第几个字节开始。在这个字节之前的数据已经收到了,可以把它们从发送缓存中移除了。
  • 数据偏移:用来记录该报文段从第几个字节以后开始是数据部分了,即首部长度。4位二进制,转化为十进制最大为15,这里1位代表四个字节,也就是说首部最多60字节。固定长度为20字节,所以选项部分最多40个字节。同时,由于1位代表四个字节,当有选项内容且长度不足四字节时,需要进行填充。
  • 保留:6位二进制,暂时没用到。
  • URG:urgent,紧急的。URG=1,优先传输,不需要在发送缓存中排队。
  • ACK:acknowledgement,确认。如果该位为0的话,确认号无效,只有该位为1的时候,确认号才有效。
  • PSH:接收端 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
  • RST:连接出现问题,需要重新建立连接
  • SYN:sync,同步。在建立TCP连接的时候用来同步信息。
  • FIN:断开连接,提出断开连接的一方的FIN为1
  • 窗口:告诉对方自己的接收缓存的窗口大小,用于流量控制
  • 检验和:检验报文内容的正确性
  • 紧急指针:占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)
  • 选项:MSS 最大数据段尺寸;SACK 是否支持选择性确认;时间戳

一个网页请求从开始到结束

  1. ARP解析网关的Mac地址
  2. 向DNS服务器请求解析域名得到目的IP地址
  3. TCP三次握手建立连接
  4. 开始传输数据
  5. 关闭网页,TCP四次挥手,断开连接

网页请求抓包

可靠传输的工作原理

停止等待协议

无差错和超时重传
  • 在发送完一个分组之后,必须暂时保留已发送分组的副本。
  • 分组和确认分组都必须进行编号。
  • 超时计时器的重传时间应该比数据在分组传输的平均往返时间更长一些。

停止等待协议

确认丢失和确认迟到

确认丢失和确认迟到

使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。这种可靠传输协议通常称为自动重传请求ARQ(Automatic Repeat reQuest)。ARQ表明重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。

连续ARQ协议

发送窗口

采用停止等待协议,信道利用率太低,太多的时间花在了等待确认上面,于是有了流水线传输。

发送方维持一个可滑动的发送窗口,在窗口内的分组,可以连续发送,不需要等待确认。当分组内的所有分组都发送完以后,就需要等待确认分组,收到确认分组后,就把该分组从发送窗口中移除,然后滑动窗口,加入一个新的分组,继续发送。

累积确认
  • 定义:接收方一般采用累积确认的方式.即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了
  • 优点:容易实现,即使确认丢失也不必重传
  • 缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息

TCP的可靠传输实现

以字节为单位的滑动窗口

以字节为单位的滑动窗口

超时重传时间的选择

选择确认SACK

TCP如何实现流量控制

在TCP进行数据传输的时候,通信的两端在建立连接的时候,会沟通一些数据,互相告诉对方自己的接收窗口大小是多少,这样一来,发送方在发送数据时,它的发送窗口就不能大于接收方的接收窗口,否则接收方就处理不过来了,也就是说发送方的发送窗口的大小取决于接收方的接收窗口的大小。

接收方在接收到发送方发过来的数据后,并不是立即交付给上层应用,而是先存放在接收缓存中,之后向发送方发送确认信息时,会更新自己的接收窗口的大小,而发送方在接收到确认信息后,也会对应的修改自己的发送窗口大小,直到接收方的接收缓存满了,接收窗口大小变成零,那么发送方的发送窗口大小也变成零,发送方就暂停发送数据。等接收方把缓存中的数据交付给上层应用后,缓存清空,接收窗口放开,接收方会发送一条确认信息给发送方,发送方也同时修改自己的发送窗口的大小,继续开始发送数据。

为了避免接收方在清空缓存后发送的确认信息在网络中丢失导致通信双方陷入无限等待的情况,发送方会定时发送信息询问接收方,是否可以继续发送数据了。

TCP的拥塞控制

慢开始和拥塞避免

慢开始和拥塞避免

发送方维持一个叫拥塞窗口的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口小于等于拥塞窗口。

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组转发出去,但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法思路:由小到大逐渐增大拥塞窗口。每经过一个传输轮次,拥塞窗口 cwnd 就加倍。为了防止拥塞窗口增长过快引起网络拥塞,还需要设置一个慢开始门限 ssthresh。

  • 当 cwnd < ssthresh 时,使用慢开始算法
  • 当 cwnd >= ssthresh 时,使用拥塞避免算法

拥塞避免算法的思路:让拥塞窗口缓慢的增大,每经过一个往返时间RTT就把发送方的拥塞窗口 cwnd 加1。

无论是慢开始阶段还是拥塞避免阶段,一旦遇到网络出现拥塞,就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半,然后把拥塞窗口重新设置为1,执行慢开始算法。

快重传和快恢复

快重传和快恢复

快重传算法:要求接收方在每收到一个失序的报文段后就立刻发出重复确认。而发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必等待该报文段的重传计时器到期。

快恢复算法:当发送方连续收到三个重复确认时,就执行乘法减小算法,把慢开始门限 ssthresh 减半,这是为了预防网络发生拥塞。由于发送方现在认为网络很可能没有发生拥塞(因为如果拥塞了,就不会一连有好几个报文段连续到达),这时把拥塞窗口 cwnd 设置为 慢开始门限 ssthresh 减半后的值,然后开始执行拥塞避免算法。

TCP传输连接管理

传输连接有三个阶段:连接建立、数据传送、连接释放。

TCP连接的建立都是采用客户服务器方式。主动发起连接建立的应用进程叫做客户,被动等待连接建立的应用进程叫做服务器。

TCP连接建立

三次握手

三次握手

  1. Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  2. Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  3. Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确,Client将进入ESTABLISHED状态,同时生成一个新的数据包,将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server收到后检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Server也进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
SYN攻击

在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了。

三次握手的第三个ACK包丢了,那么客户端和服务器端分别进行什么处理?

服务端

如果第三次的ACK在网络传输过程中丢失了,那么此时 Server 端TCP连接状态为SYN_RECV,如果在一段时间内没有收到ACK包,Server 会根据 TCP 的超时重传机制,在等待3秒、6秒、12秒后重新发送SYN+ACK包,以便 Client 重新发送ACK包。

而 Server 重发SYN+ACK包的次数,可以通过设置 /proc/sys/net/ipv4/tcp_synack_retries 修改,默认值为5

如果重发指定次数之后,仍然未收到 Client 的ACK应答,那么一段时间后,Server 将自动关闭这个连接。

客户端

客户端在接收到 SYN+ACK 包以后,TCP连接进入 ESTABLISHED 状态,这个时候客户端认为连接已经建立了,然后就会正常的向服务端发送数据,但是因为第三个ACK包丢了,服务端的TCP连接状态仍然为 SYN_RCVD 状态,这时服务端将以 RST 包响应,这样客户端就知道连接并没有成功,需要重新发送ACK包。

为什么需要三次握手,而不是两次?

3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

现在把三次握手改成仅需要两次握手,死锁是可能发生的。举个例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。同时C可能会再次发送连接请求分组,S收到以后,会当成一个新的连接来处理,但是之前的连接并不会释放,这就占用了S的资源。

TCP连接释放

四次挥手

四次挥手

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

  1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
  2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
  3. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  4. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。
为什么连接的时候是三次握手,关闭的时候却是四次挥手?

因为当Server收到Client的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client,"你发的FIN报文我收到了"。只有等到我Server所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步挥手。

TIME_WAIT是干什么的?为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态?

在结束TCP连接时,客户端发送给服务端的最后一个ACK报文,有可能在网络传输过程中丢失,这个时候服务端就会重新发送FIN包让客户端确认,如果没有TIME_WAIT状态,客户端直接进入CLOSE状态,那么就不会回应服务端的FIN包,那么服务端就会一直处于不断重传的状态,无法关闭TCP连接,所以客户端不能立即关闭,它必须确认服务端接收到了该ACK。

客户端会在发送出ACK之后进入到TIME_WAIT状态。客户端会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么客户端会重发ACK并再次等待2MSL。

所谓的MSL(Maximum Segment Lifetime)是指最大报文段生存时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,客户端都没有再次收到FIN,那么客户端就认为ACK已经被成功接收,则结束TCP连接。

应用层

DNS 域名解析服务

负责将域名解析成IP地址。

我们在通过域名访问网络时,首先向公网上的DNS服务器发送请求,请求解析域名,DNS返回给我们具体的IP地址,我们才能获取到目的IP地址。

  ~ nslookup
> baidu.com
Server:		202.96.209.133
Address:	202.96.209.133#53

Non-authoritative answer:
Name:	baidu.com
Address: 220.181.38.148
Name:	baidu.com
Address: 39.156.69.79

// nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题

安装自己的DNS服务器:

  1. 解析内网自己的域名
  2. 降低到 Internet 的域名解析流量
  3. 域环境

DHCP 动态主机配置协议

主机向DHCP服务器请求IP地址的过程:

  1. 主机在网络上发送广播,申请IP地址
  2. DHCP服务器收到以后,就会回复一个IP地址给主机
  3. 主机收到后,告诉DHCP服务器确认要使用这个IP地址
  4. DHCP把该IP地址相关的网关地址、子网掩码都返回给主机

DHCP服务器的地址必须是静态IP地址

DHCP跨网段地址分配

要给几个网段分配地址,就要在DHCP服务器上添加几个作用域,写上对应的网段的网关。

不同网段的路由器需要开启一个服务,在本网段主机发送请求IP地址的广播包的时候,定向的把这些包发送给DHCP服务器。DHCP服务器可以根据路由器的地址,来分析出该请求来自于哪个网段,就在对应网段的作用域内,选一个IP地址返回回去。

FTP 文件传输协议

FTP连接方式

FTP使用两个TCP连接

控制连接:发送文件上传、下载、删除、复制等操作命令,标准端口21

数据连接:真正的开始数据传输,标准端口20

数据连接的两种模式:

  • 主动模式:服务端从20端口主动向客户端发起连接
  • 被动模式:服务端在指定范围内的某个端口被动等待客户端发起连接

FTP传输模式

  • 文本模式:ASCII模式,以文本序列传输数据
  • 二进制模式:Binary模式,以二进制序列传输数据

FTP服务器端,如果配有防火墙,需要在防火墙上打开20和21端口,使用主动模式进行数据连接

TELNET 远程终端协议

RDP 远程桌面协议

将用户添加到远程桌面(Remote Desktop Users)组,用户就可以进行远程桌面连接了

Server是多用户操作系统,可以同时允许多个用户进行远程桌面连接。

XP、Win7、Win10都是单用户操作系统,同时只允许一个用户进行操作。

HTTP 超文本传输协议