参考笔记:https://www.jianshu.com/c/f627e74e6ff3

1.2

复习题

  1. 网络由什么和什么什么组成
  2. 互联网是什么
  3. 最大的互联网
  4. internet与Internet的区别
  5. ISP三层结构
  6. 网络边缘与网络核心

因特网服务提供者ISP(Internet Service Provider)

个人或组织向ISP缴纳费用以得到IP地址。我国主要的SP是我们大家都比较熟悉的中国电信、中国联通和中国移动这三大电信运营商。

1.3

复习题

  1. 电路交换。电路交换存在的缺陷
  2. 分组交换。分组交换如何解决缺陷
  3. 两/三种交换方式的通信过程(能看懂图)
  4. 两/三种交换方式的主要优缺点

两个机器A B的数据传输需要建立通路。在电路交换机组成的电信网(无向图)中,一条通路的建立会使该路径上的边(中继线)被长期占据(打电话)。

但试想这样的情况:当用户在输入和编辑一份待传输的文件时,用户所尚用的通信资源暂时未被利用,该通信资源池不能被其他用户利用,宝贵的通信线路资源白白被浪费了。

电路交换的传输效率往往很低,所以计算机通常采用的是分组交换,而不是线路交换

1.4

复习题

  1. 按覆盖范围划分的四种网络

WAN(Wide Area Network)

MAN(Metropolitan Area Network)

LAN(Local Area Network)

PAN(Personal Area Network)

1.5.1

复习题

  1. 指标-速率(数据率)(注意单位问题)
  2. 计网中的带宽是什么
  3. 吞吐量是什么
  4. 时延有哪几种

1.5.2

复习题

  1. 时延带宽积怎么算
  2. RTT(Round-Trip Time)是什么
  3. 利用率分为什么和什么,以及越高越好吗
  4. 怎么算丢包率
  5. 分组丢失的两种情况

1.6.1~3

复习题

  1. 三种计算机体系机构
  2. 每层的作用

1.6.4

复习题

  1. (本节是术语的介绍,比较抽象,没有细讲,只需了解)
  2. 了解实体、协议、服务
  3. 协议三要素,并能理解
  4. 何为实体,举个例子
  5. 何为PDU,举个例子

收发双方的应用、网卡,都是对等实体

img

img

就像在应用层发请求回响应时,我们无需考虑运输层做了什么,能够感性地理解作两个应用在直接通信。

img

协议三要素——

语法:数据报长什么样

语义:拿到数据报要做什么,比如包装、解析

同步:事件时序关系,比如三次握手

1.7

复习题

  1. 描述一下计算机网络的定义
  2. 3种交换方式
  3. 8个网络指标
  4. OSI体系
  5. tcp/ip体系及每层作用
  6. PDU和SDU

1.8.1

1.8.2

暂跳过

2.1 物理层的基本概念

复习题

  1. 物理层的作用

两种传输媒体

image-20230717164145329

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。

解决适配各种各样的传输媒体是物理层去关注的,数据链路层无需考虑。

2.2 物理层下面的传输媒体

2.3 传输方式

复习题

  1. 了解串行传输和并行传输
  2. 了解同步传输和异步传输
  3. 理解单工,半双工,双工

==串行传输==是一个比特一个比特依次发送的,因此在发送端与接收端之间,只需要一条数据传输线路即可;==并行传输==一次发送n个比特,因此,在发送端和接收端之间需要有n条传输线路,但==成本高==。

数据在传输线路上的传输采用是串行传输,计算机内部的数据传输常用并行传输

image-20230717165807708

img

img

2.3 编码与调制

复习题

  1. 理解模拟信号和数字信号
  2. 理解编码和调制

常用术语

  • 消息(message) —— 要发送的文字、音频、图片等

  • 数据 (data) —— 运送消息的实体。

  • 信号 (signal) —— 数据的电气的或电磁的表现。

  • 模拟信号 (analogous signal) —— 代表消息的参数的取值是连续的。

  • 数字信号 (digital signal) —— 代表消息的参数的取值是离散的。

  • 码元 (code) —— 在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。

  • 基带信号(即基本频带信号)—— 来自信源的信号。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。

  • 基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。因此必须对基带信号进行调制 (modulation)。

img

2.5、信道的极限容量

复习题

  1. 常见失真原因

任何实际的信道都不是理想的,在传输信号时会产生各种失真以及带来多种干扰。

失真的原因:

  • 码元传输的速率越高
  • 信号传输的距离越远
  • 噪声干扰越大
  • 传输媒体质量越差

img

涉及到了奈氏准则、香农公式。不是我的学习重点

2.6 总结

以太网是属于物理层的一种技术,互联网就是在其上建立的。

蓝牙,电话网络,卫星通信,光纤通信在物理层有自己的协议,不使用以太网。

3.1 数据链路层概述

链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)

数据链路层以为单位传输和处理数据。

image-20230724182848505

image-20230724182908321

3.2 封装成帧

封装成帧是指数据链路层给上层交付的协议数据单元添加==帧头==和==帧尾==使之成为帧

MAC帧和PPP帧:

  1. MAC帧是在数据链路层中使用的,而PPP帧可以在数据链路层和网络层之间使用。
  2. MAC帧通常用于局域网内部的通信,而PPP帧通常用于广域网之间的通信,如Internet连接。
  3. MAC帧的帧头中包含有源和目标MAC地址,而PPP帧的帧头中包含有控制信息、协议类型和数据长度等信息。

