第一章——TCP/IP协议

1.为什么要进行网络互连?

  • 没有一种单一的网络硬件技术可以满足所有的要求
  • 用户期待一种通用的互连
  • 网络互连的目的就是要隐藏底层网络硬件的细节,同时提供一般的服务通信

2.网络互联的方式

  • 应用级互连:应用程序直接建立在物理网络上,无任何中间协议。
    • 缺点:
      • 每台机器都要有所需应用程序
      • 硬件变动后,应用程序也要变动
      • 代码重复
  • 网络级互连:在低层网络技术与高层应用程序之间增加一个中间层软件,屏蔽硬件细节,向用户提供通用网络服务。
    • 优点:
      • 系统更加灵活
      • 出现新的网络技术,只要修改或者增加新的网络层软件
      • 把数据通信活动从应用程序中分离出来,允许中间的计算机直接处理网络通信

3.为什么需要TCP/IP

不同网络通信会出现下面的问题

  • 不同的网络地址不同
  • 不同的网络数据格式不同

解决办法

引入IP层,屏蔽不同物理网络技术的差别。由路由器来对不同网络进行连接,进行地址和数据格式的转换。

4.数据传输过程中选路、控制和可靠性问题

  • 选路:路由协议(RIP、OSPF、BGP等)
  • 控制:ICMP
  • 可靠性:TCP/UDP传输层协议

5.TCP/IP分层模型

分层的优点:简化问题,分而治之,有利于软件升级换代

分层缺点:效率低

  • 处理效率低:各层之间相互独立,都要对数据进行分别处理
  • 通信效率低:每层处理完毕都要增加一个头结构,增加通信数据量

分层原则对等层通信,即信宿机和信源机对等层收发的数据完全一致。

模型结构

img
  • 应用层:提供通用的应用程序
  • 传输层:提供程序间端到端的通信
    • 格式化信息流
    • 提供可靠传输
    • 识别不同应用程序
  • IP层:负责点到点通信
    • 处理TCP分层发送请求
    • 为数据报寻径
    • 处理ICMP报文
    • 组播服务
  • 网络层接口:接收IP数据报并通过选定的网络发送

6.列出TCP/IP参考模型中各层间的接口数据单元(IDU)

  • 应用层/传输层:应用层报文
  • 传输层/IP层:TCP报文或UDP分组
  • IP层/网络接口层:IP数据报
  • 网络接口层/底层物理网络:帧

7.路由器的基本功能

  • 连接不同的物理网络
  • 维护、更新路由表
  • IP数据报的选路转发

第二章——点到点协议PPP

1.PPP协议

PPP协议的概念

  • PPP协议即点到点协议
  • PPP协议属于网络接口层
  • PPP协议主要用于拨号接入因特网的场合
  • PPP协议的对等端是客户和ISP

PPP协议应满足的条件(功能)

  • 封装成帧
  • 支持多种类型链路
  • 检测链路状态
  • 差错控制
  • 设置最大传送单元(MTU)
  • 支持多种网络层协议
  • 支持数据压缩协商
  • 简单

PPP协议组成

  • HDLC封装
    • PPP的封装格式类似HDLC
    • 定义了将IP数据报封装到串行链路的方法,明确地定界一个帧的结束和下一个帧的开始,其帧格式允许进行错误检测。
  • 数据链路控制LCP:负责线路建立、配置、测试和选项协商,并在它们不再被需要时,稳妥地把它们释放。
  • 网络控制协议NCP:建立和配置不同的网络层协议
  • 认证协议PAP/CHAP:用接入ISP时进行客户身份验证

PPP协议流程

  • 发起方(客户)利用LCP配置请求报文,配置链路参数(比如认证协议,最大传送单元,压缩协议等),创建PPP链路;
  • 回应方(ISP)若同意则返回确认报文
  • 发起方利用PAP或者CHAP进行身份验证
  • 回应方验证身份成功后返回确认报文
  • 发起方利用NCP协商网络层协议
  • 回应方返回确认,其中包含分配给发起方的IP地址
  • 发起方发送LCP终止链路请求
  • 回应方返回确认,链路终止

2.PPP协议帧格式——HDLC封装

img

3.链路控制协议LCP和网络控制协议NCP

LCP流程

  • 发起方向接收方发送Request报文并携带协商参数选项
  • 若接收方对Request报文中每个选项都能识别并接受,则回应ACK报文
  • 若接收方对Request报文中每个选项都能识别但只有部分能接受,则回应NAK报文
  • 若接收方对Request报文中部分选项不能识别,则回应Reject报文

NCP流程

  • 和LCP一样

4.口令认证协议PAP和询问握手认证协议CHAP

PAP流程

发生时机:仅在建立连接的阶段发生

