计算机网络复习笔记(湖科大教书匠)
课程链接:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?p=61&share_source=copy_web&vd_source=cd12864239c2976e9f2bce4b307393f0
一、基础概念
信息交换方式
电路交换
- 电话交换机接通电话线的方式成为电路交换
- 从通信资源的分配角度来看,交换就是按照某种方式动态地分配传输线路的资源
- 电路交换的三个步骤
- 建立连接(分配通信资源)
- 通话(一直占用通信资源)
- 释放连接(归还通信资源)
优点:通信时延小、有序传输、没有冲突、适用范围广、实时性强、控制简单
缺点:建立连接时间长、线路独占,使用效率低、灵活性差、难以规格化
计算机网络为什么不采取电路交换:使用效率低,因为计算机数据是突发式地出现在传输线路上的
报文交换
- 交换节点采用存储转发
- 但报文交换对报文的大小没有限制,这就要求交换节点要有较大的缓存空间
- 报文交换主要用于早期的电报通信网,现在较少使用,被分组交换替代
- 优点:无需建立连接、动态分配线路、提高线路可靠性、提高线路利用率和提供多目标服务
- 缺点:引起了转发时延、需要较大存储缓存空间、需要传输额外的信息量
分组交换
在因特网中,最重要的分组交换机是路由器,将各个网络互联起来,并对接收到的分组进行转发(交换),
例:
- host1要给host2发送一条消息,我们将消息的整块数据称为报文
- 发送之前先将较长的报文划分成一个个更小的等长数据段
- 在每一个数据段前面加上一些由必要的控制信息组成的首部后,构成为一个分组,简称为包,首部可称为包头
- 首部包含分组的目的地址,分组交换机接收到一个分组后,先暂存然后检查首部中的目的地址进行查表转发给下一分组交换机
- 各分组经过一系列的分组转发最后到达host2,去掉首部,将各数据段组成还原为原始报文
优点:无需建立连接、线路利用率高、简化了存储管理、加速传输、减少出错概率和重发数据量
缺点:引起了转发时延、需要传输额外的信息量、对于数据报服务,存在失序/丢失或者重复分组的问题、对于虚拟电报服务存在呼叫建立数据传输和虚电报释放三个过程
计算机网络一般采用分组交换。
计算机网络
定义
计算机网络最简单的定义是:一些互相连接的、自治的计算机集合
计算机网络较好的定义:计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的的。这些可编程的硬件能够用来传输多种不同类型的数据,并能够支持广泛的和日益增长的应用
分类
按交换技术分类:电路交换网络、报文交换网络、分组交换网络
按使用者分类:公用网、专用网
按传输介质分类:有线网络、无线网络
按覆盖范围分类:广域网WAN、域域网MAN、局域网LAN、个域网PAN
按拓扑结构分类:总线型网络、星型网络、环形网络、网状型网络
性能指标
速率
数据量:计算机中数据量的单位,也是信息论中信息量的单位。一个比特就是二进制数字中的一个1或0
常用数据量单位
■1Byte = 8bit
■1KB = 2^10B
■1MB = 1K·KB = 2^20B
■1GB = 1K·MB = 2^30B
速率:连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特率或数据率
常用数据率单位
■bit/s (b/s , bps)
■kb/s = 10^3 b/s
■Mb/s = k·kb/s = 103·103 b/s = 10^6 b/s
注意点:数据量和数据率的单位不一样,数据量是210,数据率是1010
带宽
带宽用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络的某一点到另一点所能通过的“最高数据率”
注意:带宽的单位 与 速率的单位一致,200M的带宽 即 200Mb/s
吞吐量
吞吐量表示在单位时间内通过某个网络的数据量。吞吐量受网络的带宽或额定速率的限制
时延
时延 = 发送时延 + 传播时延 + 处理时延
发送时延计算:分组长度/发送速率
传播时延计算:信道长度/电磁波传播速率(不同介质速率不一样)
处理时延计算:一般不方便计算
时延带宽积
时延带宽积 = 传播时延 * 带宽。时延带宽积就是信道的体积
若发送端连续发送数据,则在所发送的第一个比特即将到达终点前,发送端就已经发送了时延带宽积个比特
链路的实验带宽积又称为 以比特为单位的链路长度
往返时间
在许多情况下,因特网上的信息不仅仅单方向传输,而是双向交互我们有时候需要知道双向交互一次所需的时间,因此,往返时间RTT(Round-Trip Time)也是一个重要的性能指标
利用率
利用率分为:信道利用率 + 网络利用率,其中:
○信道利用率:用来表示某信道有百分之几的时间是被利用的(有数据通过)
○网络利用率:全网络的信道利用率的加权平均
根据排队论,当某信道的利用率增大时,该信道引起的时延也会迅速增加。因此,信道利用率并非越高越好
丢包率
丢包率即分组丢失率,是指在一定时间范围内,传输过程中丢失的分组数量与总分组数量的比率
丢包率具体可分为借口丢包率、节点丢包率、链路丢包率、路径丢包率、网络丢包率等
分组丢失主要有两种情况:
- 分组传输过程中出现误码,被结点丢弃
- 分组到达一台队列已满的分组交换机时被丢弃,在通信量较大时就可能造成网络拥塞
丢包率也反映了网络的拥塞情况。
体系结构
法律上的标准是OSI体系结构,但它缺乏实际与商业化,所以事实的标准是上还是后来的TCP/IP标准
现在网络上的传输设备都是支持TCP/IP协议簇的,不过路由器只支持物理层、数据链路层、网络层
物理层+数据链路层统称为网络接口层,支持以太网接口、WIFI接口等等,不限定
网络层的核心协议是 IP协议
传输层的核心协议是 TCP协议(可靠传输)和UDP协议(不可靠传输)
应用层的协议有很多,HTTP、DNS、SMTP、FTP等
注意:IP协可以互通不同的网络接口、也可以为各种不同的网络应用提供服务
分层后各层需要解决的问题
物理层解决的问题
- 采用怎样的传输媒体?
- 采用怎样的物理接口?
- 使用怎样的信号表示0和1?方波?
数据链路层解决的问题
-
如何标识一个网络中的各主机(总线型传输数据例子)
-
如何从信号所表示的一连串比特流中区分出地址和数据
-
如何协调各主机征用总线
网络层解决的问题
- 如何标识多个网络以及网络中的各主机
- 路由器如何转发分组、如何进行路由选择
传输层解决的问题
- 如何解决进程之间基于网络的通信问题
- 出现传输错误时,如何处理
应用层解决的问题
- 通过应用进程的交互来完成特定的网络应用
二、物理层(重点)
概念
物理层就是为了解决在各种传输媒体上传输0和1的问题
两种传输媒体
- 导引型体:双绞线、同轴电缆、光纤
- 非导引型:微波、可见光、红外线、无线电波
协议主要任务
○机械特性:指明接口所用接线器的形状、尺寸、引脚数目和排列、固定和锁定装置
○电气特性:指明在接口电缆的各条线上出现的电压的范围
○功能特性:指明某条线上出现的某一电平的电压表示何种意义
○过程特性:指明对于不同功能的各种可能事件的出现顺序
传输方式
- 串行传输:发送端将数据一个比特一个比特的发送,只需要一条传输线路(远距离通信采用)
- 并行传输:发送端将数据在一个时刻发送n个比特,需要n条线路(计算机内部采用)
- 同步传输:数据块以稳定的比特流的形式传输,字节之间没有间隔,接收端在每个比特流的中间时刻进行比较,以判别接收到的是比特0还是比特1。需要采取方法让收发双方的时钟保持一致,
- 异步传输:以字节为独立的传输单位,字节时间的时间间隔不固定。接收端只在每个字节的起始处对字节内的比特实现同步,通常要在每个字节前后加上起始位和终止位。字节之间异步,但字节中的比特要同步
- 单工通信:又称为单向通信,例如无线广播。需要一·条信道
- 半双工通信:可以双向通信,但是不能够同时反方向通信,例如对讲机。需要两条信道
- 全双工通信:可以同时反方向通信传输数据,例如电话。需要条信道
编码与调制
信号是数据的电磁表现,由信号源发出的信号称为基带信号
-
数字基带信号:例如CPU与内存之间的信号
-
模拟基带信号:例如麦克风收到声音后模拟的音频信号
信号在信道中进行传输,信道分为数字信道、模拟信道
常见编码:不归零编码、不归零编码、曼彻斯特编码,差分曼彻斯特编码
不归零制:正电平代表1,负电平代表 0。
归零制:正脉冲代表1,负脉冲代表0。
曼彻斯特编码:位周期中心的向上跳变代表0,位周期中心的向下跳变代表1。但也可反过来定义
差分曼彻斯特编码:在每一位的中心处始终都有跳变。位开始边界有跳变代表0,而位开始边界没有跳变代表1。
曼彻斯特编码和差分曼彻斯特编码产生的信号频率比不归零制高。
信道的极限容量
失真因素:码元传输速率、信号传输距离、噪声干扰、传输媒体质量
奈氏准则:在假定的理想条件下,为了避免码间串扰,码元传输速率是有上限的
香农公式:带宽受限且有高斯白噪声干扰的信道的极限信息传输速率
C是数据速率的极限值,单位bit/s;W为信道带宽,单位Hz;S是信号功率(瓦),N是噪声功率。香农公式中的S/N是为信号与噪声的功率之比,是无量纲单位,但讨论信噪比时,常以分贝(dB)为单位。
其中SNR为信噪比,需要换算一下。
三、数据链路层
概念
数据链路层以帧为单位传输和处理数据
数据链路层主要的三个点:封装成帧、差错检测、可靠传输
封装成帧
封装成帧即 数据链路层将上层交互下来的协议数据单元添加帧头和帧尾使之成为帧
其中:帧头和帧尾中包含有重要的控制信息,帧头和帧尾的作用之一就是帧定界。
透明传输是指数据链路层对上层交付的数据传输没有任何限制,就好像数据链路层不存在一样
- 面向字节的物理链路使用字节填充(或称为字符填充)的方法实现透明传输
- 面向比特的物理链路使用比特填充的方法实现透明传输
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传输单元MTU
差错检测
实际的通信链路都不是理想的,毕业在传输过程中可能会产生差错。1与0互变,这称为比特差错
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
-
奇偶校验(漏检率比较高)
○在待发送的数据后面添加1位奇偶检验位,使整个数据中“1”的个数为奇数(奇校验) 或 偶数(偶校验)
○如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
○如果有偶数个位发生误码,则奇偶性不发生误码,不能检查出误码(漏检) -
循环冗余校验CRC(广泛运用)
○收发双方约定好一个生成多项式G(x)
○发送方基于待发送的数据和生成多项式计算出检错码(冗余码),将其添加到待传输数据的后面一起传输
○接收方通过生成多项式来计算收到的数据是否产生了误码
○计算方式:摸2取余:- 构造被除数:待发送信息后加上多项式最高次数个0
- 构造除数:生成多项式各项系数构成的比特串
- 做除法,检查余数,不够补零
示例:
可靠传输
基础概念
使用差错检测技术,接收方的数据链路层就可检测出帧在传输过程中是否产生了误码
数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
- 可靠传输服务:想办法实现发送方发送什么,接收方就接受什么
●一般情况下,有线链路的误码率比较低,为了减少开销,并不要求数据链路层向上提供可靠传输服务。即使出现误码,可靠传输的问题由其上层处理
●无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
●比特差错只是传输差错中的一种,还包括分组丢失、分组重复以及分组失序
●分组丢失、分组重复以及分组失序,一般不出现在数据链路层,而是其上层,所以可靠传输不止局限于数据链路层(其他各层均可选择实现可靠传输)
○TCP向其上层提供面向连接的可靠传输服务
○UDP向其上层提供面向无连接、不可靠传输服务
○IP向其上层提供无连接、不可靠传输服务
实现机制-停止等待协议
发送方给接收方发送数据,选择接收方收到一个进行差错检测,没有误码则返回确认分组,简称ACK
发送方接收到ACK后,才能发送下一个分组,如果新发的数据出现误码,则返回否认分组,简称NAK
发送方设置超时时间,超过时间没有收到ACK和NAK则重新发送。时间应该仔细选择
注意:为了避免ACK超时导致数据重复发送等问题,对数据与ACK/NAK进行编号,0和1即可(因为一般ACK不会超时,数据链路层一般不用设置)。
实现机制-回退N帧协议
利用发送窗口来限制发送方可连续发送数据分组的个数。
发送原理
- 发送方维护一个窗口,采用三个比特为窗口编号,即0~7,循环使用
- 发送窗口的取值为Wt,选择为5,选择为1则为停止-等待协议
- 接收窗口的尺寸Wr取值为1
- 序号落在发送窗口内的数据可以连续发送,落在外面的不能被发送
- 序号落在接收窗口内的数据可以被接收,落在外面的不可以被接收。每接收一个则接收窗口往前滑动一个,同时给发送方返回确认分组ACK
- 发送方每接收到一个确认分组,发送窗口就向前滑动一个位置,这样就有新的序号落入新的窗口,同时删除已被接收的数据的缓存
- 累积确认:接收方不需要对收到的每一个分组进行确认,等按序到达的最后一个分组发送确认,ACKn表示序号为n及其之前的数据都有序到达了
实现机制-选择重传
-
回退N帧协议的接收窗口尺寸Wr只能等于1,因此接收方只能按序接收正确到达的数据分组
-
一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费
-
为了进一步提高性能,可设法只重传出现误码的数据分组。因此接收窗口的尺寸Wr不应再等于1,而应该大于1。以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层,这就是选择重传协议
-
接收方需要对每一个数据分组采取逐一确认,如果连续的接收,就往前滑动,如果不是连续的接收,那就不能向前滑动。发送方收不到ACK,会自动将这一个数据分组进行重发
-
接收窗口:1 < Wr <= Wt
媒体接入控制
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)
媒体接入控制分为 静态划分信道(时分多址、频分多址、码分多址) 和 动态接入控制(受控接入、随机接入)
信道复用是通信技术中一个重要的基本概念,复用就是通过一条一条物理线路传输多路用户的信道。当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
- 频分复用将信道分为几个子信道,互相隔离
- 时分复用将信道按时间间隙划分,每个用户只在所分配的时隙里使用线路传输数据
随机接入 - CSMA/CD协议
CSMA/CD是载波监听多址接入/碰撞检测
○多址接入MA:多个站连接在一条总线上,竞争使用总线
○载波监听CS:每个站在发送帧之前先要检测一下总线上是否有其他站点再发送帧(“先听后说”)
○碰撞检测:每一个正在发送帧的站边发边检测碰撞
随机接入 - CSMA/CA协议
CSMA/CA是载波监听多址接入/碰撞避免
- 在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发送碰撞
- 在无线局域网中,不能使用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信道强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大
MAC地址、IP地址与ARP协议
MAC地址是以太网的MAC子层所使用的地址 - 属于数据链路层
IP地址是TCP/IP体系结构网络层所使用的地址 - 属于网络层
ARP协议属于TCP/IP体系结构的网络层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址 - 属于网络层
数据报在转发的过程中IP地址与MAC地址的变化:
-
源IP地址与目的IP地址始终不变
-
源MAC地址与目的MAC地址始终在变
ARP协议:用于通过IP地址找到其MAC地址
- ARP请求报文(广播):我的IP地址是xx,我的MAC地址是xx,我想要IP地址为xxx的主机的MAC地址(具体格式使用Wireshark抓包确定),封装在MAC帧中
- ARP响应报文:不是该主机就自动丢弃,是该主机的IP地址就送交上层解析然后响应报文,将自己的MAC地址与IP地址响应回去,同时将请求报文中的IP地址与MAC地址放置在自己的ARP高速缓存(动态获取的生命周期默认为两分钟)中,MAC地址与IP地址的对应关系不是永久不变的
- ARP的使用不能直接跨网络,而需要逐段链路的传输;ARP没有安全验证机制,存在ARP欺骗问题
集线器与交换机
集线器
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源(发出的数据会被总线上的各个主机所接收),使用的还是CSMA/CD协议
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测
- 集线器一般都有少量的容错能力和网络管理能力
交换机
- 交换机会将发送方发出的单波帧准确的发给对应的接收方
- 交换机通常有多个接口。每个接口都可以与一台主机或另一个以太网交换机相连。一般都工作在全双工方式
- 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞
- 以太网交换机一般都具有多种速率的接口
- 以太网交换机工作在数据链路层(也包括物理层),它受到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
- 以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的
- 帧转发方式:存储转发、直通转发
- 使用交换机后,主机A给主机B发ARP请求,交换机会自学习记住A的MAC地址及其对应的接口,如果主机B给主机A响应ARP报文,则交换机会自学习记住主机B的MAC地址及其对应的接口。同时主机A和B都缓存有对方的MAC地址与IP地址。以太网交换机通过自学习算法自动逐渐建立起帧交换表
生成树协议STP
为提高交换机的可靠性,添加了冗余链路,形成一个环形以提高以太网的可靠性。
冗余链路带来的负面效应
- 形成环路
- 广播风暴 - 主机A发送一个广播帧,交换机A会将帧转发到各个接口
- 主机收到大量重复的广播帧
- 交换机的帧交换动荡(漂移)
解决方案 - 生成树协议STP
- 使用生成树协议STP可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其拓扑结构必须是树形的
- 最终生成的树形逻辑拓扑要确保连通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时,交换机都将进行生成树的重新计算
虚拟局域网VLAN
比如公司有三层楼,一个总交换机,每层楼一个交换机连接在总交换机上,每层楼的主机都连接在对应楼的交换机上,这时候如果发送广播帧就会出现风暴
使用VLAN技术就可以将1,2,3楼部分机器分别跨楼层划分成一个个的虚拟局域网,这样就不会发生全局的广播风暴
VLAN的实现机制
- IEEE 802.1Q帧:对MAC帧格式进行扩展,插入4字节的VLAN标记
■最后12比特称为VLAN标识符VID,唯一地标志了以太网帧属于哪一个VLAN
■这个帧是交给交换机来处理的,而不是用户主机来进行处理的 - 交换机的端口类型
■Access端口:一般用于连接用户计算机,只能属于一个VLAN,PVID与端口所属相同,默认为1。去标签、打标签操作
■Trunk端口:一般用于交换机或路由器之间的互连,属于多个VLAN,默认PVID为1
四、网络层
网络层的主要任务是实现网络互联,进而实现数据包在各网络之间的数据传输。本层包含的协议有 ICMP、IGMP、IP、ARP协议
网络层需要解决的问题
- 网络层向运输层提供怎样的服务
- 网络层寻址问题
- 路由选择问题
网络层提供的两种服务
网络层提供两种服务
- 面向连接的虚电路服务
- 可靠通信由网络来保证
- 必须建立网络层的连接 - 虚电路VC(Virtual Client)
- 通信双方沿着已建立的虚电路发送分组
- 目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需要携带一条虚电路的编号
- 这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终可到达接收方
- 通信结束后需要释放之前建立的虚电路
- 很多广播域分组交换网都使用面向连接的虚电路服务
- 无连接的数据报服务
- 可靠通信应当由用户主机来保证
- 不需要建立网络层连接
- 每个分组可走不同的路径
- 每个分组的首部必须携带目的主机的完整地址
- 这种通信方式所传送的分组可能误码、丢失、重复和失序
- 由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做的比较简单、而且价格低廉
- 因特网采用了这种设计思想,也就是将复杂的网路处理功能置于因特网的边缘,而将相对简单的尽最大努力的分组交付功能置于因特网核心
IPv4
IPv4地址就是给因特网上每一台主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32比特的标识符。32比特的IPv4地址不方便阅读,记录以及输入等,因此IPv4地址采用点分十进制表示法方便阅读
IPv4地址的编制方法经历了三个阶段:分类编址、划分子网、无分类编址。
分类编址
- A类地址:网络号占8位,主机号占24位,最高位为0
- B类地址:网络号占16位,主机号占16位,最高位为10
- C类地址:网络号占24位,主机号占8位,最高位为110
- D类地址:多播地址,最高位为1110
- E类地址:保留为今后使用,最高位为1111
0.0.0.0只能够作为源地址使用,255.255.255.255只能够作为一个目的主机,广播使用
划分子网
划分子网可以将一大的IPv4地址范围分隔为多个较小的子网,每个子网独立管理。
子网掩码是一个32位的二进制数,和IP地址一致,指明哪些是位是网络标识部分,哪些位是主机标识部分。
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
- 子网掩码使用连续的比特1来对应网络号和子网号
- 子网掩码使用连续的比特0来对应主机号
- 计算:将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址
无分类编址
划分子网在一定程度上缓解了因特网在发展过程中遇到的困难,但是数量巨大的C类网因为其地址空间太小并没有得到充分使用
CIDR无分类编址法,消除了传统的ABC类以及划分子网的概念
- CIDR使用“斜线记法”,在IPv4后面加斜线写上网络前缀所占的比特数量,比如地址块128.14.35.7/20
- 通过CIDR地址块可以知道网络的所有细节:最小地址、最大地址、地址数量、聚合C类网地址、地址掩码
- 路由聚合(构造超网):就是找几个CIDR的共同前缀
IP数据报的发送与转发
IP数据报的发送和转发的过程:主机发送IP数据报->路由器转发IP数据报
源主机如何知道目的主机是否与自己在同一个网络?
- 将目的主机与自己的子网掩码进行相与运算,看是否是一个网络地址
- 在一个网络属于直接交付,不在一个网络属于间接交付
路由器转发IP数据报
- 检查IP数据报首部是否出错
- 检查IP数据报的目的地址在路由表中查找匹配的条目
路由器的各个接口连接的是各个网络,路由器转发表中会记录某个网络是直连还是通过某个接口连接的网络间接交付的
路由器收到广播帧255.255.255.255以后不会转发,因为它是隔离广播域的
路由选择协议
路由选择协议分为 动态路由选择 + 静态路由选择
静态路由配置是由人工进行配置的,动态路由配置是由路由器通过路由选择协议自动获取路由信息
路由信息协议RIP
路由信息协议RIP是内部网关协议IGP中最先得到广泛使用的协议之一.
RIP跳数作为度量来衡量到达目的网络的距离
- 路由器到直连网络的距离定义为1
- 路由器到非直连网络的距离定义为所经过的路由器数加1
- 允许一条路径最多只能包含15个路由器。距离为16时相当于不可达,RIP只适用于小型互联网
工作流程
- 路由器刚工作时,只知道自己到直连网络的距离为1
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息
规则
- 到达目的网络,相同的下一跳,最新信息,更新发现了新的网络,添加
- 到达目的网络,不同的下一跳,新路由优势,更新
- 到达目的网络,不同下一跳,等价负载均衡
- 到达目的网络,不同下一跳,新路由劣势,不更新
RIP认为好的路由就是距离短的路由,也就是所通过路由器数量最少的路由
RIP缺点:坏消息传的慢,容易产生路由环路或距离无穷计数
注意:RIP是用在路由器中的,连接网络的距离
开放最短路径优先OSPF
开放最短路径OSPF是为克服RIP缺点开发出来的,“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF
- OSPF是基于链路状态的,而不是像RIP那样是基于距离向量的
- OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路
- OSPF不限制网络规模,更新效率高,收敛速度快
- 链路状态是指本路由器都和哪些路由器相邻,以及相邻链路的“代价”
- 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他路由器的最短路径,即构建各自的路由表
IP数据报格式
- IP数据报有20字节的固定部分和40字节的可变部分(很少被使用),还有数据载荷
- 固定部分:版本、首部长度、区分服务、总长度、标识、标志、片偏移、生存时间、协议、首部检验和、源IP地址、目的IP地址
- 每经过一个路由器,生存时间-1,首部检验和都会重新计算。若IP分组总长度大于MTU,就得进行分片
- 具体格式可抓包分析查看,IP数据报还会被封装为帧
网际控制协议ICMP
为了更有效地转发IP数据报的提高交付成功的机会,在网络层使用ICMP协议。主机或路由器使用ICMP来发送差错报告报文和询问报文。ICMP报文被封装在IP数据报中发送
ICMP差错报文类型
- 终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文
- 源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率变慢
- 时间超过:收到一个数据报,生存时间为0,但目的IP地址不是自己
- 参数问题:当路由器或目的主机收到IP数据报后,根据首部中的检验和字段发现出现乱码就丢弃并返回参数问题报文
- 改变路由:路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
以下情况不应该发送ICMP差错报告报文
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.1或0.0.0.0)的数据报不发送ICMP差错报告报文
常见ICMP请求询问报文
- 回送请求和回答:用来测试目的站是否可达及了解其有关状态
- 时间戳请求和回答:用来进行时钟同步和测量时间
虚拟专用网VPN
虚拟专用网就是利用公有的因特网作为本机构各专用网之间的通信载体
网络地址转换NAT
NAT能使大量使用内部专用地址(内网)的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源
路由器内有一张NAT地址表,将传输层的端口与IP地址一起进行转换,这样就只需要一个外网地址了。如果只记录IP,就得需要使用多个外网IP地址了。
NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护。使用内网私有地址+NAT无法将私有主机当作服务器,因为外网主机无法发现内网地址,可以考虑使用内网传透
五、传输层
概念
物理层、数据链路层、网络层共同解决了将异构网络互联起来所面临的问题,实现了主机到主机的通信
-
网络层的范围是主机到主机,但实际上进行通信的实体是位于通信两端主机中的进程,比如两个飞书进程
-
传输层使用不同的端口(虚拟的)来区分对应不同的进程,然后通过网络层及其下层进行传输应用层报文,接收方将报文逐层剥开送交给传输层所对应的应用进程
-
传输层直接为应用进程间的逻辑通信提供服务
-
传输层向高层用户屏蔽了下面网络核心的细节,就使得应用进程看见的就好像是两个传输层实体之间有一条端到端的逻辑通信信道
-
因特网的传输层提供面向连接的TCP和无连接的UDP
端口
为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识
TCP/IP体系的传输层使用端口号来区分应用层的不用应用进程
- 端口号采用16比特表示,取值为0~65535
- 端口号只具有本地意义,只是为了标识本计算机应用层的各进程。因特网中不同计算机的相同端口号是没有联系的
UDP与TCP的对比
UDP - 用户数据报协议
- 使用UDP传输可以随时进行传输,面向无连接(网络层也是无连接的不可靠传输服务)
- UDP支持单播、多播、广播
- UDP对应用层交付的报文直接打包,尽最大努力交付,不使用流量控制和拥塞控制
- UDP适用于实时应用,比如IP电话、视频会议等
- UDP用户数据报首部仅8个字节
TCP - 传输控制协议
- 使用TCP协议传输数据之前需要进行三次握手建立连接才能进行数据传输,传输结束后得进行四次挥手
- TCP仅支持单播
- TCP面向连接,连接就好像有一条基于TCP连接的可靠信道(不会出现误码,丢失,乱序等情况)
- TCP面向字节流,使用流量控制与拥塞控制
- TCP报文段首部最小20字节,最大为60字节
TCP流量控制
流量控制就是让发送方的发送方的速率不要太快,能够让接收方来得及接收
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制
对于已连接的TCP连接,A对B发送数据,B对A进行流量控制:
- 建立连接时会告诉A,B的滑动窗口是多少,假如是400
- 发送方将数据按100字节分成一块块的,从1开始标号,第一块即为1-100,第二块即为101-200
- 主机A将1-100的数据封装成一个TCP报文发送出去(还有300字节可以发送),发送时的seq=1代表数据首部的序号首地址,DATA代表这是TCP数据报文段
- 然后主机A给主机B发送数据块101-200与数据块201-300,但是数据块201-300丢失了
- 主机B给主机A发送确认收到报文(ACK=1,ack=201,rwnd=300),ACK取值1代表这是一个TCP确认报文段,ack=201代表序号201之前的数据均已接收完毕,rwnd取值300代表将确认窗口大小设置为300
- 主机A收到确认报文后将窗口向前滑动,使已被接收的数据移出滑动窗口让未发送的数据落入窗口。同时主机A将自己的窗口设置为300
- 主机A没收到201-300的响应报文,计时器已到,则重传。同时依次将301-400以及401到500的数据封装发送
- 主机B收到后响应累计确认(ACK=1,ack=501,rnwd=100),进行限流
- 主机B接收不过来就在累计确认的时候将自己的滑动窗口时候设置为0,有空间了再设置大的并告知主机A。主机A收到零窗口报文就设置计时器,到点发送探测报文,避免通知报文丢失。(零窗口探测报文也有重传计时器)
TCP拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞。若出现拥塞不进行控制,整个网络的吞吐量将会随输入负荷的增加而下降
拥塞控制的算法:慢开始、拥塞避免、快重传、快恢复
真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)
传输轮次:
- 发送方给接收方发送数据报文段后,接收方给发送方发发回相应的确认报文段
- 一个传输轮次所经历的时间其实就是往返时间,往返时间并非是恒定的数值
- 使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并受到了对已发送的最后一个报文段的确认
拥塞窗口:
- 它会随网络拥塞程度,以及所使用的拥塞控制算法动态变化
慢开始&拥塞避免
慢开始(slow-start)
- 目的:用来确定网络的负载能力或拥塞程度。
- 算法的思路:由小到大逐渐增大拥塞窗口数值。
两个变量:
- 拥塞窗口(cwnd):初始拥塞窗口值:2 种设置方法。窗口值逐渐增大。
- 1 至 2 个最大报文段 (旧标准)
- 2 至 4 个最大报文段 (RFC 5681)
- 慢开始门限(ssthresh):防止拥塞窗口增长过大引起网络拥塞。
每经过一个传输轮次,拥塞窗口就加倍,窗口大小按指数增加,2的n-1次方
拥塞避免(congestion avoidance)
思路:让拥塞窗口 cwnd 缓慢地增大,避免出现拥塞。
每经过一个传输轮次,拥塞窗口 cwnd = cwnd + 1。
使拥塞窗口 cwnd 按线性规律缓慢增长。
在拥塞避免阶段,具有 “加法增大” (Additive Increase) 的特点。
如果在发送过程中出现部分报文段丢失,这必然会造成发送方对这些丢失报文段的超时重传,这时候又回到了慢开始
两个算法完整示意图
快重传和快恢复
快重传(fast retrasmit)
快恢复(fast recovery)
改进后的整体算法的示意图
TCP超时重传的选择
如果超时重传时间RTO的值设置得比RTT0的值小很多,这会引起报文段不必要的重传,使网络负荷增大
如果超时重传时间RTO的值设置得远大于RTT0的值,这会使重传时间推迟的太长,使网络的空闲时间增大,降低传输效率
RFC6298建议使用下式计算超时重传时间RTO
往返时间RTT的测量比较复杂
总结:出现超时重传后,新RTO=2倍的旧RTO
TCP可靠传输的实现
TCP运输连接管理
TCP的连接建立
- TCP 建立连接的过程叫做握手。
- 握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手。
- 采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。
TCP的连接建立要解决以下三个问题
- 使TCP双方能够确知对方的存在;
- 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等
- 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP使用“三报文握手”建立连接
- TCP 连接的建立采用客户服务器方式。
- 主动发起连接建立的应用进程叫做TCP客户 (client)。
- 被动等待连接建立的应用进程叫做TCP服务器 (server)。
“握手”需要在TCP客户端和服务器之间交换三个TCP报文段
最初两端的TCP进程都处于关闭状态
一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息。例如TCP连接表、指向发送和接收缓存的指针、指向重传队列的指针,当前的发送和接收序号等
之后,就准备接受TCP客户端进程的连接请求
此时,TCP服务器进程就进入监听状态,等待TCP客户端进程的连接请求
TCP服务器进程是被动等待来自TCP客户端进程的连接请求,因此成为被动打开连接。
TCP客户进程也是首先创建传输控制块
由于TCP连接建立是由TCP客户端主动发起的,因此称为主动打开连接
然后,在打算建立TCP连接时,向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态
TCP连接请求报文段首部中
-
同步位SYN被设置为1,表明这是一个TCP连接请求报文段
-
序号字段seq被设置了一个初始值x,作为TCP客户端进程所选择的初始序号
请注意:TCP规定SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号
TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态
TCP连接请求确认报文段首部中
-
同步位SYN和确认为ACK都设置为1,表明这是一个TCP连接请求确认报文段
-
序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号,
-
确认号字段ack的值被设置成了x+1,这是对TCP客户进程所选择的初始序号(seq)的确认
请注意:这个报文段也不能携带数据,因为它是SYN被设置为1的报文段,但同样要消耗掉一个序号
TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已连接状态
普通的TCP确认报文段首部中
-
确认位ACK被设置为1,表明这是一个普通的TCP确认报文段
-
序号字段seq被设置为x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x,所以TCP客户进程发送的第二个报文段的序号为x+1
-
确认号字段ack被设置为y+1,这是对TCP服务器进程所选择的初始序号的确认
请注意:TCP规定普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号
TCP服务器进程收到该确认报文段后也进入连接已建立状态
现在,TCP双方都进入了连接已建立状态,它们可以基于已建立好的TCP连接,进行可靠的数据传输!
为什么TCP客户进程最后还要发送一个普通的TCP确认报文段?能否使用“两报文握手”建立连接?
为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个 早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因 此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。所以并不多余,这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误
总结
TCP的连接释放
- TCP 连接释放过程比较复杂。
- 数据传输结束后,通信的双方都可释放连接。
- TCP 连接释放过程是四报文握手。
TCP通过“四报文挥手”来释放连接
- TCP 连接的建立采用客户服务器方式。
- 主动发起连接建立的应用进程叫做TCP客户 (client)。
- 被动等待连接建立的应用进程叫做TCP服务器 (server)。
- 任何一方都可以在数据传送结束后发出连接释放的通知
现在TCP客户进程和TCP服务器进程都处于连接已建立状态
TCP客户进程的应用进程通知其主动关闭TCP连接
TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态
TCP连接释放报文段首部中
-
终止位FIN和确认为ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
-
序号seq字段的值设置为u,它等于TCP客户进程之前已传送过的数据的最后一个字节的序号加1
-
确认号ack字段的值设置为v,它等于TCP客户进程之前已收到的、数据的最后一个字节的序号加1
请注意:TCP规定终止位FIN等于1的报文段即使不携带数据,也要消耗掉一个序号
TCP服务器进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态
普通的TCP确认报文段首部中
-
确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文段
-
序号seq字段的值设置为v,它等于TCP服务器进程之前已传送过的数据的最后一个字节的序号加1,这也与之前收到的TCP连接释放报文段中的确认号匹配
-
确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认
TCP服务器进程应该通知高层应用进程,TCP客户进程要断开与自己的TCP连接
此时,从TCP客户进程到TCP服务器进程这个方向的连接就释放了
这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了
但如果TCP服务器进程还有数据要发送,TCP客户进程仍要接收,也就是说从TCP服务器进程到TCP客户进程这个方向的连接并未关闭
TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段
若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接
由于TCP连接释放是由TCP客户进程主动发起的,因此TCP服务器进程对TCP连接的释放称为被动关闭连接
TCP服务器进程发送TCP连接释放报文段并进入最后确认状态
该报文段首部中
-
终止位FIN和确认位ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
-
序号seq字段的值为w,这是因为在半关闭状态下,TCP服务器进程可能又发送
-
确认号ack字段的值为u+1,这是对之前收到的TCP连接释放报文段的重复确认
TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态
该报文段首部中
-
确认为ACK的值被设置为1,表明这是一个普通的TCP确认报文段
-
序号seq字段的值设置为u+1,这是因为TCP客户进程之前发送的TCP连接释放报文段虽然不携带数据,但要消耗掉一个序号
-
确认号ack字段的值设置为w+1,这是对所收到的TCP连接释放报文段的确认
TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要进过2MSL后才能进入关闭状态
TCP客户进程在发送完最后一个确认报文后,为什么不直接进入关闭状态?而是要进入时间等待状态?
因为时间等待状态以及处于该状态2MSL时长,可以确保TCP服务器进程可以收到最后一个TCP确认报文段而进入关闭状态。另外,TCP客户进程在发送完最后一个TCP确认报文段后,在经过2MSL时长,就可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中,不会出现旧连接中的报文段
TCP保活计时器的作用
TCP双方已经建立了连接,后来,TCP客户进程所在的主机突然出现了故障
TCP服务器进程以后就不能再收到TCP客户进程发来的数据
因此,应当有措施使TCP服务器进程不要再白白等待下去
TCP报文段格式
各字段的作用
源端口和目的端口
序号、确认号和确认标志位:
数据偏移、保留、窗口和校验和:
同步标志位、终止标志位、复位标志位、推送标志位、紧急标志位和紧急指针:
选项和填充:
六、应用层
概念
应用层解决通过应用进程的交互来实现特定网络的问题。常见的网络应用有万维网WWW、域名系统DNS、动态主机配置DNS、电子邮件、文件传输FTP、P2P文件共享、多媒体网络应用
C/S:
- 客户和服务器是指通信中所涉及的两个应用进程
- 客户/服务器方式所描述的是进程之间服务与被服务的关系
- 客户是服务请求方,服务器是服务提供方
- 服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号,而运行服务器的主机也具有固定的IP地址
P2P方式:
- 在P2P中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者
- 流行的P2P应用主要包括P2P文件共享、即时通信、P2P流媒体、分布式存储等
- 基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是个人的计算机,通常位于住宅,校园和办公室中
- P2P方式最突出特性之一就是它的可拓展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低
- P2P具有成本上的优势,不需要庞大的服务器设施和带宽
动态主机配置DHCP
如何配置用户主机,才能使用户主机正常访问Web服务器?
1、静态:自己手动根据连接的路由器进行配置网关、子网掩码、IP地址、DNS地址等,繁杂容易出错
2、动态:在路由器中使用DHCP服务,连接到该路由器的主机自动获取配置
流程
- 主机向DHCP发送请求服务,DHCP为用户分配IP地址,设置租约
- 给用户响应
DNS
DNS是分布式系统,单个计算机出现问题也不会影响整体问题
因特网采用层次树状结构的域名结构
- 域名的结构由若干个分量组成,各分量之间用“点”隔开,分别代表不同级别的域名
- 每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写字母
- 级别最低的域名写在最左边,而级别最高的顶级域名写在最右边
- 完整的域名不超过255个字符
- 域名系统既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思
- 各级域名由其上一级的域名管理机构管理,顶级则由ICANN进行管理
文件传输协议FTP
文件传输协议FTP是因特网上使用的最广泛的文件传送协议。FTP提供交互式访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件
基本工作原理
- FTP默认端口号为21
- 建立TCP控制连接(21端口)和TCP数据连接(20端口)
- 控制连接整个会话都得连接,数据连接在每次文件传输的时候才连接
电子邮件
电子邮件系统的三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议
- 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件
- 邮件服务器是电子邮件系统的基础设施。因特网上所有的ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱
- 协议包括邮件发送协议(例如SMTP)和邮件读取协议(例如POP3、IMAP)
- 传送过程建立的是TCP连接
SMTP协议只能够传送ASCII码文本数据,不能传送可执行文件或其他二进制文件,为了解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件拓展MIME:
- 增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化
- 定了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变
常见的邮件读取协议:邮局协议POP、因特网邮件访问协议IMAP
万维网WWW
万维网WWW并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用
HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接
- 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象,那么请求每一个对象都需要花费2RTT的时间
- 为了减少时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是这会大量占用万维网服务器资源