image-20230724183932577

帧头和帧尾中包含有重要的控制信息。帧头和帧尾的作用之一就是帧定界

image-20230724184035642

透明传输是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样

如果在上层交付的协议数据单元中, 恰好也包含“帧界定标志”,接收方就会错误识别。但如果因此去约束上层协议,就违背了透明传输的原则。

面向字节的物理链路使用字节填充 (byte stuffing) 或字符填充 (character stuffing)来解决问题,发送端的数据链路层在数据中出现控制字符(比如界定标志)的前面插入一个转义字符“ESC”

image-20230724184444997

面向比特的物理链路使用比特填充的方法实现透明传输。如HDLC协议对于上层数据,每遇到连续5个1就会在其后面插入一个0。

3.3 差错检测

复习:

  1. 奇偶校验
  2. 循环冗余校验CRC

循环冗余校验 CRC 是一种检错方法,而帧校验序列 FCS 是添加在数据后面的冗余码。发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输,接收方通过生成多项式来计算收到的数据是否产生了误码:

3.4 可靠传输

复习

  1. 可靠传输三个协议
  2. SW的四个问题
  3. GBN的好处,并理解工作过程
  4. SR解决的问题,理解SR的工作过程

三种可靠协议

  • 停止-等待协议SW
  • 回退N帧协议GBN
  • 选择重传协议SR

这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中

停止-等待协议的四个问题与解决方法:

image-20230725105115385

image-20230725104956614

停止-等待协议的信道利用率

image-20230725110641917

  • TD:是发送方发送数据分组所耗费的发送时延
  • RTT:是收发双方之间的往返时间
  • TA:是接收方发送确认分组所耗费的发送时延

TA一般都远小于TD,可以忽略,当RTT远大于TD时,信道利用率会非常低

回退N帧协议GBN

image-20230725110954294

滑动窗口

无差错情况流程:

以N=3(表示窗口长度为8,序号为0-7),WT=5为例,发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去。他们经过互联网传输正确到达接收方,就是没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组(或者使用累计确认,发送ACKn表示序号n及以前的分组均已接收),在通过互联网的传输正确到达了发送方。

发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理。

image-20230725111333157

有差错情况

在传输数据分组时,5号数据分组出现误码,接收方通过数据分组中的检错码发现了错误

img

于是丢弃该分组,而后续到达的这剩下四个分组与接收窗口的序号不匹配

img

接收同样也不能接收它们,讲它们丢弃,并对之前按序接收的最后一个数据分组进行确认,发送ACK4,每丢弃一个数据分组,就发送一个ACK4

img

当收到重复的ACK4时,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,具体收到几个重复确认就立刻重传,根据具体实现决定

img

若WT超过取值范围,会导致接收方新的窗口开始位置和旧的是一样的,因此发送方没法理解发送方是重传还是继续发。

image-20230725111803734

选择重传协议

image-20230725120843975

原视频的动画演示很丰富,工作过程详见视频。

以下是第一次发送0,1,2,3但是2出现误码的情形。染蓝的格子代表已发送,染绿的格子代表已接收,打标记的蓝格子代表已确认,发送方窗口仅当第一个格子打标记时才可滑动,接收方窗口仅当第一个格子染绿才可滑动。

image-20230725120812686

3.5 点对点协议PPP

点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。

PPPoE 是为宽带上网的主机使用的链路层协议

img

ppp帧包含目的地址吗?

PPPFrames并不包含目的地址。这是因为PPP协议在点对点通信中仅支持两个端点(即两个设备之间的通信),因此,如果一个设备发送一个PPPFrames,则另一个设备就是它的目标。

image-20230725141320483

PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

3.6 媒体接入控制

该部分了解即可,不作深入。

媒体接入控制(介质访问控制)使用一对多的广播通信方式

MAC(Medium Access Control)翻译成媒体接入控制,有些翻译成介质访问控制

为什么要媒体接入控制?

共享信道带来的问题

若多个设备在共享信道上同时发送数据,则会造成彼此干扰,导致发送失败。

image-20230725160242188image-20230725160048801

3.7.1 MAC地址

复习

  1. 清除mac地址的含义
  2. 清楚单播、多播、广播mac地址的运作过程
image-20230725155611613

MAC地址

  • 使用点对点信道的数据链路层不需要使用地址(如前面的PPP)

  • 使用广播信道的数据链路层必须使用地址来区分各主机

img

MAC地址又称为硬件地址或物理地址。请注意,物理地址属于数据链路层范畴。

电脑、手机、蓝牙接口、wifi接口都拥有唯一的mac地址。

什么是单播和多播

单播:是指从一个发送端向一个接收端发送数据包的通信方式。在单播通信中,只有一个发送者和一个接收者之间进行通信,且数据包只会被送达到指定的接收端,不会被多个接收端共享。

多播:是指从一个发送端向一组接收端发送数据包的通信方式。在多播通信中,发送的数据包会被传输到一个特定的多播地址,由多个接收端共享。

mac地址格式(EUI-48)

image-20230725164113001

单播MAC地址举例

img