流程

  • 完成链路连接阶段之后,被验证方(发起通信的一方)将自己的用户名和口令发送给验证者。
  • 认证端检查是否有此用户和口令是否正确,正确则返回一个ACK报文,验证成功进入下一阶段。

CHAP流程

发生时机:建立连接时和连接建立之后的任何时间

流程

  • 链路建立阶段结束之后,认证者向对端发送“challenge”和用户名信息
  • 对端收到“challenge”后使用之前双发协商好的一种算法(哈希算法)生成应答后送回。
  • 认证者收到应答后将和本端通过哈希算法计算的结果进行检查,如果匹配则认证成功,否则终止连接。

PAP和CHAP的优缺点

  • PAP简单,要求将密钥信息在通信信道中明文传输,因此容易被监听而泄露, 安全性差
  • CHAP相对安全,但是开销大, 且需要通信双方首先共享密钥

第三章——Internet地址及地址解析协议

1. Internet地址

为什么要进行编址?:统一思想,屏蔽物理地址差异

什么是地址?:是一种标识符

标识哪些东西?:名字、地址、路径

Internet地址要具备哪些性质?:能地位、要唯一、好计算

物理地址能作为Internet地址吗?:不能,物理地址具有多样性和多义性*(mac的话不同厂商的规范都不一样 mac地址很难记住的,而且和硬件相关,ip地址和硬件不相关)*

TCP/IP Internet 编址方式如何?:IP地址

IP地址

地址类型

  • A类:0——8位网络号。
    • A类网络个数:2812=1262^{8-1}-2=126
    • 每个A类地址可以连接主机个数:2242=167772142^{24}-2=16777214
  • B类:10——16位网络号
    • B类网络个数:216222^{16-2}-2
    • 每个B类地址可以连接主机个数:21622^{16}-2
  • C类:110——24位网络号
    • B类网络个数:224322^{24-3}-2
    • 每个B类地址可以连接主机个数:2822^{8}-2
  • D类:1110——组播地址
  • E类:11110——保留未用

特殊地址类型

  • 网络地址:主机号全0
  • 广播地址:主机号全1
  • 有限广播地址:32位全1
  • 回送地址:127.*.*.*,通常为127.0.0.1

IP地址实质:实质上标识的是到一个网络的一条连接

网络字节顺序

  • 小端点机:端点机高位存放地址低位
  • 大端点机:端点机高位存放地址高位
  • 发送数据时发送端点机的高位数据

IP编制的缺陷

  • 限制网络的平滑升级:如果号码空间不足的话,必须要升位,并改变号码的位长
  • 对主机的移动性支持不够:标识设备的IP仅仅标识了设备位置,并没有标识设备本身

2.地址转换——ARP协议

为什么要进行地址转换?:必须根据IP地址找到物理地址才能进行实际的数据传送

如何进行地址转换?

  • 直接映射:空间较小且容易配置的物理地址
  • 动态绑定:空间巨大且固定的物理地址

ARP步骤

广播请求,单播响应

  • 源端A广播包含目标B的IP地址IPbIP_b的ARP请求报文,请B回答自己的物理地址PAbPA_b
  • 网络上的主机将IPbIP_b与自身的IP地址比较,若相同,则转步骤三,否则忽略;
  • B将PAbPA_b封装在ARP应答报文中,之后发送给A;
  • A从应答报文中提取IPbIP_bPAbPA_b,从而获得IPbIP_bPAbPA_b之间的映射关系

ARP cache——提高ARP效率

  • 设置ARP cache,存放最近解析出来的IP/MAC对
  • 请求解析时,把自己的IP/MAC地址也放在报文中
  • 收到ARP请求的所有主机都缓存其中的IP/MAC
  • 主机入网时,主动广播它的IP/MAC

一条IP/MAC映射记录失效怎么办?:使用超时机制(20分钟),如果在超时到来前都没有使用某条记录,则删除该记录

3.反向地址转换——RARP

无盘工作站启动时,如何确定它的IP地址?:用它的物理地址在网上广播,请求RARP服务器告诉IP地址。

  • 无盘工作站所在网络必须有RARP服务器

4.路由器转发流程

img img

第四章——互连网协议IP

IP层特点

  • 不可靠:分组可能丢失,乱序等,不做确认
  • 无连接:每个分组都独立对待
  • 尽力投递:不随意放弃分组
  • 点到点传输

IP层主要功能

  • 无连接的数据报投递
  • 数据寻径
  • 差错与报文控制

IP数据报的分片控制

分片

为什么要数据分片?:每个网络有固定的MTU,若IP报文长度大于MTU,则需要进行数据分片