主机B给主机C发送单播帧,主机B首先要构建该单播帧在帧首部中的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部的其他字段、数据载荷以及帧尾部,就构成了该单播帧。主机B将该单播帧发送出去,主机A和C都会收到该单播帧

广播MAC地址举例

img

假设主机B要发送一个广播帧,主机B首先要构建该广播帧在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F。主机B讲该广播帧发送出去,主机A和C都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,主机A和主机C都接受该帧,并将该帧交给上层处理

多播MAC地址举例

快速判断地址是不是多播地址,就是上图所示箭头所指的第十六进制数不能整除2(1,3,5,7,9,B,D,F),则该地址是多播地址。假设主机B,C和D支持多播,各用户会给自己的主机配置多播组列表。比如主机B属于两个多播组,主机C也属于两个多播组,而主机D不属于任何多播组。

img

主机A首先要构建该多播帧在帧首部中的目的地址字段填入该多播地址,源地址点填入自己的MAC地址。主机A将该多播帧发送出去,主机B、C、D都会收到该多播帧。主机B和C发现该多播帧的目的MAC地址在自己的多播组列表中,主机B和C都会接受该帧,主机D发现该多播帧的目的MAC地址不在自己得多播组列表中,则丢弃该多播帧。

3.7.2 MAC、IP地址

复习

  1. 简单了解IP地址
  2. 清楚数据包转发过程中MAC和IP地址的变化

image-20230725171441446

image-20230725171017859

image-20230725171344550

如何从IP地址找出其对应的MAC地址?——ARP协议

转发的过程中,源 IP 地址和目标 IP 地址是不会变的(前提:没有使用 NAT 网络的)

3.7.3 ARP协议

复习

  1. 明白通过ARP协议从IP地址找出其对应的MAC地址的过程

img

当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址,但未找到,因此,主机B需要发送ARP请求报文,来获取主机C的MAC地址。

ARP请求报文有具体的格式,上图的只是简单描述。ARP请求报文被封装在广播MAC帧中发送,目的地址为广播地址。主机B发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧。

收到ARP请求报文的主机A和主机C会把ARP请求报文交给上层的ARP进程(网络层)。主机A发现所询问的IP地址不是自己的IP地址,因此不用理会。主机C的发现所询问的IP地址是自己的IP地址,需要进行相应。

img

img

动态:自动获取,生命周期默认为两分钟。
静态:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。

ARP表会定期自动删除记录,因为IP地址与MAC地址的对应关系不是永久性的

ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用。ARP协议的使用是逐段链路进行的

img

ARP没有安全验证机制,存在ARP欺骗(攻击)问题。

3.8 集线器与交换机的区别

复习

  1. 清楚集线器的工作过程
  2. 清楚交换机的工作过程,明白它与集线器的区别
  3. 清楚冲突域和广播域的概念
image-20230725214807217

集线器

  • 采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。

  • 集线器的以太网在逻辑上仍是个总线网,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行

碰撞域

  • 碰撞域(collision domain)又称为冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。
  • 碰撞域越大,发生碰撞的概率越高。

img

网桥

  • 网桥工作在数据链路层。

  • 它根据 MAC 帧的目的地址对收到的帧进行转发和过滤。

  • 当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC 地址,然后再确定将该帧转发到哪一个接口,或把它丢弃。

交换机

  • 交换式集线器常称为以太网交换机 (switch) 或第二层交换机 (L2 switch),强调这种交换机工作在数据链路层。

  • 以太网交换机实质上就是一个多接口的网桥

image-20230725214917255

以太网交换机的交换方式

  • 存储转发方式
  • 直通 (cut-through) 方式
img

(上图忽略了ARP过程)

如今集线器已基本淘汰。

当多台主机同时给另一台主机发送单播帧时:

​ 集线器以太网:会产生碰撞,遭遇碰撞的帧会传播到总线上的各主机

​ 交换机以太网:会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞

image-20230725214651361

广播域(broadcast domain):指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收。

3.9 以太网交换机自学习和转发帧的流程

复习

  1. 理解交换机自学习过程

理解以下过程:

image-20230725215930470

考虑到可能有时要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个项目都设有一定的有效时间过期的项目就自动被删除

以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。

3.10 以太网交换机的生成树协议STP

复习

  1. 了解为什么要引入生成树

image-20230725221429010

image-20230725221514913

image-20230725221933708

3.11 虚拟局域网VLAN

复习

  1. 理解广播域的隔离
  2. 明白VLAN的作用

(工作过程详见视频)

image-20230725222757535

因此需要能够隔离广播域的方法。

image-20230725222837111

image-20230725222911763

  • 同一个VLAN内部可以广播通信,不同VLAN不可以广播通信

  • 虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。

  • 由于虚拟局域网是用户和网络资源的逻辑组合,因此可按照需要将有关设备和资源非常方便地重新组合,使用户从不同的服务器或数据库中存取所需的资源。

交换机的端口类型

image-20230725223041660

4.1 网络层概述

复习

  1. 网络层的任务
  2. 网络层和网际层的区别

image-20230728133428191

要实现网络层任务,需要解决一下主要问题:

  • 网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)

在数据链路层那课讲过的可靠传输,详情可以看那边的笔记:网络层对以下的分组丢失分组失序分组重复的传输错误采取措施,使得接收方能正确接受发送方发送的数据,就是可靠传输,反之,如果什么措施也不采取,则是不可靠传输

  • 网络层寻址问题
  • 路由选择问题。路由器收到数据后,是依据什么来决定将数据包从自己的哪个接口转发出去?——依据数据包的目的地址和路由器中的路由表

网络层和网际层都是处理数据包的传输和路由问题,但是网络层是ISO/OSI模型中的一部分,而网际层则是TCP/IP协议中的一部分。此外,在实际应用中,网络层和网际层的具体实现方式、协议等也有所不同。我们通过学习TCP/小P协议栈的网际层来学习网络层的理论知识和实践技术。

4.2 网络层提供的两种服务

复习

  1. 理解两种网络层服务

A 面向连接的虚电路服务

B 无连接的数据报服务

虚电路服务与数据报服务的对比

对比的方面 虚电路服务 数据报服务
思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
连接的建立 必须有 不需要
终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
当结点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达终点 到达终点时不一定按发送顺序
端到端的差错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责

image-20230728164943830

image-20230728165004610

4.3.1 分类编址的IPv4地址

复习

  1. A, B, C类的一个网络分别可以分配多少ip地址?

分类编制的IPv4地址

image-20230728154722252

一个 IP 地址在整个互联网范围内是唯一的

image-20230728155822436image-20230728155834412image-20230728155853146

一般不使用的特殊的 IP 地址

image-20230728155412687

练习(理解答案)

image-20230728155751906

IP 地址的一些重要特点

(1) IP 地址是一种分等级的地址结构。分两个等级的好处是:

  • 第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
  • 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。

(2) IP 地址实际标志一个主机(或路由器)和一条链路的接口

  • 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。

  • 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址

(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。

4.3.2 划分子网的IPv4地址

复习

  1. 为什么需要子网
  2. 如何用子网掩码得到子网号
  3. 理解数据报通过路由进入子网某个主机的过程

划分子网的基本思路

  • 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
  • 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。

image-20230728160805387

凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机。

image-20230728161615212

优点:

  1. 减少了 IP 地址的浪费
  2. 使网络的组织更加灵活
  3. 更便于维护和管理

image-20230728161046325

默认掩码:

image-20230728161206904

B,C类似。

路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。

练习(理解答案)

image-20230728161442533

4.3.3 无分类编址的IPv4地址

复习

清楚CIDR的斜线记法

无分类域间路由选择 CIDR (Classless Inter-Domain Routing)

CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念;CIDR可以更加有效地分配IPV4的地址空间,并且可以在新的1Pv6使用之前允许因特网的规模继续增长。

CIDR 最主要的特点

  • CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。

  • IP 地址从三级编址(使用子网掩码)又回到了两级编址

image-20230728161903159

重要例子

image-20230728161942864

路由聚合(构造超网)——与网络地址前缀有关,不详述,

4.3.4 IPv4地址的应用规划

划分子网的IPv4就是定长的子网掩码。每个子网所分配的IP地址数量相同,不够灵活,容易造成IP地址的浪费

无分类编址的IPv4就是变长的子网掩码。每个子网所分配的1P地址数量可以不同,尽可能减少对P地址的浪费

4.4 IP数据报的发送和转发过程

复习

  1. 什么是直接交付与间接交付
  2. 如何知道目标是否与自己在同一个网络中

image-20230730104539917

可以通过目的地址IP源地址的子网掩码进行逻辑与运算得到目的网络地址

  • 如果目的网络地址源网络地址 相同,就是在同一个网络中,属于直接交付

  • 如果目的网络地址源网络地址 不相同,就不在同一个网络中,属于间接交付,传输给主机所在网络的默认网关(路由器——下图会讲解),由默认网关帮忙转发

用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为默认网关。例如。路由器的接口0的IP地址192.168.0.128做为左边网络的默认网关。(发给路由器接口,不会影响ip数据报首部的目的地址)

image-20230730104947370

路由器收到IP数据报后如何转发?(==查表转发==)

  • 检查IP数据报首部是否出错:
    • 若出错,则直接丢弃该IP数据报并通告源主机
    • 若没有出错,则进行转发
  • 根据IP数据报的目的地址在路由表中查找匹配的条目:
    • 若找到匹配的条目,则转发给条目中指示的下一跳
    • 若找不到,则丢弃该数据报并通告源主机

image-20230730104916588

4.5 静态路由配置及其可能产生的路由环路问题

复习

  1. TTL是什么,有何作用
  2. 三种路由条目类型。尽量再说一些特殊条目。
  3. 导致路由环路的原因

总结

image-20230823094622817

  • 静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。
    这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化
    一般只在小规模网络中采用。
  • 使用静态路由配置可能出现以下导致产生路由环路的错误
    配置错误
    聚合了不存在的网络
    网络故障

默认路由

默认路由可以被所有网络匹配,但路由匹配有优先级,默认路由是优先级最低的

image-20230823092641071

特定主机路由

我们可以给路由器添加针对某个主机的特定主机路由条目,一般用于网络管理人员对网络的管理和测试

image-20230823092753977

多条路由可选,匹配路由最具体的

静态路由配置错误导致路由环路

image-20230823092952939

聚合了不存在的网络而导致路由环路

image-20230823093254263

解决方案——路由黑洞。黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,IP数据报进入它后就被丢弃

image-20230823093412615

网络故障而导致路由环路

image-20230823094500996

解决方法:添加故障的网络为黑洞路由,假设一段时间后故障网络恢复了,R1又自动地得出了其接口0的直连网络的路由条目,针对该网络的黑洞网络会自动失效。

4.6.1 路由选择协议

复习

  1. 什么是路由器
  2. 分清路由表和转发表
  3. 理解IGP和EGP

因特网所采用的路由选择协议的主要特点

image-20230823094850026

自治系统 AS:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。

两种路由选择:自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择。

image-20230823095132299

常见的路由选择协议

image-20230823095259166

==路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组==

路由器结构可划分为两大部分:

1、分组转发部分

img

路由器的端口一般都具有输入和输出功能,这些实例分出了输入端口和输出端口是更好演示路由基本工作过程

2、路由选择部分

==重点==:路由选择部分的核心构件是路由选择处理机,它的任务是根据所使用的路由选择协议,周期性地与其他路由器进行路由信息的交互,来更新路由表。如果送交给输入端口的网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交给路由选择处理机。转发表是由路由表得出的

image-20230823095555395

4.6.2 路由信息协议RIP

image-20230823101955779

image-20230823102035762

更新规则

详见课件

“坏消息传播慢”问题

image-20230823102323150

4.6.3 开放最短路径优先OSPF

OSPF(Open Shortest Path First)

概念

image-20230823103803961

OSPF的五种分组类型(由IP首部的协议字段值为89表示OSPF协议)(这里不展开介绍,详见课件):

image-20230823104549555 image-20230823104933459

为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域(Area)

image-20230823105143045

4.6.4 边界网关协议BGP

复习

  1. 理解BEG

BGP(Border Gateway Protocol) 是不同自治系统的路由器之间交换路由信息的协议

image-20230823105443150

自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)。由于没有统一的度量,因此也无法找到一条所谓的最佳路由。BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子)。