如何分片?

  • 如何标识同一个数据报的各个分片?
    • 每个IP数据报有唯一值的标识字段(ID),标识同一个数据报的各个分片
  • 如何标识同一个数据报分片的顺序?
    • 片偏移量字段标识该分片在原数据报中的位置
  • 如何标识同一个数据报分片的结束?
    • MF字段为0时表示为最后一片分片,为1时不是最后一片

分片首部如何设置?:第一个分片的首部复制原IP数据报的首部,并修改总长度字段,之后的分片首部重新设置(如ID、片偏移量,校验和等需要重新设置)。

分片重组

在哪重组分片?:在目的主机处重组分片

  • 优点:
    • 不会反复分片/重组
    • 各分片可独立选路
    • 路由软件简化
  • 缺点:
    • 可能浪费带宽
    • 丢失可能性增加

为什么需要存储第一个分片报头的内存缓冲区:该分片的首部将作为重组后的数据报的首部

如何判断一个数据报是否需要重组:当MF字段和片偏移量都为0时表明不需要重组

IP只对数据报首部计算校验和,不对数据计算校验和,有什么优缺点:

  • 优点:
    • 简化IP软件的计算量,提高处理速度.
    • 某些高层协议已经有计算校验和的功能, 可以避免重复劳动
  • 缺点:
    • 高层协议需要保证可靠性,必须实现校验功能

对于包含记录路由选项的数据报进行分片时,是否应该将该选项复制到各分片中?为什么:不必, 每个分片独自选路,即便记录,每个分片记录的信息也不同.

为什么中间路由器转发数据报之前要重新计算校验和:因为路由器对数据报进行了处理,部分字段值发生了变化:TTL 值减‘1’,包含选项时选项的内容也要发生更改。因此,必须针对变化后的内容重新计算校验和。

为什么一个数据报在传输过程中可能会被多次分片:在 IP 数据报的投递过程中可能会经过多个物理网络,每个网路的 MTU 不尽相同。只要转发过程中后一个网络的 MTU 小于之前网络的 MTU,数据报就会被分片。

IP数据报的选路

路由表的特殊条目

  • 默认路由:信息隐藏、保持路由表更小的技术。
  • 特定主机路由:为某个指定主机在路由表中单设一项。

路由选择依据

  • 网络负载
  • 服务类型
  • 报文长度

选路总控算法

1
2
3
4
5
6
7
8
9
10
从数据报中提取目的IP地址D,并计算网络前缀N;
if N与任何直接相连的网络地址匹配
then 通过该网络把数据报交付到目的地
else if 表中包含特定于具体主机的一个到D的路由
then 把数据报发送到表中指定的下一跳
else if 表中包含到网络N的一个路由
then 把数据报发送到表中指定的下一跳
else if 表中包含的一个默认路由
then 把数据报发送到表中指定的默认路由器
else 宣布选路出错

IP软件对数据报的处理

  • 主机
    • 主机不转发数据报。
    • 是自己的:交上层;
    • 不是自己的:丢弃。
  • 路由器
    • 若是自己的,交上层;
    • 若是邻网,直接投递;
    • 其它的转发。

第五章——Internet控制报文协议ICMP

为什么需要ICMP报文?它的作用是什么?

  • 数据报在传送过程中可能会遇到各种异常:需要ICMP报文提供差错报告
  • IP层需要控制功能,例如拥塞和差错控制:需要ICMP报文传递网络控制信息

为什么ICMP要把传递控制报告和提供差错报告两者合二为一?

  • 控制和差错报告都是特殊报文
  • 差错报告与差错控制总是密切相关的

ICMP工作机制?

  • 路由器(主机)向其他路由器(主机)发送ICMP报文
  • 只能向源端路由器报告差错,不能向中间路由器报告差错
    • 路由器收到 IP 数据报时,如果该数据报不包含记录路由、源路由选项,则不体现任何中间路由器信息,仅能体现源IP信息。因此,必须向源站报告差错。此外,路由器发现数据发生差错时,无法判断究竟是在投递过程中的哪一步发生差错,因此,仅能向源站报告差错。

ICMP和IP的关系

  • ICMP协议是IP协议的一部分
    • 功能不独立,是IP的补充
    • ICMP报文封装在IP数据报中传送(数据部分)
    • 不是上层协议赖以存在的基础

一些不产生ICMP报文的情况

  • 如果携带ICMP报文的IP数据报出现差错,则不应产生新的ICMP报文

    • 防止无休止地循环发送差错报告报文
  • 对于分片的数据报,如果不是第一个分片,则不产生ICMP差错报文

    • 因为IP数据包的校验和只检验首部不检验数据部分,(每个分片首部除部分参数都是一样的)所以知道第一个分片的首部就足够了。
  • 对于具有多播地址的数据报,不产生ICMP差错报文

    • 不知道具体是发往哪个地址的报文出现错误
  • 对于具有特殊地址(如127.0.0.0或0.0.0.0)的数据报,也不产生ICMP差错报文