BGP发言人:不再赘述。

直接封装RIP、OSPF和BGP报文的协议(这三个协议的层次有所争议)

image-20230823105710952

4.7 IPv4数据报的首部格式

复习

  1. 全程高能

总结:

image-20230823112537378

image-20230823111821311

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

IP数据报的首部长度一定是4字节的整数倍

image-20230823111914917 image-20230823111859124

“区分服务”字段没什么用

image-20230823112051414

分片过程详见课件。

生存时间TTL:以“跳数”为单位,路由器转发P数据报时,将P数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。

协议

image-20230823112244283

image-20230823112314120

image-20230823112335380

4.8 网际控制报文协议ICMP

概念

架构IP网络时需要特别注意两点:

  • 确认网络是否正常工作
  • 遇到异常时进行问题诊断

而ICMP就是实现这些问题的协议

ICMP的主要功能包括:

  • 确认IP包是否成功送达目标地址
  • 通知在发送过程当中IP包被废弃的具体原因
  • 改善网络设置等

有了这些功能以后,就可以获得网络是否正常,设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断

image-20230823112848914

ICMP 是 IP 层的协议(因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分)

image-20230823113002613

终点不可达

image-20230823113045196

源点抑制

当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

image-20230823113133796

时间超过

若TTL结果为0,除丢弃该P数据报外,还要向源点发送时间超过报文。

image-20230823113228039

参数问题

image-20230823113316860

改变路由(重定向)

路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)

image-20230823113414947

ICMP应用——

分组网间探测PING(Packet InterNet Groper)

image-20230823113523059

跟踪路由(traceroute)

通过不断增大TTL,就可以从返回的ICMP报文中得知每一步的路由。

image-20230823113646039

4.9 虚拟专用网VPN与网络地址转换NAT

复习

  1. 理解VPN和NAT、NAPT的工作过程

虚拟专用网VPN(Virtual Private Network)

image-20230823115653470

私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信

私有地址只能用作本地地址而不能用作全球地址

因特网中所有路由器对目的地址是私有地址的IP数据报一律不进行转发

本地地址与全球地址

  • 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。

  • 全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。

  • 问题:在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题。

部门A和部门B至少需要一个 路由器具有合法的全球IP地址,这样各自的专用网才能利用公用的因特网进行通信。部门A向部门B发送数据流程

image-20230823115503311

两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上就好像是在本机构的专用网上传送一样。数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看,R1和R2之间好像是一条直通的点对点链路。因此也被称为IP隧道技术

网络地址转换NAT(Network Address Translation)

使用私有地址的主机,如何才能与因特网上使用全球IP地址的主机进行通信?这需要在专用网络连接到因特网的路由器上安装NAT软件。

专有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用私有地址的主机在和外界通信时,都要在NAT路由器上将其私有地址转换为全球IP地址。

image-20230823115828704

这种基本转换存在一个问题:如果NAT路由器具有N个全球P地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。

解决方法:

image-20230823115956116

我们现在用的很多家用路由器都是这种NART路由器

内网主机与外网主机的通信,是否能由外网主机首先发起?——否定

5.1 运输层概述

复习

  1. 主机到主机、点到点、端到端
image-20230824174842100 image-20230824174942462

5.2 运输层端口号、复用与分用的概念

复习

  1. 复用与分用
  2. 理解运输层的工作过程

发送方的复用和接收方的分用

image-20230824175059932

多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)发送数据称为 复用
多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)接收时叫做 分用

image-20230824175222362

(注意DNS与HTTP,这两个经常用到)

运输层传输流程(以DNS服务为例)

image-20230824175507222
  1. 在浏览器输入域名,回车浏览

  2. 然后用户PC中的DNS客户端进程会发送一个DNS查询请求报文

  3. DNS查询请求报文需要使用运输层的UDP协议

  4. 首部中的源端口字段的值,在短暂端口号49151~65535中挑选一个未被占用的,用来表示DNS客户端进程

  5. 首部中的目的端口字段的值:53,是DNS服务器端进程所使用的熟知端口号

  6. 之后,将UDP用户数据报封装在IP数据报中,通过以太网发送给DNS服务器

  7. DNS服务器收到该IP数据报后,从中解封出UDP用户数据报

  8. UDP首部中的目的端口号为53,这表明应将该UDP用户数据报的数据载荷部分,也就是DNS查询请求报文,交付给本服务器中的DNS服务器端进程

  9. DNS服务器端进程解析DNS查询请求报文的内容,然后按其要求查找对应的IP地址

  10. 之后,会给用户PC发送DNS响应报文,DNS响应报文需要使用运输层的UDP协议封装成UDP用户数据报

  11. 其首部中的源端口字段的值设置为熟知端口号53,表明这是DNS服务器端进程所发送的UDP用户数据报,目的端口的值设置为49152,这是之前用户PC中发送DNS查询请求报文的DNS客户端进程所使用的短暂端口号

  12. 将UDP用户数据报封装在IP数据报中,通过以太网发送给用户PC

  13. 用户PC收到该数据报后,从中解封出UDP用户数据报

  14. UDP首部中的目的端口号为49152,这表明应将该UDP用户数据报的数据载荷部分,也就是DNS响应报文,交付给用户PC中的DNS客户端进程

  15. DNS客户端进程解析DNS响应报文的内容,就可知道自己之前所请求的Web服务器的域名对应的IP地址

5.3 UDP和TCP的对比

复习

  1. 全程高能

总结:
image-20230824202756873

概念

  • UDPTCP 是TCP/IP体系结构运输层中的两个重要协议
  • 当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道
  • 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道

两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
TCP 传送的数据单位协议是 TCP 报文段(segment)。
UDP 传送的数据单位协议是 UDP 报文用户数据报

image-20230824180115936

UDP的通信是无连接的,不需要套接字(Socket)

TCP是面向连接的,TCP之间的通信必须要在两个套接字(Socket)之间建立连接

用户数据报协议UDP(User Datagram Protocol)

UDP对应用进程交下来的报文既不合并也不拆分,而是保留这些报文的边界(仅仅是加个首部)。换句话说,UDP是面向应用报文的

UDP向上层提供无连接不可靠传输服务。

image-20230824190355989 image-20230824200828946

传输控制协议TCP(Transmission Control Protocol)

使用TCP协议的通信双方,在进行数据传输之前,必须使用“三报文握手”建立TCP连接。TCP连接建立成功后,通信双方之间就好像有一条可靠的通信信道,通信双方使用这条基于TCP连接的可靠信道进行通信

很显然,TCP仅支持单播,也就是一对一的通信。

image-20230824201149684

发送方

  • TCP会把应用进程交付下来的数据块看作是一连串无结构的字节流,TCP并不知道这些待传送的字节流的含义

  • 并将他们编号,并存储在自己发送缓存中

  • TCP会根据发送策略,提取一定量的字节构建TCP报文并发送

接收方

  • 一方面从所接受到的TCP报文段中,取出数据载荷部分并存储在接收缓存中;一方面将接收缓存中的一些字节交付给应用进程

  • TCP不保证接收方应用进程所收到的数据块与发送方发送的数据块,具有对应大小的关系(例如,发送方应用进程交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块,就把收到的字节流交付给了上层的应用进程,但接收方收到的字节流必须和发送方应用进程发出的字节流完全一样)

  • 接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据

TCP是面向字节流的,这正是TCP实现可靠传输、流量控制、以及拥塞控制的基础

本图只画了一个方向的数据流,在实际网络中,基于TCP连接的两端,可以同时进行TCP报文段的发送和接收

image-20230824201415221 image-20230824201446973

5.4 TCP的流量控制

复习

  1. 全程高能

总结:

image-20230825095006296 image-20230825094351984

如图所示,1和101收到了累计确认,因此滑动窗口,主机A可将发送缓存中序号1~200的字节数据全部删除。201没有收到确认,因此超时重传。

响应报文的rwnd表示调整滑动窗口的大小。

收到ack=501后,主机A可将发送缓存中序号201~500的字节数据全部删除,因为已经收到了主机B对它们的累计确认。

image-20230825094722864

发送501~600号字节数据后,发送窗口被调控为0,不能再发送新数据了

image-20230825094852397

因为零窗口探测报文段也有重传计时器,重传计时器超时后,零窗口探测报文段会被重传,可以打破死锁。

5.5 TCP的拥塞控制

复习

  1. 区分流量控制和拥塞控制
  2. 明白慢开始、拥塞避免、快重传、快恢复的过程
image-20230825100859293 image-20230825101141965

真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值) swnd=Min(rwnd, cwnd)

拥塞窗口:它会随网络拥塞程度,以及所使用的拥塞控制算法动态变化

慢开始和拥塞避免