三类ICMP报文

1.ICMP请求与应答报文

1.回送请求与应答报文

  • 可测试网络的可达性
  • 可查看记录路由选项
  • 可指定松散源路由和严格源路由

2.地址掩码请求/应答报文

  • 获得子网掩码

3.时戳请求/应答报文

  • 时钟同步与传送时间估计

  • 网络时间协议NTP
    img

img img

4.路由器恳求和路由器通告报文

  • 路由器恳求报文由主机主动发送,寻找默认路由器
  • 1.路由器通告报文是对恳求报文的回应;**2.**路由器定期向相邻网络主机发送通告报文,告诉可使用的路由器
  • 为什么路由器通告报文的发送周期是10分钟,而一条路由的存活时间是30分钟?
    • 考虑到通告报文可能丢失,存活时间必须大于发送周期

2.ICMP差错报告报文

  • 只向源站提供报告,本身不处理差错
  • 差错报告报文作为一般数据传输
  • 差错报告报文出错时,放弃数据报

3.ICMP控制报文

  • 1.源站抑制报文
    • 抑制信源发出数据报的速率,解决拥塞控制
  • 2.重定向报文
    • 主机的路由表如何更新:当路由器发现一台主机使用非优化路由时,向主机发一重定向报文,请求主机改变路由

问题

路由器是否应该优先处理ICMP报文:

  • 不。ICMP 报文封装在 IP 报文中,和其它 IP 报文一样在路由器的队列中进行排队,路由器则按照先入先出的规则处理报文。对路由器而言,与优先权有关的不是 IP 数据报中封装的报文类型,而是 IP 首部中的 QoS 字段。

在ICMP目的站不可达报文中,有一类错误是“需要分片(但DF置位不能进行分片),基于此,请给出一个路径MTU的测量算法

  • 发送 IP 数据报并强制该数据报不能分片,如果收到该类错误报告,说明该报文尺寸过大,则继续调小尺寸并继续发送该种 IP 数据报;如果未收到该类报告,说明尺寸偏小或正好,此时可以增大 IP 数据报的尺寸。为了较快地逼近实际值,可以首先将第一个探测报文的尺寸设置为最大 IP 数据报长度,之后利用二分算法的思想调整探测报文尺寸。

第六章——用户数据报协议UDP

描述一个进程的标识是什么?

通信5元素

  • 源IP地址和目的IP地址:区分不同主机
  • 源端口号和目的端口号:区分不同主机中的不同进程
  • 协议:区分UDP协议还是TCP协议

什么应用适合使用UDP

  • 不太关系数据丢失,如传输视频
  • 每次发送少量的数据
  • 有自己的全套差错控制机制
  • 实时性要求较高,差错控制要求不高

既想用UDP又想可靠传输

  • 应用层自己实现可靠性

UDP的功能和特点

  • 提供无连接服务,简单快捷
  • UDP的主机不需要维持复杂的连接状态表
  • UDP报文只有8个字节的首部开销。
  • 网络出现的拥塞不会使源主机的发送速率降低

问题

传输层的作用:

  • 承上启下, “加强”和“弥补”通信子网服务
    • 加强,指提高服务的可靠性
    • 弥补:对服务类型要提供端到端进程通信
    • 特色:提高可靠性

利用端口号而不是进程标识符来指定一台机器的目的进程,有什么优点 :

  • 进程标识符是动态变化的,每次应用程序重启都会对应不同的标识符,而端口号是相对固定的。网络通信中的客户端需要主动与服务器建立连接,其连接的目标必须是固定的,因此,必须用端口号来标识

为什么UDP校验和独立于IP校验和?你是否反对这样一个协议:对包括UDP报文在内的整个IP数据报使用一个校验和:

  • IP 仅针对首部计算校验和,UDP 报文封装在 IP 数据报中作为数据报的数据区,因此单独计 算校验和。这样整个 IP 数据报都可以被校验。
  • 反对。IP 和 UDP 属于不同的协议模块和层次,合并校验不利于区分错误来源。

假定一台主机连接在以太网上,它要发送总长度8192字节的UDP报文。该报文最终被分成多少个IP数据报投递:

  • 以太网 MTU 为 1500 字节。假设 IP 不使用选项,则其长度为20字节,所以预留给 UDP 的长度为 1480 字节。所以最终的分片数为|8192/1480|+1=6,其中“||”标识取整。

从网络安全的角度看,使用知名端口号会不会存在安全风险:

  • 单看这种行为,不会存在风险。但是知名端口与一些知名应用相关,这些应用可能存在安全缺陷,比如协议本身有缺陷,或者实现有安全漏洞。因此,黑客攻击的第一步往往是实施端口扫描,为随后的攻击步骤奠定基础。

第七章——传输控制协议TCP

要实现可靠的数据流传输,要解决哪些问题?

  • 可靠性
    • 防丢失:确认与重传
    • 防重复:报文段序号
  • 传输效率和流量控制:滑动窗口机制
  • 拥塞控制:加速递减与慢启动技术
  • 建立连接:三次握手协议
  • 关闭连接:改进的三次握手协议

1.可靠性

1.1防丢失——带重传的肯定确认技术

传输过程

  • 发送方向接收方发送报文段,并创建该报文段的重传定时器(重传时间RT0)
  • 接收方收到数据后向源站发送确认(ACK)
  • 接收方若在定时器到期前收到ACK则撤销定时器
    • 否则重传报文段并复为定时器

如何设置定时器时限

  • RTT:往返时间
  • 自适应重传算法:R=αR+(1α)MRT0=βRR = \alpha R+(1-\alpha)M\\RT0 = \beta R
    • RR:RTT的估计值
    • MM:本次测量的RTT值
    • RT0RT0:定时时限
    • α=0.9,β=4\alpha=0.9,\beta=4

1.2防重传——可稍带的累计确认技术

  • 为每一分组赋值序号
  • 确认时指明确认哪个分组
  • 序号保证分组的顺序

2.传输效率和流量控制——滑动窗口机制

一般滑动窗口机制

允许发送方不必等确认到来就可继续发送下面的分组,但规定一个上限。若多个分组的确认未到时,则暂停发送。

窗口大小可变技术——流量控制

  • 目的主机缓冲区变小而不能接收源主机更多的数据时,就要进行流量控制。
  • 可随时改变窗口大小。目的主机在确认时,还向源主机告知目的主机接收缓冲区的大小。
  • 使用0窗口通告停止所有传输,除了紧急数据窗口试探报文

死锁问题

问题

  • 发送方接收到0窗口通告后停止传输数据,等待接收方发送窗口不为0的确认报文;
  • 当接收方发送窗口不为0的确认报文丢失时,导致接收方死锁

解决

  • 持续计时器
  • 当发送方接收到窗口为0的确认,停止发送数据并启动持续计时器
  • 当持续计时器到期,发送窗口试探报文
  • 接收方返回的确认报文中窗口值不为0则开始传输数据,否则复为持续计时器,继续等待

糊涂窗口综合征问题——传输效率

发送端的应用程序产生数据很慢,或者接收端的应用程序消耗数据很慢,或者两者都有。不管是哪种情况,都使得发送数据的报文段很小,引起操作效率的降低

  • 发送方出现症状:
    • Nagle算法
  • 接收方出现症状:
    • Clark算法
    • 推迟确认

3.拥塞控制

所谓拥塞

交换节点(如路由器)数据报负载过重的现象

拥塞控制技术

  • 拥塞窗口cwnd
  • 加速递减技术
  • 慢启动技术
  • 快重传
  • 快恢复

1.拥塞窗口

  • 接收方承认的窗口(允许窗口/通告窗口awnd)
  • 拥塞窗口cwnd
    • 增减以MSS为单位
    • 初始时MSS=1
  • 有效窗口:min(cwnd,awnd)
  • 拥塞窗口是发送方的流量控制,通告窗口是接收方的流量控制