慢开始(slow-start)

  • 目的:用来确定网络的负载能力或拥塞程度。
  • 算法的思路:由小到大逐渐增大拥塞窗口数值。
  • 两个变量:
    • 拥塞窗口(cwnd):初始拥塞窗口值。窗口值逐渐增大。
    • 慢开始门限(ssthresh):防止拥塞窗口增长过大引起网络拥塞。
image-20230825101440776 image-20230825101633579

拥塞避免(congestion avoidance)

  • 思路:让拥塞窗口 cwnd 缓慢地增大,避免出现拥塞。
  • 每经过一个传输轮次,拥塞窗口 cwnd = cwnd + 1
  • 使拥塞窗口 cwnd 按线性规律缓慢增长。
  • 在拥塞避免阶段,具有 “加法增大” (Additive Increase) 的特点。
image-20230825101838916

快重传和快恢复

有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。

  • 这将导致发送方超时重传,并误认为网络发生了拥塞.
  • 发送方把拥塞窗口cwd又设置为最小值1,并错误地启动慢开始算法,因而降低了传输效率。

快重传(fast retrasmit)

image-20230825102343978

快恢复(fast recovery)

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法:

  • 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。
image-20230825102533788

5.6 TCP超时重传时间的选择

复习

  1. RTT应如何设置?
  • 如果超时重传时间RTO的值设置得比RTT0的值小很多,这会引起报文段不必要的重传,使网络负荷增大
  • 如果超时重传时间RTO的值设置得远大于RTT0的值,这会使重传时间推迟的太长,使网络的空闲时间增大,降低传输效率
image-20230825102817959

与加权平均往返时间的相关内容,详见课件。

5.7 TCP可靠传输的实现

总结

image-20230825103248208

image-20230825103318039

5.8.1 TCP的连接建立

复习

  1. 全程高能

TCP的连接建立

  • TCP 建立连接的过程叫做握手
  • 握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手
  • 采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误(避免重复连接)。

为什么要“握手”(连接)?

image-20230825105037880

“三报文握手”建立连接

  • TCP 连接的建立采用客户服务器方式
  • 主动发起连接建立的应用进程叫做TCP客户 (client)。
  • 被动等待连接建立的应用进程叫做TCP服务器 (server)。

“握手”需要在TCP客户端和服务器之间交换三个TCP报文段

一开始,TCP服务器、客户端进程均首先创建传输控制块,用来存储TCP连接中的一些重要信息。例如TCP连接表、指向发送和接收缓存的指针、指向重传队列的指针,当前的发送和接收序号等。

此时,TCP服务器进程就进入监听状态。由于TCP服务器进程是被动等待来自TCP客户端进程的连接请求,因此成为被动打开连接。

image-20230825105905673

由于TCP连接建立是由TCP客户端主动发起的,因此称为主动打开连接。

image-20230825110039719

然后,在打算建立TCP连接时,向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态

TCP连接请求报文段首部中

  • 同步位SYN被设置为1,表明这是一个TCP连接请求报文段

  • 序号字段seq被设置了一个初始值x,作为TCP客户端进程所选择的初始序号

请注意:TCP规定SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号

image-20230825110202804

TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态

TCP连接请求确认报文段首部中

  • 同步位SYN和确认为ACK都设置为1,表明这是一个TCP连接请求确认报文段

  • 序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号,

  • 确认号字段ack的值被设置成了x+1,这是对TCP客户进程所选择的初始序号(seq)的确认

请注意:这个报文段也不能携带数据,因为它是SYN被设置为1的报文段,但同样要消耗掉一个序号

image-20230825110259014

TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已连接状态

普通的TCP确认报文段首部中

  • 确认位ACK被设置为1,表明这是一个普通的TCP确认报文段

  • 序号字段seq被设置为x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x,所以TCP客户进程发送的第二个报文段的序号为x+1

  • 确认号字段ack被设置为y+1,这是对TCP服务器进程所选择的初始序号的确认

请注意:TCP规定普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号

image-20230825110613843

TCP服务器进程收到该确认报文段后也进入连接已建立状态

现在,TCP双方都进入了连接已建立状态,它们可以基于已建立好的TCP连接,进行可靠的数据传输

为什么TCP客户进程最后还要发送一个普通的TCP确认报文段?能否使用“两报文握手”建立连接?下图实例是“两报文握手”

image-20230825110652328

为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有> 丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个> 早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同> 意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因> 此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。
所以并不多余,这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误

总结:
image-20230825110901536

5.8.2 TCP的连接释放

复习

  1. 全程高能
  • TCP 连接释放过程比较复杂。
  • 数据传输结束后,通信的双方都可释放连接。
  • TCP 连接释放过程是四报文握手

TCP通过“四报文挥手”来释放连接

  • TCP 连接的建立采用客户服务器方式
  • 主动发起连接建立的应用进程叫做TCP客户 (client)。
  • 被动等待连接建立的应用进程叫做TCP服务器 (server)。
  • 任何一方都可以在数据传送结束后发出连接释放的通知
image-20230825151624321

TCP客户进程的应用进程通知其主动关闭TCP连接

TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态

TCP连接释放报文段首部中

  • 终止位FIN和确认为ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认

  • 序号seq字段的值设置为u,它等于TCP客户进程之前已传送过的数据的最后一个字节的序号加1

  • 确认号ack字段的值设置为v,它等于TCP客户进程之前已收到的、数据的最后一个字节的序号加1