2.慢启动

  • 指数递增:每次成功发送1个MSS长度的报文段,则发送方拥塞窗口加倍;
  • 线性递增:增长到临界值后,每次增加1个MSS(拥塞避免

3.加速递减

  • 指数级递减:出现超时重传时,将临界值设为当前拥塞窗口的1/2,拥塞窗口恢复为1个MSS大小

4.快重传和快恢复

  • 接收方收到三条重复的确认报文段后,就立即重传确认报文段后面的报文
  • 为了保险起见,防止可能真的发生了网络拥塞,所以采用了快恢复算法。快恢复的执行就是将ssthresh设置为减半的大小。CWND设置和ssthresh一样,然后执行拥塞避免算法。

4.TCP连接的建立和关闭

三次握手——连接建立

连接建立时需要协商的内容

  • 同意连接协商,做好传数据的准备
  • 协商各自报文段ISN(初始序列号)
  • 协商MSS

过程

  1. 客户端,发送(SYN seq = x)
  2. 服务器,接收SYN,发送(SYN seq=y, ACK x+1)
  3. 客户端,接收SYN+ACK, 发送(ACK y+1)
  4. 服务器, 接收ACK

四次握手——连接关闭

过程

  • 半关闭阶段是当A没有数据向B发送时,A向B发出释放连接请求,B收到后向A发回确认。这时A向B 的TCP连接就关闭了。进入半关闭状态。
  • 但B仍可以继续向A发送数据。当B也没有数据向A发送时,这时B就向A发出释放连接的请求,同样,A收到后向B发回确认。至此B向A的TCP连接也关闭了。当B收到来自A的确认后,就进入了全关闭状态。

问题

在什么样的时延、带宽、负载以及报文丢失的情况下,TCP没有必要重传大量的数据?

  • 时延低且稳定,带宽高,负载低,分组丢失率低 的情况下。

主机A和B使用TCP通信。在B发送过的报文段中,有这样两个先后到达的报文段:ACK=120和ACK=100,即前一个报文段的确认序号大于后一个。试解释原因

  • ACK=120 的报文 比 ACK=100的先到。虽然ACK=100 是先发出来的,但是路径开销比ACK=120 的报文要大。

建立TCP连接时,通信双方要交换ISN。ISN可各自随机选取,但不能为1.请给出本章所讨论的原因以外的其他原因。

  • TCP初始化序号不能是一个固定的值,因为这样容易被攻击者猜到后续序号,从而被攻击

你认为TCP协议软件应该自动关闭长时间的空闲连接(未传送数据)吗?

  • TCP协议中有长连接和短连接之分。短连接在传输玩数据后会自动断开,而长连接还会保持一段时间连接,即存活定时器功能。

总结TCP使用的窗口及时钟。

  • 滑动窗口:允许发送方不必等确认到来就可继续发送下面的分组,但规定一个上限。若多个分组的确认未到时,则暂停发送。
  • 拥塞窗口:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减少一些,以减少注入到网络中的分组数。实际的发送窗口为拥塞窗口和通告窗口中的较小值。
  • 重传计时器:TCP为了保证数据可靠传输,就规定在重传的“时间片”到了以后,如果还没有收到对方的ACK,就重发此包,以避免陷入无限等待中。
  • 坚持计时器:当发送TCP收到窗口大小为0的确认时,就启动坚持计时器。当坚持计时器期限到时,发送TCP就发送一个特殊的报文段,叫做探测报文。探测报文段醒接收TCP:确认已丢失,必须重传。
  • 保活计时器:每当服务器收到客户的信息,就将计时器复位。通常设置为两小时。若服务器过了两小时还没有收到客户的信息,他就发送探测报文段。若发送了10个探测报文段(每一个相隔75秒)还没有响应,就假定客户出了故障,因而就终止了该连接。
    时间等待计时器:时间等待计时器用于TCP"四次挥手”阶段。当客户端向服务器发送最后一次确认报文时,就设定一个时间等待计时器,等待2MSL时间后再结束连接。

主机甲和主机乙间已建立一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300字节和500字节的有效载荷,第一个段的序列号为200,主机乙正确接收到两个段后,发送给主机甲的确认序列号是什么?

  • 第一次确认序号:200+300=500
  • 第二次确认序号:500+500=1000

一个TCP连接总是以1KB的最大段发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT(往返时间)时间内的TCP段的传输都是成功的,那么列出接下来4个RTT时间拥塞窗口大小的变化情况。

  • 1KB 》2KB
  • 2KB 》4KB
  • 4KB 》8KB
  • 8KB 》9KB

主机甲和主机乙之间已建立一个TCP连接,TCP最大段长度为1000字节,若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连接发送2个最大段后,成功收到主机乙发送的第一段的确认段,确认段中通告的接收窗口大小为2000字节,则此时主机甲还可以向主机乙发送的最大字节数是多少?阐明原因

  • 1000字节。第一段确认段通告缓存还有2000字节,此时第二段最大段确认还未接收,需要预留第一段的缓存1000字节。则还可以发送2000 - 1000 = 1000字节的最大字节数。

主机甲和主机乙新建一个TCP连接,甲的拥塞控制初始阈值为32 KB,甲向乙始终以MSS=1 KB大小的段发送数据,并一直有数据发送;乙为该连接分配16 KB接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发生超时的情况下,经过4个RTT后,甲的发送窗口是什么?阐明原因。

  • 初始:awnd=16KB,cwnd=1KB,发送窗口=min(awnd,cwnd)=1KB
  • 第一个RTT:awnd=15KB,cwnd=2KB,发送窗口=2KB
  • 第二个RTT:awnd=13KB,cwnd=4KB,发送窗口=4KB
  • 第三个RTT:awnd=9KB,cwnd=8KB,发送窗口=8KB
  • 第四个RTT:awnd=1KB,cwnd=16KB,发送窗口=1KB
  • 故此时发送窗口为1KB

什么是RTT?

  • 往返时延。是指数据从网络一端传到另一端所需的时间。通常,时延由发送时延、传播时延、排队时延、处理时延四个部分组成。

什么是TCP中的累计确认?

  • 如果发送方发了包1,包2,包3,包4;接受方成功收到包1,包2,包3。那么接受方可以发回一个确认包,序号为4。那么发送方就知道包1到包3都发送接收成功,必要时重发包4,一个确认包确认了累积到某一序号的所有包。而不是对每个序号都发确认包。

TCP发现分组丢失有哪两种方法?

  • 超时
  • 接收到重复的确认

为什么TCP采用三次握手,而不是两次或四次握手?

  • 不采用两次握手的原因:为了防止失效的连接请求报文段被服务端接收,从而产生错误。
  • 三次握手就可以确保通信双方建立可靠的全双工连接,四次握手是不必要的。

第八章——Internet地址扩展技术

问题

要解决的问题

  • IP地址不足,特别是B类地址不足
  • 网络数目增长过快造成路由表急剧膨胀

解决办法

  • 子网编址
  • 超网编址和CIDR
  • NAT
    • 静态NAT
    • 动态NAT
    • PAT

1.子网编址

思想

从IP地址的主机部分借位用在网络部分,解决IP地址“主机号浪费,网络号缺乏”的问题

如何划分子网?如何确定子网数?

等长子网划分

  • 确定子网位数和主机数
    • 子网数:2借位数2^{借位数}
    • 主机数:2剩余位数借位数22^{剩余位数-借位数}-2,减去了网络号和广播号

变长子网划分:看例题吧(36条消息) 变长子网划分VLSM_爱养身的程序员的博客-CSDN博客_变长子网划分方法

2.超网编址和CIDR

超网

  • 超网(supernetting),也称无类别域间路由选择(CIDR)。CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,CIDR使用各种长度的“网络前缀”来代替分类地址中的网络号和子网号,CIDR不再使用“子网”的概念而使用网络前缀,使IP地址从三级编址又回到了两级编址,即无分类的两级编址。
  • IP=网络前缀+主机号

表示方法

  • CIDR也使用“斜线记法”,即在IP地址后写上斜线“/”,然后写上网络前缀所占的位数(对应子网掩码中1的个数)。例如:192.168.1.0/22。网络前缀为22位,也代表掩码前22位为1

子网和超网的区别

  • 通过左移子网掩码合并多个网段,右移子网掩码将一个网段划分成多个子网,使得IP地址打破了传统的A类、B类、C类的界限。
  • 判断一个网段到底是子网还是超网,就要看该网段是A类网络、还是B类网络、还是C类网络,默认A类子网掩码/8,B类子网掩码是/16,C类子网掩码是/24。
  • 如果该网段的子网掩码比默认子网掩码长,就是子网,如果该网段的子网掩码比默认子网掩码短,则是超网。
  • [划分超网/子网的问题转贴]_洛晨光_新浪博客 (sina.com.cn)

网络地址转换NAT

作用

  • 解决IP地址不足,多台内部机器共享一个外部IP地址
  • 出于安全考虑,隐藏内部IP地址

静态NAT

  • 一对一转换,每个内部IP地址对应唯一一个固定的外部IP地址
  • 缺点:没有节省IP地址

动态NAT

  • 多对多转换:将一组内部IP地址映射到一组外部IP地址(通常较少)。 映射关系动态建立
  • 缺点:每台机器仍是一个外部IP地址。当同时要求外联的机器超过外部IP地址个数时,则不能满足需求

PAT端口地址转换

  • 在ip地址的基础上,在加上端口号,加以区分。
  • 如果端口号刚好也相同,则连端口号一起转换

问题

对一个C类网络地址,划分子网是否有意义?

  • 有意义,可以将不同子网间的通信区分开来,方便不同子网独立工作、避免差错等

考虑一个B类网络号的定长子网划分,使它能适应至少76个网络。每个网络上能有多少台主机?

  • 要有76个网络,则需要27=1282^7=128,从主机借7位长度
  • 则每个子网可以有主机2(167)2=5102^(16-7)-2=510台主机

第九章——路由协议

路由协议解决的问题

  • 如何获得路由表

路由表的建立和维护

  • 静态配置:管理员手工配置和更新路由表
    • 优点:节省路由器的处理时间、存储空间以及网络带宽
    • 缺点:对于链路故障及拓扑结构变化的响应速度慢
    • 适合拓扑稳定的小规模网络
  • 动态路由信息交换:利用路由协议交换路由信息,并根据拓扑结构的变化动态更新路由表
    • 优点:自动适应链路故障及拓扑结构的变化
    • 缺点:耗费路由器的处理时间、存储空间以及网络带宽
    • 适合大规模网络

选路

两个问题

  • 路径存在性:如何确保各个路由器维护信息的一致性?
    • 不同路由器更新路由表的信息是一致的,使得它们对网络拓扑结构有着一致性的认识。
  • 路径最优性:如何确定一条路径是最优的?
    • 基于跳数

选路算法

  • 非自适应算法:

    • 拓扑发生变化时,由管理员操作中心路由器,更新路由表
    • 适用于规模小,拓扑结构变化少的网络
  • 自适应算法:

    • 矢量距离算法:

      • 原理:以跳数作为度量值,通过交换路由表,计算出所有已知的最短路由,更新路由表
        img
      • 优点:效率高,算法简单
      • 缺点:容易出现环路,收敛速度慢
    • 链路状态算法——最短路径优先SPF

      • 原理:通过交换链路状态,让AS中的每个路由器都有一张该AS的网络拓扑结构图
      • 优点:具有良好的收敛性
      • 缺点:具有较好的规模可扩展性

Internet路由体系

自治系统AS

AS(自治系统)

  • 出于选路目的,处于一个管理机构控制之下的一组网络和路由器

AS的作用

  • AS自治的主要内容是选路自治,AS可自由地选择路由算法;

第十章——选路信息协议RIP

网关协议

  • 内部网关协议:在AS内部范围使用,实现域内路由选择
    • RIP
    • OSPF
  • 外部网关协议:在AS之间使用,实现域间路由选择
    • BGP

RIP路由信息协议——距离矢量算法

路由信息的组成——三元组

  • 目的地址
  • 最短路径
  • 下一节点

路由信息表的生成

  • 每隔一个周期与相邻路由器交换全部的路由信息(路由表)
  • 路由器的路由表在交换过程中不断完善、收敛,最终所有路由器都获得正确完整的路由表

RIP算法

img

三个定时器

  • 跟新定时器30秒:用于广播路由
  • 路由超时定时器180s:超时未收到相关报文,则认为路由无效
  • 路由刷新定时器120s:某路由超时120s后从相应表项删除

RIP1的慢收敛问题

  • 由于链路发生故障,造成RIP选路环路问题,直到距离值达到距离极限
  • 解决办法
    • 简单分割范围法:不把关于某路由的信息传回给发送者。
    • 抑制法:要求所有路由器在收到某个网络不可达的消息后,将相应表项的距离值设为16,并将此信息保留一段时间
    • 带毒性逆转的分割范围法:当路由器向一个接口发送路由更新报文时,如果某个条目是从该接口获得的,则将该条目的距离设置为无穷大
    • 触发更新法:一旦发现网络连接消失,就将改网络设置为不可达,并立即发送路由更新报文

RIP1的额外跳问题

  • 如果一个自治系统中既实用RIPv1,又使用其他内部网关协议,将会产生额外跳问题

RIP1不广播掩码问题:不能传播变长子网地址和CIDR型地址

RIP的缺点

  • 收敛速度慢,
  • 支持的最大网络直径为15跳,
  • 仅能以距离作为路由性能度量标准,
  • 健壮性和可扩展性较差

第十一章——开放式最短路径优先OSPF

OSPF为什么不会产生路由循环?

  • 每台OSPF路由器都维护一个全网一致的链路状态数据库,所以不会产生路由循环

OSPF的特点

  • 收敛速度快
  • 不产生路由循环
  • 体系化路由,降低开销
  • 提供服务类型路由
  • 负载均衡
  • 提供安全性
  • 适合大规模网络

为什么采用多区域技术

  • 当自治系统中路由器数目大量增加时,会导致链路状态数据库规模的急剧膨胀,使得路由维护及路径选择非常低效。因此,OSPF将一个大规模网络划分为多个易于管理的区域,从而缩小了交换链路状态数据的路由器群组规模

OSPF将一个自治系统划分为多个区域后,所有的路由器是否对网络拓扑结构有着相同的认识?

  • 每个区域熟悉自己区域内的网络连接状况,也知道网络的拓扑,但不知道其他区域内的路由状况

第十二章——边界网关协议BGP

BGP的作用

  • 为每个AS实现与其他AS之间的路由信息交换提供了途径。
  • 两个相邻AS之间交换路由信息时,要选择相邻的BGP路由器作为发言人。每个发言人向外通告经过聚类后的可达性路由信息,以降低表规模和隐藏网络拓扑结构。

在传递路由信息时,RIP、OSPF和BGP分别使用UDP、直接基于IP和TCP,它们各有什么优点?是否有特殊的理由让它们进行这样的选择?

  • RIP只和邻站交换信息,使用UDP无可靠保障,但开销小,可以满足RIP要求;
  • OSPF直接使用IP,灵活、开销小;
  • 而BGP需要交换整个路由表和更新信息,TCP提供可靠交付以减少带宽消耗。