请注意:TCP规定终止位FIN等于1的报文段即使不携带数据,也要消耗掉一个序号

image-20230825151714204

TCP服务器进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态

普通的TCP确认报文段首部中

  • 确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文段

  • 序号seq字段的值设置为v,它等于TCP服务器进程之前已传送过的数据的最后一个字节的序号加1,这也与之前收到的TCP连接释放报文段中的确认号匹配

  • 确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认

image-20230825153158081

TCP服务器进程应该通知高层应用进程,TCP客户进程要断开与自己的TCP连接

此时,从TCP客户进程到TCP服务器进程这个方向的连接就释放了

这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了

但如果TCP服务器进程还有数据要发送,TCP客户进程仍要接收,也就是说从TCP服务器进程到TCP客户进程这个方向的连接并未关闭

image-20230825152905011

TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段

若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接

由于TCP连接释放是由TCP客户进程主动发起的,因此TCP服务器进程对TCP连接的释放称为被动关闭连接

image-20230825160228887

TCP服务器进程发送TCP连接释放报文段并进入最后确认状态

该报文段首部中

  • 终止位FIN和确认位ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认

  • 序号seq字段的值为w,这是因为在半关闭状态下,TCP服务器进程可能又发送

  • 确认号ack字段的值为u+1,这是对之前收到的TCP连接释放报文段的重复确认

image-20230825160338331

TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态

该报文段首部中

  • 确认为ACK的值被设置为1,表明这是一个普通的TCP确认报文段

  • 序号seq字段的值设置为u+1,这是因为TCP客户进程之前发送的TCP连接释放报文段虽然不携带数据,但要消耗掉一个序号

  • 确认号ack字段的值设置为w+1,这是对所收到的TCP连接释放报文段的确认

TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要进过2MSL后才能进入关闭状态

TCP客户进程在发送完最后一个确认报文后,为什么不直接进入关闭状态?而是要进入时间等待状态?

image-20230825160544140

因为时间等待状态以及处于该状态2MSL时长,可以确保TCP服务器进程可以收到最后一个TCP确认报文段而进入关闭状态

另外,TCP客户进程在发送完最后一个TCP确认报文段后,在经过2MSL时长,就可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中,不会出现旧连接中的报文段

(如果FIN包由于网络问题乱序到达,会怎么办?——我的理解是,可以通过序列号来判断是不是乱序的)

更多异常处理:TCP 才不傻:三次握手和四次挥手的异常处理 - 知乎 (zhihu.com)

TCP保活计时器的作用

  • TCP双方已经建立了连接,后来,TCP客户进程所在的主机突然出现了故障
  • TCP服务器进程以后就不能再收到TCP客户进程发来的数据
  • 因此,应当有措施使TCP服务器进程不要再白白等待下去
image-20230825160744124

5.9 TCP报文段的首部格式

复习

  1. 全程高能
image-20230825201019500

各字段的作用

源端口和目的端口

image-20230825201116036

序号、确认号和确认标志位

image-20230825201242958

数据偏移、保留、窗口和校验和

image-20230825201351711

同步标志位、终止标志位、复位标志位、推送标志位、紧急标志位和紧急指针

image-20230825201443873

选项和填充

image-20230825201500256

2-1 网络模型共几层

2-2 键入网址到网页显示,期间发生了什么?

一 解析URL

二 查询服务器域名对应的 IP 地址

浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

域名解析的工作流程

三 协议栈

img

应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

假设客户端有多个网卡,就会有多个 IP 地址,那 IP 头部的源地址应该选择哪个 IP 呢?这个判断相当于在多块网卡中判断应该使用哪个一块网卡来发送包。这个时候就需要根据路由表规则,来判断哪一个网卡作为源地址 IP。在 Linux 操作系统,我们可以使用 route -n 命令查看当前系统的路由表。

路由表

我们假设 Web 服务器的目标地址是 192.168.10.200

  1. 首先先和第一条目的子网掩码(Genmask)进行 与运算,得到结果为 192.168.10.0,但是第一个条目的 Destination192.168.3.0,两者不一致所以匹配失败。
  2. 再与第二条目的子网掩码进行 与运算,得到的结果为 192.168.10.0,与第二条目的 Destination 192.168.10.0 匹配成功,所以将使用 eth1 网卡的 IP 地址作为 IP 包头的源地址。

那么假设 Web 服务器的目标地址是 10.100.20.100,那么依然依照上面的路由表规则判断,判断后的结果是和第三条目匹配。第三条目比较特殊,它目标地址和子网掩码都是 0.0.0.0,这表示默认网关

四 TCP

见前面章节

五 IP

见前面章节

六 MAC

见前面章节

七 出口——网卡

网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。

负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

数据包

  • 起始帧分界符是一个用来表示包起始位置的标记
  • 末尾的 FCS(帧校验序列)用来检查包传输过程是否有损坏

八 交换机

九 路由器

十 目标服务器

3-1 HTTP

提纲

待录入

客户端只需给进程分配一个未被占用的端口,而服务端的某些服务需要按约定占据相应的端口。

若某tcp段的载荷为200字节,序号为100,那么其占有序号100-299,收到的确认序号应为300。

第三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。

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

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

img

tls1.2需四次握手,tls1.3(http3.0)需要三次握手