计网-哈工大公开课
计网-哈工大公开课
一、计算机网络概述
1.1)计算机网络基本概念
什么是计算机网络?
计算机网络是通信技术与计算机技术紧密结合的产物。
计算机网络是互联的、自治的计算机集合。
可以通过交换网络(路由器或交换机)来互联主机。
Internet是全球最大的互联网络(互联网)。ISP(Internet Service Provider)
Internet由计算设备和通信链路通过分组交换来进行数据的传输实现通信。
什么是网络协议?
协议是为进行网络中的数据交换而建立的规、标准或约定。
协议规定了通信实体之间所交换消息的格式、意义、顺序以及针对收到信息或发生的事件所采取的动作。
协议的三要素:语法(Syntax)、语义(Semantics)、时序(Timing)
语法:数据或控制信息的结构或格式。例如信号电平(0、1)。
语义:完成何种动作以及做出何种响应。例如握手,差错控制。
时序:完成事件的顺序
协议是计算机网络的重要内容。协议是人为制定的一些规则,同时也是互联网创新的一种表现方式。
RFC(Request for Comments)IETF(Internet Engineering Task Force)互联网工程任务组来制定协议。
1.2)计算机网络结构
计算机网络结构
计算机网络由网络边缘、接入网络、网络核心构成。
网络边缘
可以简单理解为离用户最近的一层网络,个人PC电脑,移动设备等连接的都是网络边缘。
典型的有客户/服务器应用模型、对等P2P应用模型
接入网络
为了让你的设备可以同其它设备进行通信,需要把你的设备接入到核心网络。
可以使用DSL已有的电话线接入到核心网络
可以使用HFC电缆网络接入到核心网络
还可以通过共享的无线接入网络连接
网络核心
网络核心是整个互联的基础。
网络核心的关键功能就是路由和转发
网络核心解决的基本问题就是数据交换
Inrernet网络结构是什么样子?
极其复杂。通过图来看它们之间的关系。
端系统通过接入ISP连接到Internet,接入ISP又进一步互连才可以进行任意两个主机之间通信。
其中端系统连接的ISP接入到国家级别乃至全球级别的ISP,这些顶级ISP可以采用对等链路或者通过IXP(Internet exchange point)高速网络节点来进行互通,
其中可能出现一些区域网络(regional net)连接接入到ISP和运营商的ISP
1.3)网络核心-数据交换
数据交换的类型
电路交换
报文交换
分组交换
电路交换的特点
最典型的电路交换网络:电话网络
电路交换的三个阶段:建立连接 -> 通信 -> 释放连接
电路交换是独占资源的但不独占物理链路
多路复用
电路交换共享物理链路,这里边用到了多路复用的技术。
多路复用简称复用,是通信技术中的基本概念,从字面意思理解就是,多个数据通信共享一个信道。
首先把资源划分为资源片,将资源片分配给各路呼叫(calls),每路呼叫独占分配到的资源片进行通信,资源片肯可能闲置(idle)(无共享)
典型的多路复用:
频分多路复用(FDM)
时分多路复用(TDM)
波分多路复用(WDM)
码分多路复用(CDM)
频分多路复用FDM是各用户占用信道中不同的频率带宽资源(Hz),用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。
时分多路复用(TDM)是将时间划分为一段段等长的时分复用帧(TDM帧),每个用户在每个TDM帧中占用固定序号的时隙。
每个用户所占用的时隙是周期性出现的(周期就是TDM帧的长度)
时分复用的所有用户是在不同的事件占用相同的频带宽度
**波分多路复用(WDM)**本质还是频分多路复用,只不过是光的频分
**码分多路复用(CDM)**广泛应用于无线链路共享,是挺重要的一种复用技术。
1.每个用户分配一个唯一的mbit码片序列 其中 0 用 -1表示 1用 +1表示,这样是为了更加方便理解。例如(-1-1-1+1+1-1+1+1)
2.各用户使用相同频率载波,利用各自码片序列编码数据来向同一个信道中发送数据
3.对数据进行编码:编码信号 = 原始数据 X 码片序列
· 如发送比特1(+1),则发送自己的码片序列
· 如发送比特0(-1),则发送该码片序列的反码
4.各用户码片序列需要满足相互正交的规则
意思就是,可以通过相互正交规则来解码出码片序列对应的数据
5.对数据进行解码
码分多路复用编/解码举例
单用户下:
多用户下:
报文交换
报文交换就是数据在传输过程中,通过一个整体(文件)从主机端直接转发到目的主机端。
报文就是信息整体,比如一个文件。
分组交换
分组交换就是把报文拆分成一系列相对较小的数据包,然后一个一个发送到目的主机端,然后在目的主机端进行重组
分组交换发送的序列不确定,都是按需共享链路,这种技术叫做统计多路复用。
报文交换和分组交换均采用存储-转发交换方式,不同的地方是报文以完整报文进行存储转发,分组以较小的分组进行存储转发。
报文交换 VS 分组交换
要计算报文交换和分组交换的效率,需要知道传输延迟(传输时延)的概念。
传输时延就是数据从发送主机开始发送到完整发送出去的耗时。
简单来说,就是报文长度/通信链路的带宽得出来的比值
例如:
报文长度 M bits = 7.5 Mbits
链路带宽 R bps = 1.5 Mbps
要经过两个路由器进行存储转发通信
发送主机 -> 路由器1 -> 路由器2 -> 目的主机
报文交换的情况下:
单个端对端发送耗时:s = M/R = 7.5 / 1.5 = 5秒
从发送主机到目的主机总耗时:s * 3 = 15秒
分组交换的情况下:
L = 1500 bits (分组大小)
x = 7.5(Mbits) * 1024(kb) * 1024(byte) / 1500 (bits) ~ 5000 大概估算约等于5000个分组
s = L/R * x = 1500 / 1500000 * 5000 = 5秒
因为分组交换从第一个分组发送的时候后边的分组也在继续发送,所以当第1个分组发送到目的主机时,第3个分组已经离开发送端了,当第4998个分组到目的主机时,最后一个分组已经离开发送端了。所以实际耗时为5秒左右。
可以看出,分组交换的效率是比较高的,而且报文交换下,路由器的缓存能力要大于报文大小,分组交换下路由器的缓存能力只要大于一个分组的大小即可。
分组交换的报文交付时间公式
不难计算
假设有 n 个路由器
报文大小为 M bits
链路带宽为 R bps
分组大小为 L bits
跳步数为 h (跳步数为从发送端到目的端需要经过几个传输过程)
路由器数为 n (路由器数是跳步数 - 1)
我们知道一个分组经过一次交换的时间为 L/R,我们经过 h 个跳步(交换)之后,第一个分组到达目的主机,这个时候耗时为 n*L/R,
第一个分组到达目的主机之后,每隔 L/R 的时间都会有一个分组到达目的主机,当第一个分组到达之后,还有 (M/L - 1)个分组没有到达,
那么经过 L/R * (M/L - 1)时间之后,最后一个分组到达目的主机,即
T = L/R * h + L/R *(M/L - 1)
= L/R * (h - 1 + M/L)
= L/R * (h + M/L)
= nL/R + M/R
分组交换和电路交换的优缺点
分组交换和电路交换都共享链路带宽,但是电路交换会占用带宽资源,而分组交换则不占用带宽资源,一般情况下,分组交换支持的用户数会更多
分组交换在传输大量持续性通信时会产生拥塞,会导致分组延迟甚至丢失。
1.4)计算机网络性能
衡量计算网络的性能要通过几个指标来综合确定。
速率
速率就是数据率或称数据传输速率或比特率。表示单位时间(秒)传输信息(比特)量。
单位:b/s (bps)、kb/s、Mb/s、Gb/s
比特之间转换关系 k=10的三次方 M=10的六次方 G=10的九次方
速率往往是指额定速率或标称速率
带宽
带宽是指数字信道所能传送的最高数据率 单位 b/s(bps)
常用的带宽单位:
- kb/s (10的3次方 b/s)
- Mb/s (10的6次方 b/s)
- Gb/s (10的9次方 b/s)
- Tb/s (10的12次方 b/s)
延迟/时延
延迟是指数据在传输过程中到达速率超出链路容量时或者在路由器中排队时所产生的时间
四种分组延迟
节点处理延迟 d(proc)
在数据到达节点时,对数据进行差错检验,确定下次发送的链路情况所产生的时间。通常可以忽略不记。
排队延迟 d(queue)
没有可用的链路,等待输出链路可用所产生的时间,具有非常强的随机性,取决于路由器的拥塞程度。
传输延迟 d(trans)
数据包从发出到完全发送之间所产生的时间,取决于分组的长度(L)和链路的带宽(R) 可以用公式:dtrans = L/R 计算。
传播延迟 d(prop)
数据包在通信链路中传播的时长,取决于物理链路的长度(d)和信号传播的速度(s)可以用公式:dprop = d/s 计算。
发送一个报文总的耗时 d(nodal) = d(proc) + d(queue) + d(trans) + d(prop)
传输延迟和传播延迟完全不同!
可以理解为高速收费站上,汽车进入收费站办理手续到出收费站的过程为传输延迟,在两个收费站之间行驶的过程为传播延迟。
用流量强度判断排队延迟的耗时程度
R:链路带宽
L:分组长度
a:平均分组到达速率
流量强度 = La/R
- La/R ~ 0 :平均排队延迟很小
- La/R -> 1 :平均排队延迟很大
- La/R > 1 :超出服务的能力,平均排队延迟无限大!
时延带宽积
时延带宽积又称为以比特为单位的链路长度,表示的是传播时延和带宽的乘积。
时延带宽积 = 传播延迟 X 带宽 = dprop X R (bits)
就相当于计算一下某段链路最多能装多少bit数据。
分组丢失(丢包)
丢包的原因一般有几种:
- 队列缓存容量有限
- 分组到达已满队列将被丢弃(即丢包)
- 丢弃分组可能由前序节点或源重发(也可能不重发)
丢包率 = 丢包数 / 已发送分组总数
吞吐量/率 (Throughput)
吞吐量表示在发送端到接收端之间传输数据速率(b/s)
即时吞吐量:给定时刻的速率
平均吞吐量:一段时间的平均速率
瓶颈链路:端到端的路径上,限制端到端吞吐量的链路。
吞吐量一般由最小的一个链路带宽来决定。例如以下internet网络
1.5)计算机网络体系结构
概述
计算机网络体系结构简称网络体系结构。是分层结构。
网络体系结构是从功能上描述计算机网络结构的。
每层都遵循某个/些网络协议完成本层功能。
网络体系结构是计算机网络的各层及其协议的集合。
网络体系结构是一个计算机网络的功能层次及其关系的定义。
网络体系结构是抽象的。
为什么采用分层结构?
结构清晰,有利于识别复杂系统的部件及其关系。
模块化的分层易于系统更新和维护。
有利于标准化。
过度分层会导致效率较低。
分层网络体系结构的基本概念
看分层模型的话我们可以从下向上看。
实体表示任何可发送或几首信息的硬件或者软件进程。
协议是控制两个对等实体进行通信规则的集合,协议是水平的。
任一层实体都需要使用下层来提供服务,遵循本层协议,实现本层功能,向上层提供服务,服务是垂直的。
下层协议的实现对上层的服务用户是透明的。
同系统的相邻层实体通过接口进行交互,通过服务访问点 SAP 交换 原语 指定请求的特定服务。
OSI参考模型
由国际标准化组织(ISO)由1984年提出的分层网络体系结构模型。
目的是支持异构网络系统的互联互通。
是异构网络互联的国际标准。
理解网络通信的最佳学习工具(理论模型)。
7层(功能),每层完成特定的网络功能。
OSI参考模型的通信过程
端-端层 表示的是 应用层、表示层、会话层、传输层。
非端-断层 表示的是 网络层、数据链路层、物理层。
OSI参考模型数据封装与通信过程
数据从发送端的应用层开始传输,
应用层加上应用层的头部信息通过接口传输到表示层,
表示层再加上表示层的头部信息通过接口传输到会话层,
会话层再加上会话层的头部信息通过接口传输到传输层,
传输层再加上传输层的头部信息通过接口传输到网络层,
网络层再加上网络层的头部信息通过接口传输到数据链路层,
数据链路层加上数据链路层的头部信息和尾部信息通过接口传输到物理层,
物理层接收到的就是010101这样的二进制数据,
然后通过物理介质传输到目标端的物理层,
目标端的物理层通过对010101二进制数据解码之后通过接口传输到数据链路层,
…
…
目标端的应用层通过表示层传输的数据,解析出用户信息,展示给用户。
为什么要加头部信息进行数据封装?
增加控制信息 构造协议数据单元(PDU)
控制信息主要包括:
- 地址(Address):标识发送端/接收端
- 差错检测编码(Error-detecting code):用于差错检测或者纠正
- 协议控制(Protocol control):实现协议功能的附加信息,如优先级、服务质量、和安全控制等等信息
端到端层所实现的功能
物理层 说白了就是要实现一个比特一个比特的传输。
- 接口特性:机械特性、电器特性、功能特性、规程特性。表示两个物理设备接口是什么样啊,是用光信号还是电信号之类的…
- 比特编码:要用什么样的方式来表示0和1.
- 数据率:比特传输的时候最大可以传输量是多少啊。
- 比特同步:时钟同步,保证比特传输的时效性。
- 传输模式:单工(Simplex)、半双工(half-duplex)、全双工(full-duplex),例如电视机、对讲机、电话。
数据链路层 的功能就是要保证数据可以正确的传输到另一个设备上。
- 结点-节点数据传输:保证在两个节点上数据能够正确传输。
- 组帧:加头加尾,加地址或者差错信息,能保证数据在路由器间传播的时候,接收端能够正确的把数据切分出来传输到下一层。
- 物理寻址:在帧头中增加发送端和接收端的物理地址标识,能够靠这些地址正确的发送到下一个节点。
- 流量控制:避免淹没接收端。
- 差错控制:检测并重传损坏或丢失帧,避免重复帧。
- 访问(接入)控制:在任一给定时刻决定哪个设备拥有链路(物理介质)控制使用权。
网络层 的功能是为了保证数据能够在多个网络之间传输的时候正确的传输到目的地,达到数据分组的交付。
- 源主机到目的主机:在穿越多个网络的时候,保证数据分组能够成功交付。
- 逻辑寻址:拥有全局唯一的逻辑地址,确保数据分组被送到目的主机,如IP地址。
- 路由:路由器或者网关互联网络,并路由分组至最总目的的主机,对路径的选择规则。
- 分组转发:能正确通过逻辑地址转发到目的主机。 S 要发送到 D,这两个地址在网络中保持唯一不变,02路由先转发到46路由,46路由接收到之后再转发到23,23再到09,09再到29,29在它的网络中找到目的主机D位于79,则把数据包送到79主机上。
非端到端层所实现的功能
传输层 负责源-目的(端到端) (进程间)完整报文的传输。
- 分段与重组:会对报文进行分组和重组。
- SAP寻址:通过端口号找到正确的进程,然后通信。
- 连接控制
- 流量控制
- 差错控制
会话层
- 对话控制:建立、维护。
- 同步:在数据流中插入”同步点“。
- 最 薄 的一层。
表示层 是处理两个系统间交换新的语法与语义的问题。
- 数据表示转化:通过转换成主机独立的编码进行数据的传输。
- 加密/解密
- 压缩/解压缩
应用层 支持用户通过代理(如浏览器)或网络接口 使用网络(服务)。
- 文件传输(FTP)
- 电子邮件(SMTP)
- Web服务(HTTP)
TCP/IP参考模型
5层参考模型
在现今互联网中,普遍用于生产的就是5层参考模型,结合了OSI和TCP/IP的优点所产生的网络模型。
应用层 支持了各种网络应用:例如 FTP\SMTP\HTTP
传输层 支持了进程-进程的数据传输:例如 TCP\UDP 协议
网络层 支持源主机到目的主机的数据分组和转发:例如IP协议、路由协议等
链路层 相邻的网络元素(主机、交换机、路由器等) 的数据传输,例如以太网、802.11(wifi)、PPP等
物理层 支持了比特的传输
5层参考模型的数据封装
1.6)计算机网络与Internet发展历史
1961-1972:早期分组交换原理的提出与应用
1972-1980:网络互联,大量新型、私有网络的涌现
1980-1990:新型网络协议与网络的激增
1983:部署TCP/IP
1990-2000s:商业化,Web,新应用
1992:因特网协会ISOC成立
1990s: Web应用
2005-今:宽带接入,带宽高速增长,在线社交网络,云服务
二、应用层
2.1)概述
网络应用体系结构
- 客户机/服务器
- P2P
- 混合结构
网络应用的服务需求
- 可靠性
- 带宽
- 时延
Internet传输层服务模型
- TCP
- UDP
特定网络应用及协议
- HTTP
- SMTP,POP,IMAP
- DNS
- P2P应用
Socket编程
- TCP
- UDP
2.2)网络应用的基本原理
网络应用的体系结构
客户机/服务器(C/S)结构
- 服务器
- 7*24小时提供服务
- 永久性访问地址/域名
- 利用大量服务器实现可扩展性
- 客户机
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态IP地址
- 不会与其它客户机直接通信
P2P结构
- 没有永远在线的服务器
- 任意端系统/节点之间可以直接通讯
- 节点间歇性接入网络
- 节点可能改变IP地址
- 优点:高度可伸缩
- 缺点:难于管理
混合结构
- 既有中央服务器支持功能
- 又有客户机可以直接与客户机进行通信
网络应用进程通信
进程 :主机上运行的程序。
同一主机运行的进程如何通信: 进程间通信机制,操作系统提供。
不同主机运行的进程间如何通信: 通过消息交换。
进程间通信利用 Socket 发送/接受消息。
不同主机上的进程通过标识符来进行通信。
标识符:IP地址+端口号。
数据的传输要遵循 应用层协议 ,例如一些公开的协议(HTTP,SMTP…),或者使用私有的协议。
应用层协议的内容
消息的类型
- 请求消息
- 响应消息
消息的语法/格式
- 消息中有哪些字段
- 每个字段如何描述
字段的语义
- 字段中信息的含义
规则
- 进程何时发送/响应消息
- 进程如何发送/响应消息
HTTP请求消息的格式
网络应用的需求与传输层服务
数据丢失/可靠性
- 网络电话能容忍一定的数据丢失
- 文件传输要求百分百可靠的数据传输
时间/延迟
- 网络电话/网络游戏要求在低时延的情况下才有体验保障
带宽
- 网络视频只有在带宽达到最低要求时才有体验感
- email对带宽毫无要求,只要能保证数据完整性就行
基于上边的几点,Internet为我们提供了两种传输服务模型
TCP服务
- 面向连接:客户机/服务器进程之间需要建立连接
- 可靠的传输:保证数据不丢包
- 流量控制:发送方不会发送速度过快超过接收方的处理能力
- 拥塞控制:当网络负载过重时能够限制发送发的发送速度
- 不提供时间/延迟保障
- 不提供最小带宽保障
UDP服务
- 无连接
- 不可靠的数据传输
- 不提供一系列的可靠性保障
2.3)Web应用
HTTP协议
Web应用是C/S结构
- 客户端:Browser,请求接收展示Web对象
- 服务器:Web Server,响应客户的请求,发送对象
Http协议使用TCP传输服务
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接
- 服务器接受来自浏览器的TCP连接
- 浏览器与Web服务器交换HTTP消息
- 关闭TCP连接
- Http协议是无状态的,服务器不维护任何有关客户端过去所发请求的信息
Http协议连接的两种类型
- 非持久性连接(1.0)
- 每个TCP连接最多允许传输一个对象
- 持久性连接(1.1)
- 每个TCP连接允许传输多个对象
响应时间分析与建模
**RTT:**从客户端发送一个很小的数据包到服务器并返回所经历的时间
响应时间:
- 发起、建立TCP连接:1个RTT
- 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
- 响应消息中所含文件/对象传输时间
- Total = 2RTT + 文件发送时间
为什么要有持久性连接?
- 非持久性连接每次传输都需要创建并打开一个TCP连接,然后传输完成就关闭掉了,会造成资源浪费以及对服务器压力比较大。
- 持久性连接只需要打开一次TCP连接后续的HTTP消息都可以通过这个连接发送,可以提高资源的利用率,减轻服务器的压力。
HTTP消息的格式
请求消息
- 请求行
- 请求头
- 消息体
响应消息
- 状态行
- 响应头
- 响应体
方法的类型
HTTP1.0
- GET
- POST
- HEAD
HTTP1.1
- PUT
- DELETE
HTTP响应状态码
- 200 OK
- 301 永久重定向
- 400 坏的请求
- 404 没有找到资源
- 500 服务器错误
- 505 不支持协议
- … …
Cookie技术
**概念:**某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据。
组件:
- HTTP响应消息的cookie头部行
- HTTP请求消息的cookie头部行
- 保存在客户端主机上的cookie文件,由浏览器管理
- Web服务器端的后台数据库
原理:
作用:
- 身份认证
- 购物车
- 推荐系统
- Web e-mail
- … …
2.4)Email应用
Email应用的构成
- 邮件客户端
- 邮件服务器
- SMTP协议
邮件客户端:
- 读、写Email消息
- 与服务器交互,收,发Email消息
- 例如Outlook、Foxmail、Thunderbird
- Web客户端
邮件服务器:
- 邮箱:存储发给该用户的Email
- 消息队列:存储等待发送的Email
SMTP协议:
- 邮件服务器之间传递消息使用的协议
- 客户端:发送消息的服务器
- 服务器:接受消息的服务器
SMTP协议
- 使用TCP进行email消息的可靠传输
- 端口号是 25
- 传输过程三阶段
- 握手
- 消息传输
- 关闭
- 命令/响应交互模式
- 命令:ASCII文本
- 响应:状态代码和语句
- Emali消息只能包含7位ASCII码
SMTP交互实例
SMTP与HTTP对比
- HTTP是从服务器端拉取消息
- SMTP是把消息推送到服务器端
- 都是使用命令/响应的交互模式
- 命令和状态码都是ASCII码
- HTTP协议每个对象都封装在独立的响应消息中
- SMTP协议是多个对象在由多个部分构成的消息中发送
Email消息的格式
- 头部行
- To
- From
- Subject
- 消息体
- 消息本身
- 只能是ASCII字符
- MIME:多媒体邮件扩展
- 通过在邮件头部增加额外的行以声明MIME的内容类型
- 可以支持图片、视频等文件的传输
邮件的访问协议
SMTP是邮件的传输协议,要从服务器端接受邮件是需要使用邮件的访问协议
- POP:认证/授权和下载
- IMAP:更多功能,更加复杂,能够操纵服务器上存储的消息
- HTTP:例如163 qqemail可以在web客户端上接收邮件
POP协议的交互过程
POP3是无状态的
IMAP协议
- 所有消息统一保存在一个地方:服务器
- 允许用户利用文件夹组织消息
- IMAP支持跨会话的用户状态
2.5)DNS应用
概述
DNS主要是解决网络上边域名与IP地址映射的问题。
分布式层次式数据库
例如客户端想查找 www.baidu.com的IP
- 客户端查询根域名服务器,找到com域名解析服务器
- 客户端查询com域名解析服务器,找到baidu.com域名解析服务器
- 客户端查询baidu.com域名解析服务器,获得 www.baidu.com的IP地址
DNS根域名服务器
本地域名解析服务器无法解析域名时,会访问根域名服务器
全球由13个根域名服务器
根域名服务器保存了顶级域名服务器的地址
顶级域名解析服务器和权威域名解析服务器
顶级域名服务器负责 com、org、net、edu等顶级域名和国家域名,例如cn、uk、fr等
权威域名服务器负责组织的域名解析服务器,提供组织内部服务器的解析服务
本地域名解析服务器
每个ISP都有一个本地域名服务器。
当主机要进行DNS查询时,查询先被发送到本地域名服务器,然后本地域名服务器做为代理,将查询转发给(层级式)域名解析服务器系统
DNS查询实例
-
迭代查询:本地解析服务器向根域名服务器获取顶级域名服务器地址,然后再向顶级域名服务器获取组织域名服务器,一步一步迭代查询
-
递归查询:本地域名服务器向根域名解析服务器发送查询请求,根域名服务器向顶级域名服务器发送请求,顶级域名服务器向组织域名服务器发送查询,直到查询到结果,然后再一级一级把结果返回过来。
DNS记录缓存和更新
只要本地域名解析服务器获取到域名-IP的映射关系,即缓存这一映射,一段时间过后,缓存失效。
本地解析域名服务器一般会缓存顶级域名服务器的映射,所以根域名服务器不经常被访问。
DNS记录
RR format:(name,value,type,ttl)
根据type类型的不同,记录的内容也不同,ttl一般指记录刷新时间
type:
- A 类型
- Name:主机域名
- Value:IP地址
- NS 类型
- Name:域(edu.cn)
- Value:该权威域名解析服务器的主机域名
- CNAME 类型
- Name:某一真实域名的别名
- Value:真实域名
- MX 类型
- Name:邮件域名服务器
- Value:与Name对应的邮件服务器
DNS协议与消息
DNS协议是 查询 和 回复 ,两者消息格式相同
消息头部:
- Identification:16位查询编号,回复使用相同编号
- flags:查询或回复、期望递归、递归可用、权威回答
如何注册域名
例如注册.com域名
- 向域名管理机构提供你的权威域名解析服务器的名字和IP地址
- 域名管理机构向com顶级域名解析服务器中插入两条记录
- (xxx.com,dns1.xxxx.com,NS)
- (dns1.xxx.com,211.211.211.1,A)
- 在权威域名解析服务器中为www.xxx.com 加入Type A记录
2.6)P2P应用
BitTorrent协议
假设文件被划分为256KB的chunk
每一个客户机都是一个节点,加入torrent中,刚开始没有chunk,但是会逐渐积累,
向tracker注册以获取节点清单,与某些节点建立连接
在下载的同时需要向其它节点上传chunk
一旦节点完整的获取文件,可能离开或者留下
每个节点获取chunk:
在给定任一时刻,不同的节点持有文件的不同chunk集合
节点定期查询每个邻居所持有的chunk列表
节点发送请求获得自己缺失的chunk
发送chunk tit-for-tat:
自身节点向n个邻居发送chunk,评估速率最快的几个,每隔一段时间重新评估
每隔一段时间随机选择一个其它节点,向其发送chunk,动态评估速率最快的节点来建立连接收发chunk
总之,上传越快,下载越快。
流程:
索引技术
在P2P应用中,如何查找到自己需要的节点信息,与其建立连接是一门很重要的技术。
索引:信息到节点位置(IP地址+端口号)的映射。
集中式索引:
- 节点加入时,通知中央服务器,记录自身信息
- 任一节点查找内容时,去中央服务器查找拥有此内容的节点信息
- 与目标节点建立连接,传输信息
集中式索引有单点失效、性能瓶颈、版权问题等缺点
洪范式查询:
- 完全分布式架构,每个节点都参数进来
- 每个节点与节点之间形成一个覆盖网络
- 每个通过TCP连接的节点构成一个边
- 节点查询消息,先发送查询请求到与自身连接的节点
- 与自身连接的节点得到查询消息后,自身如果有,则反向回复结果,如果没有,转发查询消息给与自身连接的节点
- 知道消息命中,然后通过反向路径回复消息
洪范式查询有很大的缺点,会有大量无用的请求在网络中泛滥,有可能造成网络阻塞。
层次式覆盖网络:
- 介于集中式索引和洪范式查询之间的方法
- 每个节点是一个超级节点或者普通节点
- 普通节点和超级节点维持TCP连接
- 超级节点与超级节点之间维持TCP连接
- 超级节点负责跟踪子节点的内容
2.7)Socket编程
Socket编程是在应用层把数据流到传输层之间的提供API接口的一种技术
**应用编程接口:**就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口。
SocketAPI概述
- 面向 BSD UNIX
- 面向TCP/IP协议栈接口
- Internet网络应用最典型的API接口
- C/S模型
- 绝大多数操作系统都支持
- 应用进程间通信的抽象机制
Socket数据结构
- 当应用进程创建Socket时,操作系统分配一个数据结构存储该socket相关信息
- 对外标识通信端点 IP地址+端口号
- 对内通过socket描述符管理socket
使用TCP/IP协议簇的网络应用程序声明端点变量时,使用结构sockaddr_in
Socket API(TCP) 调用基本流程
先看下在网络应用中,socketAPI调用的基本流程
Socket API 函数
在socket通信过程中调用了很多函数,先看下这些函数的解释
WSAStartup和WSACleanup
这两个函数,只在windows socket api中存在
int WSAStartup(WORD wVersionRequested,LPWSADATA IpWSAData)
- 创建socket之前需要先调用 WSAStartup来初始化socket库
- 第一个参数指明程序请求使用的WinSock版本
- 第二个参数返回实际的WinSock的版本信息,是一个指向WSADATA结构的指针
int WSACleanup(void)
- 应用程序在完成对请求的Socket库的使用,最后要调用WSACleanup函数
- 解除与Socket库的绑定
- 释放Socket库所占用的系统资源
创建socket
sd = socket(prorofamily,type,proto);
- 创建一个socket
- 返回操作系统socket描述符(sd)
- 第一个参数(协议簇):TCP/IP默认填写 PF_INET 也支持其它协议栈
- 第二个参数(socket类型):SOCK_STREAM(TCP) SOCK_DGRAM(UDP) SOCK_RAW
- 第三个参数(协议号):默认为0
不同的socket类型对应不同的协议
关闭socket
**int closesocket(SOCKET sd) ** or int close(SOCKET sd)
- 关闭一个描述符为sd的socket
- 如果多个进程共享一个套接字,调用close函数会将套接字引用计数减1,减至0才关闭
- 一个进程中的多线程对一个套接字使用无计数,任一线程调用close都会导致其它线程不能访问该套接字
- 返回值:0:成功,SOCKET_ERROR:失败
socket绑定参数
int bind(sd,localaddr,addrlen);
- 绑定套接字的本地端点地址,IP地址+端口号
- 第一个参数是套接字描述符(sd)
- 第二参数是端点地址,结构为sockaddr_in
- 客户端程序一般不必调用bind函数,操作系统会自动帮助设置地址
- 服务器端要用地址通配符:INADDR_ANY 来绑定socket,这样可以避免多个网卡不能同时通信的问题。
服务器监听socket事件
int listen(sd,queuesize);
- 仅限服务端调用,仅面向连接的流套接字
- 第二个参数设置连接请求队列的大小
- 返回值 0:成功,SOCKET_ERROR:失败
发起socket连接
connect(sd,saddr,saddrlen);
- 客户端程序调用connect函数使客户端套接字(sd)与特定计算机的特定端口(saddr)的套接字进行连接
- 仅限于客户端调用
- 可用于TCP客户端也可以用于UDP客户端
- TCP:建立TCP连接
- UDP:之地哦那个服务器端点地址,因为UDP是无连接的。
克隆主监听socket来进行通信
newsocket = accept(sd,caddr,caddrlen);
- 服务程序调用accept函数从处于监听状态的主socket的客户端连接请求队列中取出排在最前边的一个客户请求,克隆一个新的套接字来与客户端套接字创建连接通道
- 仅用于TCP套接字,仅用于服务器调用
- 利用新创建的套接字与客户通信
发送消息
*send(sd, buf , len ,flags);
*sendto(sd, buf,len,flags,destaddr,addrlen);
- send函数适用于已经建立连接的(客户或服务器) TCP套接字,或者是调用了connect函数的UDP套接字发送消息使用
- sendto函数适用于UDP服务器端套接字与 未调用connect函数的UDP客户都安套接字
接收消息
*recv(sd,buffer,len,flags);
*recvfrom(sd,buffer,len,flags,senderaddr,saddrlen);
- recv函数适用于 从TCP连接的另一端接收数据,或者从调用了connect函数的UDP客户端套接字接收服务器发来的数据
- recvfrom函数适用于从UDP服务器端套接字与未调用conncet函数的UDP客户端套接字接收对端数据
获取或设置套接字的属性
关于网络字节顺序
TCP/IP定义了标准的用于协议头中的二进制整数表示:网络字节顺序
某些socket api函数的参数需要存储为网络字节顺序 例如 IP地址,端口号等
可以实现本地字节顺序与网络字节顺序间转换的函数
客户端软件设计
解析服务器IP地址
- inet_addr函数:实现点分十进制IP地址到32位IP地址转换
- gethostbyname函数:实现域名到32位IP地址转换
解析服务器端口号
- getservbyname函数:将服务名转为熟知的端口号
解析协议号
- getprotobyname函数:实现协议名到协议号的转换
客户端软件流程
- 确定服务器IP地址与端口号
- 创建套接字
- 分配本地端点地址(IP地址+端口号) 一般操作系统会帮我们完成这一步
- TCP:连接服务器(套接字)| UDP:指定服务器端点地址,构造UDO数据报
- 遵循应用层协议进行通信
- 关闭/释放连接
服务器软件设计
循环无连接服务器基本流程
- 创建套接字
- 绑定端点地址(INADDR_ANY+端口号)
- 反复接受来自客户端的请求
- 遵循应用层协议,构造响应报文,发送给客户
循环无连接服务器数据发送
服务器端不能使用 connect() 函数
无连接服务器使用 sendto() 函数发送数据报
调用 recvfrom() 函数接收数据时,自动提取
循环面向连接服务器基本流程
- 创建(主)套接字,并绑定熟知端口号
- 设置(主)套接字为被动监听模式,准备用于服务器
- 调用accept() 函数接收下一个连接请求(通过主套接字),创建新套接字用于与该客户端建立连接
- 遵循应用层协议,反复接受客户请求,构造并发送响应(通过新套接字)
- 完成为特定客户端服务后,关闭与该客户端之间的连接,返回步骤3
并发无连接服务器基本流程
- 主线程:创建套接字,并绑定熟知端口号
- 主线程:反复调用 recvfrom() 函数,接收下一个客户请求,并创建新线程处理该客户端响应
- 子线程:接收一个特定请求
- 子线程:依据应用层协议构造响应报文,并调用 sendto() 发送
- 子线程:退出(一个子线程处理一个请求后即终止)
并发面向连接服务器基本流程
- 主线程:创建(主)套接字,并绑定熟知端口号
- 主线程:设置(主)套接字为被动监听模式,准备用于服务器
- 主线程:反复调用 accept() 函数接收下一个 连接请求 (通过主套接字)并创建一个新的子线程处理该客户端响应
- 子线程:接收一个客户端的 服务请求(通过新创建的套接字)
- 子线程:遵循应用层协议与特定客户进行交互
- 子线程:关闭/释放连接并退出(线程终止)
三、传输层
3.1)概述
- 传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制
- 端系统运行传输层协议,发送方向下传递报文给网络层,接收方将报文组装上交给应用层
- 传输层可以为应用提供多种协议,例如TCP和UDP
传输层是提供应用进程 之间的逻辑通信机制
网络层是提供主机之间的逻辑通信机制
传输层位于网络层之上,依赖于网络层服务,对网络层服务进行增强
Internet传输层协议
TCP
- 可靠、按序的交付服务
- 拥塞控制
- 流量控制
- 连接建立
UDP
- 不可靠的交付服务,尽力而为
两种服务均不保证 延迟、带宽
3.2)多路复用/分用
接收端进行多路分用
传输层依据头部信息将接收到的Segment交给正确的Socket,即不同的进程
发送端进行多路复用
从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层
分用如何工作?
发送端:主机从网络层接收到IP数据报(datagram)之后,再添加一个传输层的信息形成段(Segment),每个段携带原端口号和目的端口号
接收端:主机收到Segment之后,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket
无连接分用
- 利用端口号创建Socket
- UDP的Socket用二元组标识(目的IP地址,目的端口号)
- 主机收到UDP段之后,检查目的端口号,将UDP段导向绑定在该端口号的Socket
- 来自不同源IP地址和/或原端口号的IP数据包会被导向同一个Socket
面向连接的分用
- TCP的Socket用四元组标识(源IP,目的IP,源端口,目的端口)
- 接收端利于四个值将段导向合适的Socket
- 服务器可同时支持多个TCP Socket
- Web服务器为每个客户端开不同的Socket
3.3)UDP协议
概述
- UDP协议是基于IP协议,拥有复用/分用和简单的错误校验
- UDP段可能丢失,非按序到达
- UDP是无连接的,发送发和接收方不需要握手,每个UDP段的处理独立于其它段
UDP的好处
- 无需建立连接(减少延迟)
- 实现简单:无需维护连接状态
- 头部开销小
- 没有拥塞控制:应用可以更好的控制发送时间和速率
UDP常用于流媒体应用,DNS,SNMP,可以在应用层增加可靠性机制和错误恢复机制来实现UDP可靠数据传输
UDP的协议结构
UDP的校验和
目的是为了检测UDP段在传输过程中是否发生了错误(如位翻转)
流程如下
- 发送方将段的内容视为16比特位的整数
- 进行校验和的计算:计算所有整数的和,进位加在和的后面,将得到的值按位取反,得到校验和
- 发送方将校验和放入校验和字段
- 接收方计算收到段的校验和
- 将其与校验和字段进行对比得出结果
- 注意:不相等的时候一定是检测出了错误,但是相等的时候只是没有检测出错误,不代表没有错误
校验和的计算实例
3.4)可靠数据传输的原理
什么是可靠?
数据在传输过程中 不发生错误、不丢失、不乱序 就叫可靠
可靠数据传输协议(rdt)基本结构:接口
- rdt_send():被上层应用调用,将数据交给rdt以发送给对方
- udt_send():被rdt调用,在不可靠信道上向接收方传输数据
- rdt_rcv():当数据包到达接收方信道时被调用
- deliver_data():被rdt调用,向上层应用交付数据
利用状态机(FSM)刻画传输协议
圆圈代表事件、箭头代表流向、横线上边代表触发事件的原因、横线下边代表触发之后的动作
Rdt 1.0:可靠信道上的可靠数据传输
前提:底层信道完全可靠,不会发生错误(bit error),不会丢弃分组
发送方和接收方FSM独立
发送方:上层应用调用rdt_send,把数据报传输进来,通过组装pkg,调用底层可靠信道,udt_send发送数据,然后重新等待被调用
接收方:等待可靠信道传输数据,接收到pag,解析出数据报,向上层应用交付数据,继续等待信道接收数据
Rdt 2.0:在产生位错误的信息进行可靠数据传输
前提
- 底层信道可能出现翻转分组中的位(bit)
- 利用校验和 检测位错误
- 如何从错误中恢复?
- 确认机制(ACK) 接收方显示告知发送方分组已正确接收
- NAK:接收方显示告知发送方分组有错误
- 重传:发送发接收到NAK后,重传分组
基于这种重传机制的rdt协议成为 ARQ协议
Rdt 2.0 中引入新机制
- 差错检验
- ACK/NAK
- 分组重传
2.0的FSM
发送方
- 接收到rdt_send调用
- 组装pkt加入校验和
- 调用udt_send发送pkt
- 等待接收方返回结果
- 接收到ACK,重新等待调用rdt_send
- 接收到NAK,重新发送分组等待结果
接收方
- 等待数据到达信道
- 收到数据发现有错误,回应NAK,继续等待数据到达信道
- 接到数据是正确的,解析数据,发送给应用层,响应ACK,继续等待数据到达信道
Rdt 2.1 对应ACK/NAK破坏
ACK或者NAK在传输过程中,可能会被破坏,不能简单的加校验和和重传分组,会导致消息重复等问题,所以我们引入 序列号 的概念来防止ACK/NAK破坏的情况。
发送方的FSM
- 发送方携带消息序列号 0 发送到udt信道,等待 ACK/NAK 回复
- 如果接收到 ACK,则继续等待被调用,准备发送 1 号 消息
- 如果接收到 NAK,则重发 0 号分组信息,继续等待ACK/NAK回复
- 之后循环 0 和 1 消息发送
接收方的FSM
- 接收到消息,没有出错,并且是0号消息,就返回ACK和校验和,向上层发送数据,继续等待接收1号消息
- 接收到消息,消息发生位错误,就返回NAK,继续等待0号消息
- 接收到消息,消息没有错误,但是接收到的是1号消息,就返回ACK和校验和,继续等待接收 0 号消息
- 1号消息与上边一样,之后循环 0 和 1
Rdt 2.2 无NAK消息协议
在2.1中引入了序列号之后,使得系统状态发生了翻倍,变得比较复杂,我们在2.2中去掉NAK,只使用ACK,
在接收方通过ACK告知最后一个被正确接收的分组
在ACK消息中显式地加入被确认分组的序列号
发送方收到重复ACK之后,采取与收到NAK消息相同的动作,重传当前分组
发送方FSM
- 发送0号消息,等待0号ACK
- 接收到消息没有出错,但是ACK是1号,则重发分组
- 接收到消息没有出错,而且ACK是0号,则发送1号分组,等待1号ACK
- 重复上述
接收方FSM
- 等待0号消息到达,消息没有出错,但是序列号是1,返回1号ACK
- 等待0号消息道道,消息没有出错,序列号也是0,则返回0号ACK
- 等待1号消息到达。重复上述
Rdt 3.0 在丢失消息的信道传输
消息除了出错,还有可能丢失,这个时候我们需要一个定时器
发送方发送完消息等待合理 的时间
如果没有收到ACK,重传
如果分组或ACK只是延迟而不是丢了,重传会产生重复,序列号机制可以处理
发送方FSM
3.0的FSM有点复杂了起来,直接看消息实例吧
- 发送方发送消息,等待ACK,开启定时器
- 定时器超过指定时间,重新发送分组消息
- 接收方也如此,接收方发送ACK之后丢失,发送方长时间没有收到ACK,则重发分组
- 接收方收到重复分组,利用序列号对其进行处理,然后发送ACK
Rdt 3.0 效率
可以看出,Rdt 3.0效率非常差,事件都浪费在了停-等协议上边
3.5)滑动窗口协议
Rdt 3.0 虽然解决了数据的可靠传输问题,但是效率非常低,主要的耗时在停等协议上,那么我们可以用流水线机制来解决这个问题。
如上述图示,发送一个分组之后,不需要等待ACK回复,可以直接发送下一个分组。
流水线协议
允许发送方在收到ACK之前连续发送多个分组,需要更大的序列号范围 发送方和接收方需要更大的存储空间来缓存分组
滑动窗口协议概述
窗口:允许使用的序列号范围、窗口尺寸为N:最多有N个等待确认的消息
滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动
代表协议:GBN、SR
Go-Back-N(GBN) 协议
发送方
- 分组头部包含 k-bit 序列号
- 窗口尺寸为N
- ACK(n) 确认到序列号n的分组均已被正确接收
- 为空中的分组设置计时器
- 超时Timeout(n)事件:重传序列号大于等于n,还未收到ACK的所有分组
接收方
- ACK机制:发送拥有最高序列号的、已被正确接收的分组的ACK
- 乱序到达的分组直接丢弃,重新确认序列号最大的、按序到达的分组
GBN示例
- 窗口N为4,发送0 1 2 3 号分组之后等待
- 接收到 0 1 分组,回复确认 0 1 ACK
- 2 号分组发送方丢失
- 接收到3 号分组,丢弃3 号分组(因为期待的是2号分组),回复 已确认最大的 1 号分组
- 发送方陆续收到 0 1 号分组的确认ACK,窗口动态向前滑动,发送出 4 5 号分组
- 接收方 收到 4 5 号分组,还是丢弃,因为期待2号分组,回复已确认最大的 1 号分组
- 发送方 2 号分组迟迟没有收到ACK,触发超时,重发 2 3 4 5 号分组
- 接收方收到 2 号分组,陆续回复相应ACK
Selective Repeat(SR) 协议
GBN 重发很多无效的分组,会导致资源的浪费
- SR协议的接收方对每个分组单独进行确认 ,设置缓存机制 ,缓存乱序到达的分组
- 发送方只重传那些没收到ACK的分组,对每个分组设置定时器
- 发送方窗口 N 个连续的序列号,限制已发送且未确认的分组
发送方/接收方窗口
SR协议示例
- 发送方窗口N设置为4,发送 0 1 2 3 号分组,进入等待
- 发送方 2 号分组,发送的时候丢失了
- 接收方 收到 0 1 号分组,回复 0 1 ACK,动态滑动接收方窗口
- 接收方 收到 3 号分组(乱序到达),缓存 3 号分组,回复 3 号 ACK
- 发送方 得到 0 1 号 分组的ACK,动态滑动发送方窗口,发送 4 5 号分组
- 发送方触发 2 号分组超时事件,重发 2 号分组,窗口静止
- 接收方 得到 4 5 号分组,这个时候还没收到2 号,所以还是 缓存 4 5 号分组,回复ACK
- 接收方 得到 2 号分组,2 3 4 5 一起发送给上层服务,返回 2 号 ACK
- 发送方 收到 2 号分组ACK,滑动窗口到 6号分组,发送 6 7 8 9 号分组
SR协议的劣势
如上图,假如 序列号可供使用的范围比较小,是 0 1 2 3
窗口设置为 3 ,那么在滑动的过程中,可能会出现一些问题
- 发出 0 1 2 分组
- 接收 0 1 2 ,滑动窗口到 下一个 3 0 1 ,响应 ACK 全部丢失了
- 发送方超时,重传 0 1 2
- 那么这个时候,接收方 接收到 0 1 分组的时候,势必会将 重传的当成第二轮的数据发送给上层服务
这样就会导致数据的错乱。
SR协议 设置窗口大小 和 序列号范围需要遵循一定的规则
发送方的窗口大小 加上 接收方的窗口大小 要小于 序列号的范围
3.6)面向连接传输协议-TCP
概述
- 点对点传输
- 可靠、按序传输
- 流水线机制,有拥塞控制和流量控制
- 发送方/接收方缓存分组
- 全双工通信
- 面向连接
TCP段结构
TCP中的序列号和ACK
tcp中的序列号和ACK与之前的GBN和 SR有部分不同
- 序列号
- 序列号指的是segment中的第一个字节的编号,而不是segment的编号
- 建立TCP连接时,双方随机选择序列号
- ACKs
- ACK返回的数字是希望接收到的下一个字节的序列号
- 累计确认机制:该序列号之前的所有字节均被正确接收到
TCP RTT 和超时
分组重传需要设置超时时间,那么如何合理设置这个时间是个问题
EstimatedRTT
tcp通过多次测量从段发出到收到ACK的时间求出平均值,形成了RTT的估计值
测量过程中忽略重传
超时时间设置
在EstimatedRTT稳定的时候,通过增加安全边界来确定一个超时时间
当EstimatedRTT变化比较大的时候,通过测量RTT的变化值来确定一个超时时间
TCP发送方事件
- 从应用层收到数据之后创建Segment
- Segment的序列号是第一个字节的编号
- 然后开启计时器 设置超时时间
- 超时的话就重传Segment,然后重启定时器
- 如果接收到此前未确认的Segment,就更新SendBase,如果窗口中还有未被确认的分组就重启定时器
TCP发送端程序
- 初始化seqNum和sendBase
- 接收到应用层数据,创建segment,启动计时器,更新seqNum
- 触发计时器超时事件,重传最小确认的序列号之后的分组,重新启动计时器
- 如果接收到ACK并且不是乱序的,那就更新sendBase到当前的ack序列号,如果当前窗口还有没有被确认的ack,则重启计时器
TCP重传示例
-
A发送段
-
B响应ACK 丢失
-
A超时,重发段
-
B响应ACK
-
A发送段
-
A超时,重发段
-
A在继续等待的时候,接收到了上次发送段的ACK
-
A更新sendBase到最后接收的ACK
快速重传
在tcp实现中,重传丢失的分组之前需要等待很长时间,可以通过重复ACK检测分组丢失,如果Sender收到同一数据的3个ACK,则假定该数据之后的段已经丢失了,就快速重传
- 等待ACK事件,当前ACK序列号大于当前窗口
- 更新窗口为ACK序列号,并开启计时器
- 如果当前ACK序列号小于当前窗口则开始计数,如果已经连续收到3次这个ACK的序列号,则重发最后一次确认之后的分组
TCP流量控制
接收者会通过在 Segment的头部字段将 RcvWindow 告诉发送方
发送方接收到消息之后,会限制自己已经发送但还未收到ACK的数据不超过接收方的空闲 RcvWindow 尺寸
当接收方告知我这里没有空间可以缓存的时候,发送方仍然可以发送极小的数据报,通过响应来得知接收方的可用空间
TCP连接管理
- 发送方和接收方都需要提前建立连接
- 建立连接前会提前初始化TCP变量,例如seq和buffer、流控等信息
- Client new socket发起连接
- Server 调用accept函数等待连接
三次握手
- 客户端发起SYN位为1的段 (无数据)
- 服务器收到之后回复SYN位为1的 ACK (无数据)
- 客户端收到之后,回复SYN位为0的ACK (可以携带数据)
- 连接建立
四次挥手
- 客户端发起FIN段
- 服务器收到之后回复ACK,关闭连接,发送FIN
- 客户端收到FIN,回复ACK,然后进入等待(30s之后断开连接) ,如果这个时候又收到FIN的话,会重复发送ACK
- 服务端收到ACK,关闭连接
TCP连接生命周期
3.7)拥塞控制原理
拥塞 非正式定义:主机发送了太多的数据或者发送速度太快,以至于网络无法处理
具体表现:分组丢失(路由器缓存溢出)、分组延迟过大(在路由器缓存排队)
拥塞控制的方法
- 端到端拥塞控制
- 网络层不需要显式的提供支持
- 端系统通过观察 loss,delay 等网络行为判断是否发生拥塞
- TCP采用这种方法
- 网络辅助的拥塞控制
- 路由器向发送方显式地反馈网络拥塞信息
- 简单的拥塞指示:SNA、DECbit、TCP/IP ECN、ATM
- 指示发送方应该采用何种速率
3.8)TCP拥塞控制
基本原理
- Sender限制发送的速率 LastByteSent - LastByteAcked <= CongWin
- CongWin:动态调整以改变发送速率、反应所感知到的网络拥塞
- 如何感知网络拥塞:Loss事件=timeout或3个重复ACK 发生loss事件后,发送方降低速率
- 如何合理地调整发送速率:加性增-乘性减:AIMD 、慢启动:SS
加性增-乘性减 AIMD
原理: 逐渐增加发送速率,谨慎探测可用带宽,直到发生Loss事件
方法: AIMD
Additive Increase:每个RTT将CongWin增大一个MSS --拥塞避免
Muliplicative Decrease:发生loss后将CongWin减半
慢启动:SS
TCP连接建立时,CongWin=1
可用带宽可能远远高于初始速率,希望能够快速增长
指数级增长:每个RTT将CongWin翻倍,收到每个ACK进行操作
简单算法:
算法中的Threshold变量
Threshold变量定义为 发生Loss事件时,CongWin的值的1/2
当CongWin的值大于Threshold时就将指数增长切换为线性增长
发生Loss事件的处理
- 收到3个重复ACK时
- 将CongWin切到一半
- 然后线性增长
- 发生TimeOut事件时
- CongWin直接设置为1个MSS
- 然后指数增长
- 达到threshold后,再线性增长
TCP拥塞控制算法
四、网络层
4.1)网络层服务
- 从发送主机向接收主机传输数据段(segment)
- 发送主机:将数据段封装到数据报(datagram)中
- 接收主机:向传输层交付数据段(segment)
- 每个主机和路由器都运行网络层协议
- 路由器校验所有穿过它的IP数据报的头部域来决策如何处理IP数据报
网络层核心功能 路由、转发
转发: 将分组从路由器的输入端口转移到合适的输出端口
路由: 确定分组从源到目的经过的路径
通过路由算法确定端到端的路径,通过转发表确定再本路由器中如何转发分组
网络层核心功能 连接建立
- 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接
- 网络层连接:两个主机之间,传输层连接:两个应用进程之间
网络层服务模型
- 无连接服务
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径
- 不同分组可能传输路径不同
- 数据报网络
- 连接服务
- 首先为系列分组的传输确定从源到目的经过的路径(建立连接)
- 然后沿该路径传输系列分组
- 系列分组传输路径相同
- 传输结束后拆除连接
- 虚电路网络
4.2)虚电路网络和数据报网络
虚电路网络
虚电路: 一条从源主机到目的主机,类似于电路的路径(逻辑连接)
- 分组交换
- 每个分组的传输利用链路的全部带宽
- 源到目的的路径经过的网络层设备共同完成虚电路功能
通信过程: 呼叫建立 --》数据传输 --》拆除呼叫
VCID: 每个分组携带虚电路标识(VCID),而不是目的主机地址
维护状态: 虚电路经过的每个网络设备,维护每条经过它的虚电路连接状态
资源: 链路、网络设备资源(带宽、缓存等)可以面向VC进行预分配
虚电路的具体实现
每条虚电路包括:
- 从源主机到目的主机的一条路径
- 虚电路号(VCID),沿路每段链路一个编号
- 沿路每个网络层设备(路由器),携带对应虚电路的VCID,而不是目的地址
- 同一条VC,在每段链路上的VCID通常不同
VC转发表
VC路径上每个路由器都需要维护VC连接的状态信息
虚电路信令协议
- 用于VC的建立、维护和拆除
- 应用于虚电路网络 如ATM、帧中继网络等
- 目前的Internet不采用
数据报网络
介绍
- 网络层无连接
- 每个分组携带目的地址
- 路由器根据分组的目的地址转发分组
- 基于路由协议/算法构建转发表
- 检索转发表
- 每个分组独立选路
数据报转发表
最长前缀匹配优先
在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口
数据报网络 vs 虚电路网络
数据报网络(Internet)
- 计算机之间的数据交换没有严格的事件要求,弹性服务
- 链路类型众多,特点、性能各异、统一服务困难
- 智能端系统,可以自适应、性能控制、差错恢复
- 简化网络,复杂边缘
虚电路网络(ATM)
- 电话网络演化而来
- 核心业务是实时对话,严格的时间、可靠性要求、需要有保障的服务
- 非智能端系统
- 简化边缘,复杂网络
4.3)IPv4协议
##IP数据报
- 版本号
- 表示IP协议的版本号,占4位
- 例如:4 --> IPv4 6 --> IPv6
- 首部长度
- 表示IP分组首部长度,占4位
- 以4字节位单位,例如 5 --> IP首部长度位20(5X4)字节
- 服务类型(TOS)
- 指期望获取哪种类型的服务,占8位
- 一般情况下不用,通常都是0
- 总长度
- 表示IP分组的总字节数(首部+数据),占16位
- 最大IP分组的总长度:65535B
- 最小的IP分组首部:20B
- IP分组可以封装的最大数据:65535-20=65515B
- 生存时间
- 指IP分组在网络中可以通过的路由器数(或跳步数),占8位
- 路由器转发一次分组,TTL减1
- 如果TTL=0,路由器则丢弃该IP分组
- 协议
- 指IP分组封装的哪个协议的数据包,占8位
- 6 为TCP,17为UDP
- 首部校验和
- 实现对IP分组首部的差错检验,占16位
- 计算校验和时,该字段置为全0
- 采用反码算术运算求和,和的反码作为首部校验和字段
- 逐跳计算、逐跳校验
- 源IP、目的IP地址
- 分别表示了发送分组的源主机/路由器和接收分组的目的主机/路由器的IP地址,占32位
- 选项字段
- 占用长度可变,范围在1~40B之间
- 携带安全、源选路径、时间戳和路由记录等内容
- 实际上很少被使用
- 填充字段
- 占用长度可变,范围在0~3B之间
- 目的时补齐整个首部,符合32位对齐,保证首部长度时4字节的倍数
IP分片
MTU: 最大传输单元,链路层数据帧可封装数据的上限,不同链路的MTU不同
IP分片与重组
- 分片
- 1个IP分组可以分为多片IP分组
- IP首部的相关字段用于标识分片以及确定分片的相对顺序
- 重组
- IP分片到达目的主机后进行重组
IP分组中头部字段的含义
- 标识
- 标识一个IP分组,占16位
- IP协议利用一个计数器,每产生一个IP分组计数器加1作为该IP分组的标识
- 标志位
- 标志这个分组是否允许分片和是否最后一个分片,占3位
- DF = 1 : 禁止分片,DF = 0:允许分片
- MF = 1: 非最后一片,MF = 0: 最后一片(或未分片)
- 片偏移
- 一个IP分组分片封装原IP分组数据的相对偏移量,占13位
- 第一个分片,片偏移量一定为0
- 片偏移字段是以 8字节 为单位
IP分片的过程
- 假设原IP分组总长度为 L ,待转发链路的MTU 为 M
- 若 L > M,且 DF = 0,则可以/需要分片
- 分片时每个分片的标识复制原IP分组的标识
- 通常分片时,除最后一个分片,其它分片均分为MTU允许的最大分片
- 一个最大分片课封装的数据应该是8的倍数,因此一个最大分片可封装的数据为:
- 需要计算出分片的总片数:
- 每片的片偏移字段取值为:
- 每片的总长度字段为:
- 每片的MF标志位为:
例题
IP编址
IP分组
- 源地址SA 从哪来
- 目的地址DA 到哪去
接口
- 主机/路由器与物理链路的连接
- 实现网络层功能
- 路由器通常有多个接口
- 主机通常只有一个或者两个 例如有线的以太网 和 无线的 802.11接口
IPv4地址的划分
使用32位比特 来标识主机、路由器的IP地址,与每个接口相关联
IP地址划分为两部分
- 第一部分:网络号-取高位比特
- 第二部分:主机号-取低位比特
IP子网
- IP地址具有相同网络号的设备接口
- 不跨越路由器可以彼此物理联通的接口
IP编址规则
- A类地址
- 取高8位来标识网络号,剩下24位标识主机号
- 固定第一位为0
- 范围 0.0.0.0 ~ 127.255.255.255
- 占比 50%
- B类地址
- 取高16位来标识网络号,剩下16位标识主机号
- 固定前2位为10
- 范围 128.0.0.0 ~ 191.255.255.255
- 占比 25%
- C类地址
- 取高24位来标识网络号,剩下8位标识主机号
- 固定前3位为110
- 范围 192.0.0.0 ~ 223.255.255.255
- 占比 12.5%
- D类地址
- 固定开始位1110
- 范围 224.0.0.0 ~ 239.255.255.255
- 占比 6.25%
- E类地址
- 固定开始位1111
- 范围 240.0.0.0 ~ 255.255.255.255
- 占比 6.25%
特殊的IP地址
私有的IP地址
IP子网划分与子网掩码
IP子网:区分一个更小的网络
子网划分
原来IP地址中分为 网络号 和 主机号,在子网划分中 新增一个 子网号
- 网络号:高位比特
- 子网号:原网络主机号部分比特
- 主机号:低位比特
如果取两位来做子网号的话,可以区分出四个子网
子网掩码
子网掩码和IP一样,但是取值规则则不同
网络号,子网号全取 1
主机号全取 0
子网划分
子网 包含一个IP 和 子网掩码
划分的时候,根据个数来取占用主机号的前n位
然后通过子网号+主机号来确定每个子网的IP取值范围
子网掩码的应用
将IP分组的目的IP地址与子网掩码按位与运算,即可提取子网地址
4.4) CIDR 与路由聚合
CIDR:无类域间路由
- 消除传统的A类、B类、和C类地址界限
- NetID + SubID --> Network Prefix(prefix) 可以任意长度
- 融合子网地址与子网掩码,方便子网划分
- 无类地址格式:a.b.c.d/x,其中x为前缀长度
- 例如 11001000 00010111 00010000 00000000 --> 200.23.16.0/23
- 子网:201.2.3.64,255.255.255.192–> 201.2.3.64/26
- 提高IPv4地址空间分配效率
- 提高路由效率
路由聚合
4.5)DHCP协议
DHCP:动态主机配置协议
- 从服务器动态获取 IP地址、子网掩码、默认网关地址、DNS服务器名称和IP地址
- 即插即用
- 允许地址重用
- 支持在用地址续租
- 支持移动用户加入网络
DHCP流程
- 主机广播 DHCP discover 发现报文
- DHCP服务器利用 DHCP offer 提供报文进行响应
- 主机请求IP地址 DHCP request 请求报文
- DHCP 服务器分配IP地址 DHCP ack确认报文
DHCP工作过程示例
DHCP协议在应用层实现
- 请求报文封装到UDP数据报中
- IP广播
- 链路层广播
DHCP服务器构造ACK报文
包括分配给客户的IP地址、子网掩码、默认网关、DNS服务器地址
4.6) NAT 网络地址转换
背景:当子网IP地址不够用时,可以通过中间设备(路由器) 对外公网提供一个公网IP,内部私有IP通过通过公网IP转发通信
动机
- 在只能从ISP中申请一个公网IP时
- 本地网络设备IP地址的变更,无需通告外界网络
- 变更ISP时,无需修改内部网络设备IP地址
- 内部网络设备对外部网络不可见,即不可直接寻址(安全)
实现原理
- 替换
- 利用NAT IP地址,新端口号 替换每个外出IP数据报的 源IP地址,源端口号
- 记录
- 将每对 NAT IP地址,新端口号 与 源IP地址,源端口号 的替换信息存储到 NAT转换表 中
- 替换
- 根据NAT转换表,利用 源IP地址,源端口号 替换每个 进入 内网IP数据报的 目的IP地址,目的端口号
具体可以看下图
- 内部主机10.0.0.1 向 公网 128.119.40.186 端口 80 发送数据报
- 经过NAT路由器,替换内网IP和端口为 138.76.29.7:5001 --> 10.0.0.1:3345,向外网通信
- 实际通信对象为 138.76.29.7:5001 --> 128.119.40.186:80
- 收到数据报的目的地址 138.76.29.7:5001 ,去NAT转换表中 找到对应的内网IP 10.0.0.1:3345 转发通信
- 实际通信对象为 128.119.40.186:80 --> 10.0.0.1:3345
NAT的一些争议
NAT地址映射,可以同时支持 60000多个并行连接
路由器应该只处理第三层功能
违背了端到端通信原则
地址短缺的问题应该由IPv6来解决
NAT穿透问题
背景:客户期望直接连接内网地址为 10.0.0.1的服务器,由于不能直接访问内网,所以对外唯一可见的地是NAT地址:138.76.29.7
解决方案:
- 静态配置NAT,将特定端口的连接请求转发到服务器,例如 138.76.29.7:2500 --> 10.0.0.1:25000
- 利用UPnP 互联网网关设备协议 IGD,自动配置,学习到NAT公共IP地址 138.76.29.7,可以动态在NAT转发表中增删端口映射
- 利用中继服务器,NAT内部的客户与中继服务器建立连接,外部客户也与中继服务器建立连接,中继服务器桥接两个连接的分组
4.7)ICMP 互联网控制报文协议
两类ICMP报文:
- 差错报告报文
- 目的不可达
- 源抑制
- 超时/超期
- 参数问题
- 重定向
- 网络探询报文
- 回声请求与应答报文
- 时间戳请求与应答报文
ICMP报文类型
ICMP报文格式
4.8)IPv6协议
背景:32位IPv4地址空间已被分配殆尽,v6可以更快速处理/转发数据报,还支持QoS
IPv6数据报格式
- 固定长度的40字节基本首部
- 不允许分片
- 优先级:标识数据报的优先级
- 流标签:标识同一流中的数据报
- 下一个首部:标识下一个选项首部或上层协议首部 如 TCP首部
与v4的不同
- 校验和被彻底移除,以减少每跳处理事件
- 选项:允许,但是从基本首部移除,定义多个选项首部,通过 下一个首部 字段指示
- ICMPv6:新版ICMP 附加报文类型,多播组管理功能
IPv6地址表示形式
- 一般形式:1080:0:FF:0:8:800:200C:417A 是8段16位的16进制表示
- 压缩形式:FF01:0:0:0:0:0:0:0:0:43 --> FF01::43 可以通过 :: 压缩连续地址为0的部分
- IPv4嵌入形式:0:0:0:0:0:FFFF:13.1.68.3 可以固定前6位v6地址,后32位还以v4形式编写
- 地址前缀:2002:43c:476b::/48 v6不再使用掩码
- URLs:http://[1080:0:FF:0:8:800:200C:417A]:8000 使用中括号把v6地址括起来
IPv6基本地址类型
- 单播:一对一通信
- 多播:一堆多通信
- 任意播:一对 一组中的一个
IPv4向IPv6过渡
使用隧道技术,将IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络
4.9)路由算法
概念: 路由算法确定去往目的网络的最佳路径,通过转发表确定在本路由器中如何转发分组
网络抽象:图
图:G = (N,E)
N:路由器集合 = {u,v,w,x,y,z}
E:链路集合 =
图抽象:费用(Costs)
c(X,Y) = 链路(X,Y)的费用,例如 链路 c(W,Z) = 5
每段链路的费用可以总是1,或者是带宽的倒数、拥塞程度等
路由算法的关键问题: 源到目的的最小费用路径是什么,寻找最小费用路径的算法
路由算法的分类
-
静态路由
- 手工配置
- 路由更新慢
- 优先级高
-
动态路由
- 路由更新快
- 定期更新
- 及时响应链路费用或网络拓扑的变化
-
全局信息
- 所有路由器掌握完整的网络拓扑和链路费用信息
- 典型代表:链路状态(LS)路由算法
-
分散信息
- 路由器只掌握物理相邻的邻居以及链路费用
- 邻居之间信息交换、运算的迭代过程
- 典型代表:距离向量(DV)路由算法
链路状态(LS)路由算法
Dijkstra算法
- 所有节点(路由器)掌握网络拓扑和链路费用
- 通过”链路状态广播“
- 所有节点拥有相同信息
- 计算从一个节点到达所有节点的最短路径
- 获得该节点的转发表
- 迭代:k次迭代后,得到到达k个目的节点的最短路径
- 符号
- c(x,y):节点x到节点y链路费用;如果x和y不直接相连,则链路费用达到无穷
- D(v):从源到目的v的当前路径费用值
- p(v):沿从源到v的当前路径,v的前序节点
- N‘:已经找到最小费用路径的节点集合
距离向量路由算法
Bellman-Ford方程(动态规划)
令 dx(y): 从x到y最短路径的费用(距离)
则 dx(y)= min(c(x,v) + dv(y))
就是求x到邻居的费用加上邻居到y的费用,取最小值
核心思想
- 每个节点不定时地将其自身的DV估计发送给其邻居
- 当x接收到邻居新的DV估计时,根据B-F更新其自身的距离向量估计
- Dx(y) 将最终收敛于实际的最小费用
异步迭代
- 引发每次局部迭代的因素
- 局部链路费用改变
- 来自邻居的DV更新
分布式
- 每个节点只当DV变化时才通告给邻居
- 邻居在必要时再通告他们的邻居
层次路由
- 聚合路由器为一个区域:自治系统AS
- 同一个AS内的路由器运行相同的路由协议
- 自治系统内部路由协议
- 不同自治系统内的路由器可以运行不同的AS内部路由协议
- 网关路由器
- 位于AS边缘
- 通过链路连接其它的AS的网关路由器
4.10)internet路由
- Internet采用层次路由
- AS内部路由协议也称为内部网络协议(IGP)
- 最常见的的AS内部路由协议
- 路由信息协议:RIP
- 开放最短路径优先:OSPF
- 内部网关路由协议:IGRP
RIP协议
采用距离向量路由算法
- 距离度量:跳步数(max = 15 hops) ,每条链路1个跳步
- 每个30秒,邻居之间交换一次DV,称为通告
- 每次通告:最多25个目的子网
例如此刻路由器D的路由表
- 目标w,则需要通过 D->A->w 经过 2 跳
- 目标y,则需要通过 D->B->y 经过 2 跳
- 目标z,则需要通过 D->B->y -> n… ->z 经过 n 跳
- 目标x,则需要通过 D->x 经过 1 跳
OSPF协议
采用链路状态路由算法
- LS分组扩散
- 每个路由器构造完整的网络(AS)拓扑图
- 利用Dijkstra算法计算路由
- 通告中每个入口对应一个邻居
- 通告在整个AS范围泛洪
- 报文直接封装到IP数据报中
相比于RIP的优点
- 安全:所有OSPF报文可以被认证
- 允许使用多条相同费用的路径
- 对于每条链路,可以针对不同的TOS设置多个不同的费用度量
- 集成单播路由与多播路由
- 支持对大规模AS分层
BGP协议
BGP属于边界网关之间的协议:事实上的标准域间路由协议,是将Internet粘合的一个整体手段
- eBGP:从邻居AS获取子网可达性信息
- iBGP:向所有AS内部路由器传播子网可达性信息
BGP会话
- 通告去往不同目的前缀的路径
- 报文交换基于半永久的TCP连接
BGP报文
- OPEN:与peer建立TCP连接,并认证发送方
- UPDATE:通告新路径或撤销原路径
- KEEPALIVE:在无UPDATE时,保活连接,也对OPEN请求的确认
- NOTIFICATION:报告先前报文的差错,也被用于关闭连接
BGP路由选择
- 网关路由器收到路由通告后,利用其输入策略决策接收/拒绝该路由
- 路由器可能获知到达某目的AS的多条路有,基于以下准则
- 本地偏好值属性:策略决策
- 最短AS-PATH
- 最近NEXT-HOP路由器
- 附加准则
为什么采用不同的AS内与AS间路由协议
- 策略
- inter-AS:期望能够管理控制流量如何被路由,谁路由经过其网络等
- intra-AS:单一管理,无需策略决策
- 规模
- 层次路由节省路由表大小,减少路由更新流量
- 适用大规模互联网
- 性能
- intra-AS:侧重性能
- inter-AS:策略主导
五、数据链路层
概念
数据链路层负责通过一条链路从一个节点向另一个物理链路直接相连的相邻节点传输数据报
结点: 主机和路由器
链路: 连接相邻结点的通信信道;有线链路、无线链路、局域网
帧: 链路层数据分组,封装网络层数据报
5.1)数据链路层服务
- 组帧
- 封装数据报构成数据帧,加首部和尾部
- 帧同步
- 链路接入
- 如果是共享介质,需要解决信道接入
- 帧首部中的 MAC 地址,用于标识帧的来源和目的
- 相邻结点间可靠交付
- 在低误码率的有线链路上很少采用
- 无线链路:误码率高,需要可靠交付
- 流量控制
- 协调相邻的结点发送和接收
- 差错检测
- 信号衰减和噪声会引起差错
- 接收端检测到差错通知发送端重传或直接丢弃帧
- 差错纠正
- 接收端直接纠正比特差错
- 全双工和半双工通信控制
- 全双工:链路两端结点同时双向传输
- 半双工:链路两端结点交替双向传输
链路层的具体实现
- 每个主机或路由器接口
- 链路层在适配器中实现或者在一个芯片上实现
- 以太网网卡,802.11网卡,以太网芯片组
- 实现链路层和物理层
- 链接主机的系统总线
- 由硬件、软件与固件组成
5.2)差错编码
差错检测
基本原理: D-DR,其中R为差错检测与纠正比特,发送端在正常的数据后边加入一个冗余的比特,接收端去校验这个冗余比特
差错编码不能保证100%可靠
差错编码的检错能力
差错编码可分为 检错码 和 纠错码
- 检错码
- 如果编码集的汉明距离 ds=r+1,则该差错编码可以检测r位的差错
- 例如 编码集{0000,0101,1010,1111}的汉明距离 ds= 2,可以100%检测1比特的差错
- 纠错码
- 如果编码集的汉明距离ds = 2r+1,则该纠错码可以纠正r位的差错
- 例如 编码集{000000,010101,101010,111111}的汉明距离ds=3,可以纠正1比特的差错
奇偶校验码
Internet校验和
- 发送端
- 将数据划分为16位的二进制整数序列
- 对这个序列补码求和(最高位进位的1,返回最低位继续加)
- 求和之后进行取反码
- 放入分组的校验和字段中
- 接收端
- 与发送端相同的算法进行计算
- 计算得到的校验和为16位全0或者全1则代表无措
- 否则就有错
循环冗余校验码(CRC)
- 检错能力更加强大的差错编码
- 将数据比特 D 视为一个二进制数
- 选择一个 r+1 的比特模式,G
- 选择r位的CRC比特,R ,满足
- <D,R> 刚好可以被G整除
- 接收端检错:利用G除<D,R>,余式全0无错,否则有错
- 可以检测所有突发长度小于r+1位差错
- 广泛应用于实际网络(以太网、802.11Wifi、ATM)
5.3)多路访问控制(MAC)协议
区分下两类链路
- 点对点链路
- 拨号接入的PPP
- 以太网交换机与主机间的点对点链路
- 广播链路(共享介质)
- 早期的总线以太网
- HFC的上行链路
- 802.11无线局域网
因为两个或两个以上结点同时传输就会造成信道干扰,造成冲突,为了解决引入多路访问控制协议
- 采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据
- 必须基于信道本身,通信信道共享协调信息
理想的MAC协议
基于:速率为R bps 的广播信道
期望:
- 当只有一个结点希望传输数据时,它可以以速率R发送
- 当有M个结点期望发送数据时,每个结点平均发送数据的平均速率是R/M
- 完全分散控制,无需特定结点协调,无需始终、时隙同步
- 协议简单
MAC协议的分类
- 信道划分
- 多路复用技术
- TDMA、FDMA、CDMA、WDMA等
- 随机访问
- 信道不划分,允许冲突
- 采用冲突恢复机制
- 轮转
- 结点轮流使用信道
TDMA协议
- 周期性接入信道
- 每个站点在每个周期,占用固定长度的时隙
- 未用时时隙空闲
- 例如:6-站点LAN,1,3,4传输分组,2,5,6空闲
FDMA协议
- 信道频谱划分未若干频带
- 每个站点分配一个固定的频带
- 无传输频带空闲
- 例如:6-站点LAN,1,3,4频带传输分组,2,5,6空闲
随机访问MAC协议
- 当结点要发送分组时
- 利用信道全部数据速率R发送分组
- 没有事先的结点间协调
- 两个或多个结点同时传输时会造成冲突
- 随机访问MAC协议需要定义
- 如何检测冲突
- 如何从冲突中恢复
- 典型的随机访问MAC协议
- 时隙ALOHA
- ALOHA
- CSMA、CSMA/CD、CSMA/CA
时隙ALOHA协议
条件:
- 所有帧大小相同
- 时间被划分为等长的时隙(每个时隙可以传输一个帧)
- 结点只能在时隙开始时刻发送帧
- 结点间时钟同步
- 如果2个或2个以上结点在同一时隙发送帧,结点即检测到冲突
运行:
- 当结点有新的帧时,在下一个时隙发送
- 如果无冲突,该节点可以在下一个时隙继续发送新的帧
- 如果有冲突,该节点在下一个时隙以概率p重传该帧,直至成功
优点:
- 单个结点活动时,可以连续以信道全部速率传输数据
- 高度分散化,只需要同步时隙
- 简单
缺点:
- 冲突,浪费时隙
- 空闲时隙
- 结点也许能以小于分组传输时间检测到冲突
- 需要时钟同步
时隙ALOHA协议最好的情况:信道被成功利用的时间仅占37%
ALOHA协议
- 非时隙ALOHA:更加简单,无需同步
- 当有新的帧生成时立即发送
- 冲突的可能性增大
- 在t0时刻发送帧,会与在[t0-1,t0+1]期间其它结点发送的帧冲突
- 在t0时刻发送帧,会与在[t0-1,t0+1]期间其它结点发送的帧冲突
时隙ALOHA协议最好的情况:信道被成功利用的时间仅占18%
CSMA协议
- 载波监听多路访问协议
- 发送帧之前,监听信道
- 信道空闲时发送完整帧
- 信道忙时推迟发送
- 1-坚持CSMA
- 非检坚持CSMA
- P-坚持CSMA
- 冲突仍然可能发生,会导致信号传播延迟
- 连续发送冲突帧会造成信道资源浪费
CSMA/CD协议
边发边听,不发不听
- 短时间内可以检测到冲突
- 冲突后传输终止,减少信道浪费
- 冲突检测
- 有线局域网易实现,无线局域网很难实现
- 有线局域网易实现,无线局域网很难实现
传播距离和信号传播速度的关系
CSMA的效率远远优于ALOHA协议
轮转访问MAC协议
综合信道划分和随机访问的优点产生的MAC协议
- 轮询
- 主结点轮流邀请从属结点发送数据
- 有轮询开销、等待延迟、单点故障的问题
- 令牌传递
- 控制令牌依次从一个结点传递到下一个结点
- 令牌:特殊帧
- 有令牌开销、等待延迟、单点故障的问题
5.4)ARP协议
基础概念
- IP地址
- v4版本32位
- 接口的网络层地址
- 用于标识网络层分组,支持分组转发
- MAC地址(LAN地址、物理地址、以太网地址)
- 48位MAC地址,固化在网卡的ROM中,有时也可以软件设置
- 用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其它接口
- e.g:1A-2F-BB-76-09-AD
- 局域网中每个网卡都有一个唯一的MAC地址
- 由IEEE统一管理和分配
- 网卡生产商购买MAC地址空间(前24比特)
- ARP:地址解析协议
- 每个结点都维护了一个ARP表
- 存储了某些LAN结点的IP/MAC地址映射关系
同一个局域网内的ARP协议
A想要给同一个局域网内的B发送数据报
- A广播ARP查询分组,其中包含B的IP地址
- B接收ARP查询分组,IP地址匹配成功,向A应答B的MAC地址
- A在其ARP表中缓存B的IP-MAC地址对
- 然后发送数据报
ARP协议寻址
5.5)以太网
概述
- 以太网造价低廉
- 应用广泛
- 更加简单
- 满足网络速率要求 10Mbps-10Gbps
以太网的物理拓扑
- 总线
- 上世纪90年代中期前流行
- 所有结点早同一冲突域发送信息
- 星型
- 目前主流的网络拓扑
- 其通过一个中心交换机
- 每个结点一个单独的冲突域,结点之间彼此不冲突
以太网提供的服务
- 无连接
- 发送帧的网卡与接收帧的网卡之间没有握手的过程
- 不可靠
- 接收网卡不向发送网卡进行确认
- 以太网的MAC协议:采用二进制指数退避算法的CSMA/CD
以太网的CSMA/CD算法
- NIC从网络层接收数据报,创建数据帧
- 监听信道
2.1 如果NIC监听到信道空闲,则开始发送帧
2.2 如果NIC监听到信道忙,则一直等待到信道空闲,然后发送帧 - NIC发送完整个帧,而没有检测到其它结点的数据发送,则NIC确认帧发送成功
- 如果NIC检测到其它结点传输数据,则中止发送,并发送堵塞信号
- 中止发送后,NIC进入二进制指数退避
- 第m次连续冲突后
- 取n = Min(m,10)
- NIC从{0,1,2,…,2n-1}中随机选一个数K
- NIC等待K * 512比特的传输延迟时间,再返回第二步
- 连续冲突次数越多,平均等待时间越长
- 第m次连续冲突后
以太网帧的结构
- 前导码(Preamble)
- 8B
- 7个字节的10101010,第8字节为10101011
- 用于发送端与接收端的时钟同步
- 目的MAC地址、源MAC地址
- 6B
- MAC地址匹配则接收,否则丢弃该帧
- 类型(Type)
- 2B
- 指示帧中封装的时哪种高层协议的分组 例如 IP数据报、AppleTalk数据报等
- 数据(Data)
- 46-1500B
- 循环冗余校验码(CRC)
- 4B
- 丢弃差错帧
5.6)PPP协议
概述
- 一个发送端,一个接收端,一条链路
- 无需介质访问控制
- 无需明确的MAC地址
- e.g:拨号链路,ISDN链路
- 常见的点对点:HDLC、PPP
PPP的设计
- 组帧:将网络层数据报封装到数据链路层中
- 比特透明传输:数据域必须支持承载任何比特模式
- 差错检测:仅检测无纠正
- 连接活性检测:检测、并向网络层通知链路失效
- 网络层地址协商:端结点可以学习/配置彼此网络地址
- PPP无需支持差错纠正/恢复、流量控制、乱序交付、多点链路等特性
PPP的数据帧结构
- 标志(Flag):定界符 固定开头和结尾都是01111110
- 地址(Address):无效,不需要知道
- 控制(Control):无效,未来可能的多种控制域
- 协议(Protocol):上层协议,例如IP、IPCP
- 信息(Info):上层协议分组数据
- 校验(Check):CRC校验,用于差错检测
PPP如何确定Flag位
- 发送端
- 如果在数据体中发现了<01111110>
-那就在其之前添加<01111101>
-如果在数据体中也发现了<01111101>,那就再在其之前添加一个<01111101>
- 如果在数据体中发现了<01111110>
- 接收端
- 单个字节<01111101>表示一个填充字节
- 连续两个<01111101>:丢弃第一个,第二个作为数据接收
- 单个字节<01111110>:表示标志字节
5.7)802.11无线局域网
概述
- 802.11b
- 2.4-2.5GHz免费频段
- 最高速率:11Mbps
- 物理层采用直接序列扩频DSSS技术
- 所有主机使用相同的码片序列
- 802.11a
- 5-6 GHz频段
- 最高速率:54Mbps
- 802.11g
- 2.4-2.5 GHz频段
- 最高速率:54Mbps
- 802.11n
- 多天线MIMO
- 2.4-2.5GHz频段
- 最高速率600Mbps
均使用CSMA/CA多路访问控制协议
均有基础设置(基站)网络模式和特定网(自组网)网络模式
802.11的多路访问控制 CSMA/CA
- 避免与正在进行传输的其它结点冲突
- 无法边发送、边检测冲突
- 基本思想:允许发送端 预约 信道,而不是随机发送数据帧,从而避免长数据帧的冲突
- 发送端首先利用CSMA向BS发送一个很短的RTS帧
- BS广播一个CTS帧作为对RTS帧的响应
802.11 sender
- 如果监听到信道空闲了DIFS时间,则发送整个帧
- 如果监听到信道忙,开始随机退避计时,当信道空闲时,计时器倒计时,当计时器超时时,发送帧
- 如果没有收到ACK则增加随机退避间隔时间
- 重复第二步
802.11 receiver
- 正确接收帧,延迟SIFS时间后,向发送端发送ACK
802.11 MAC帧
- 数据帧中有4个地址字段
- 地址4用于自组网络
- 地址1-3
六、物理层
6.1)数据通信基础
数据通信系统
- 信源:将消息转换位信号的设备,如计算机等
- 发送设备:将信源产生的信号进行适当的变换装置,使之适合于在信道中传输。主要包括编码和调制
- 信道:信号传输通道,如物理介质
- 噪声:自然界和通信设备中所产生的干扰
- 接收设备:完成发送设备反变换,还原原始发送信号
- 信宿:信号终点,将信号转换为人们能识别的信息
常见的数据通信术语
- 数据:传送消息的实体
- 信号:数据的电气或 电磁的表示
- 模拟的: 参数的取值是连续的
- 数字的:参数的取值是离散的
- 码元:信号基本波形,基本单元
- 频带:信号频率范围
- 带宽:有效带宽
- 数据通信方式:单工、半双工、全双工
- 并行通信 串行通信
模拟通信 和 数字通信
区别在于信道中传输的是 模拟信号 和 数字信号
信源编码
典型的信源编码 PCM 包括三个步骤:采样 -> 量化 -> 编码
- 采样:目的就是要用一系列在时间上离散的采样值,代替时间上连续的模拟数据,即实现时间上的离散化
- 量化:就是使采样值在取值上离散化
- 编码:就是将量化后的采样值用一定位数的二进制数码来表示
6.2)物理介质
导引型传输介质
- 架空明线
- 易受到天气和外界电磁干扰,对外界噪声敏感,带宽有限
- 双绞线
- 主要用于基带传输
- 同轴电缆
- 主要用于频带传输
- 光纤
- 基本原理是光的全反射,分为多模光纤和单模光纤
非导引型传输介质
- 自由空间
- 无线电传播途径
- 不同频段具有不同传播特性
- 地波传播
- 频率较低的电磁波趋于沿地球表面传播
- 有一定的绕射能力
- 在低频和甚低频段,地波传播距离可以超过数百米或数千公里
- 天波传播
- 电离层,距地表约60 - 400 km高度
- 频率较高的电磁波会被电离层反射
- 电离层的密度和厚度随时间随机变化
- 电磁波可以传播10000km以上
- 视线传播
- 频率高于30MHz的电磁波将穿透电离层,不会被反射回来
- 沿地面绕射能力也很弱
- 通常采用视线无障碍的点对点直线传播
- 可以设立地面中继站或卫星中继站进行接力传输
6.3)信道与信道容量
信道分类与模型
- 狭义信道
- 信号传播介质
- 广义信道
- 包括信号传输介质和通信系统的一些变换装置,如发送设备、接收设备、天线、调制器等
信道传输特性
- 恒参信道传输特性
- 各种有线信道和部分无线信道,如微波视线传播链路和卫星链路等,都属于恒参信道
- 理想的恒参信道是一个理想的无失真的传输信道
- 对信号幅值产生固定的衰减
- 对信号输出产生固定的时延
- 随参信道传输特性
- 许多无线信道都是随参信道
- 信号的传输衰减随时间随机变化
- 信号的传输时延随时间随机变化
- 存在多径传播现象
信道容量
- 信道容量是指信道无差错传输信息的最大平均信息速率
- 奈奎斯特信道容量公式
- 理想无噪声信道的容量 C = 2B(log以2为底)M
- 其中:C为信道容量,单位为 b/s 或bps;B为信道带宽,单位为Hz;M为进制数,即信号状态数
- 理想信道的极限容量
- 香农信道容量公式
- 有噪声信道的信道容量:C = B(log以2为底)(1+S/N)
- 其中,S/N为信噪比,即信号能量与噪声能量之比
- S/N通常以分贝(dB) 为单位描述
6.4)基带传输基础
基带传输
- 信源发出的原始电信号是基带信号
- 模拟信源 -> 模拟基带信号
- 数字信源 -> 数字基带信号
- 基带信号往往包含有较多的低频成分 ,甚至有直流成分
- 直接在信道中传送基带信号称为 基带传输
- 实现基带传输的系统称为 基带传输系统
- 在信道中直接传输数字基带信号,称为 数字基带传输 ,相应的系统称为 数字基带传输系统
数字基带传输
- 基带信号比较适合在具有低通特性 的 有线信道 中传输,通常不适合在无线信道中直接传输
- 信道的传输特性会引起波形失真,并会受噪声影响
- 信道中的信号传播一定距离后,信号质量就会有所下降,甚至出现传输误码现象
典型数字基带信号码型
- 单极不归零码
- 这种码型易于产生,但不适合长距离传播
- 双极不归零码
- 单极归零码
- 码元不为零的时间占用一个码元周期的百分比称为占空比
- 若码元不为零时间为Tb/2,码元周期为Tb,则该单极归零码的占空比为50%
- 双极归零码
- 差分码
- 差分码又称为相对码
- 例如相邻脉冲有电平跳变表示1,无跳变表示0
- AMI码
- 全称是信号交替反转码
- 编码规则
- 信息码中的0编码为AMI传输码中的0 零电平
- 信息码中的1交替编码为AMI传输吗中的 +1 正脉冲 和 -1 负脉冲
- 双相码
- 双相码又称曼彻斯特码
- 双相码只有正、负两种电平
- 每个比特持续时间的中间时刻要进行电平跳变
- 正电平跳到负电平表示1
- 负电平跳到正电平表示0
- 双相码在每个比特周期中间时刻都会有电平跳变,因此便于提取定时信息
- 双相码利用了两个脉冲编码信息码中的一个比特,相当于双极码中的两个比特
- 10Mbps的以太网采用曼彻斯特码
- 差分双相码
- 双向的另一种码型是差分双相码,也称为差分曼彻斯特码
- 差分双相码的每个比特周期的中间时刻也要进行电平跳变,但该跳变仅用于同步
- 利用每个比特开始处是否存在电平跳变编码信息
- 开始处有跳变表示1
- 无跳变表示0
- IEEE802.5令牌环网采用差分曼彻斯特码
- nBmB
- nBmB码将n位二进制信息码作为一组,映射成m位二进制新码组,其中m>n
- …
6.5)频带传输基础
频带传输
- 基带信号具有低通特性,可以在具有低通特性的信道中进行传输
- 许多带通信道不具有低通特性,因此不能再这些信道中直接传输基带信号
- 只能利用基带信号去调制与对应信道传输特性相匹配的载波信号
- 通过再信道中传送经过调制的载波信号实现将基带信号所携带信息传送过去
- 利用模拟基带信号调制载波,称为模拟调制,利用数字基带信号调制载波,称为数字调制
- 数字调制就是利用数字基带信号控制载波信号的某些特称
6.6)物理层接口规程
物理层接口特性
- 机械特性:指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等
- 电气特性:指明再接口电缆的各条线上出现的电压的范围
- 功能特性:指明某条线上出现的某一电平的电压表示何种意义
- 过程特性:指明对于不同功能的各种可能事件的出现顺序
七、网络安全基本原理
7.1)网络安全基础
什么是网络安全
- 网络安全是指网络系统的硬件、软件以及系统中的数据收到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。
网络安全基本属性
- 机密性
- 只有发送方与预定接收方能够理解报文内容
- 发送方加密报文
- 接收方解密报文
- 身份认证
- 发送方与接收方希望确认彼此的真实身份
- 信息完整性
- 发送方与接收方希望确保信息未被篡改,发生篡改一定会被检测到
- 可访问与可用性
- 网络服务必须对被授权用户可访问与可用
网络安全的基本特征
- 相对性:只有相对的安全,没有绝对的安全
- 时效性:新的漏洞与攻击方法不断发现
- 相关性:新配置、新系统组件可能会引入新的安全问题
- 不确定性:攻击时间、攻击者、攻击目标和攻击发起的地点都具有不确定性
- 复杂性:网络安全是一项系统工程,需要技术和非技术的手段
- 重要性:网络安全关乎国家、政府、企业、个人的安全
7.2)网络安全威胁
网络威胁
- 窃听:窃听信息
- 插入:主动在连接中插入信息
- 假冒:可以通过伪造分组中的源地址
- 劫持:通过移除/取代发送或者接收方“接管”连接
- 拒绝服务DoS:阻止服务器为其它用户提供服务
Internet安全威胁和策略
- 映射:在发起攻击前,找出网络上运行什么服务
- 手段:利用ping命令确定网络上主机的地址,利用端口扫描依次尝试与每个端口建立TCP连接,nmap是最常用的国外端口扫描工具之一
- 对策:记录到达的网络流量,分析识别出可疑活动
- 分组嗅探:监听网络上经过的分组/帧,可以读到所有未加密的数据
- 手段:利用网络接口,广播介质等,抓包工具Wireshark就是一个典型免费的分组嗅探软件
- 对策:组织中的所有主机都运行软件,周期性检测网路接口是否工作在混杂模式
- IP欺骗:冒充某些IP去发包
- 手段:直接由应用生成 原始 IP分组,设置分组的源IP地址字段为任意值
- 对策:路由器不转发源IP地址无效的IP分组进行一个入口过滤
- 拒绝服务DDOS:控制多台机器向目标机器持续大量发送无效的分组耗尽对方的带宽
- 手段:如上
- 对策:在到达主机前过滤掉泛洪分组,追溯攻击源
7.3)密码学基础
对称密钥加密
加密和解密用同一个密钥(对称)
公开密钥加密
通过公开的密钥加密,使用私有的密钥解密
破解加密方法
- 唯密文攻击
- 入侵者只截获到密文,基于对密文的分析进行破解
- 暴力破解,尝试所有可能的密钥
- 统计分析
- 已知明文攻击
- 入侵者已知部分明文以及与之匹配的密文
- 入侵者可以获取针对选择的明文的密文
传统加密方法
- 替代密码:利用一种东西替代另一种东西
- 凯撒密码:一个字母替代另一个字母
- 将一个字母利用字母表中该字母后面的第 k 个字母替代
- 如 k = 3 ,“bob. i love you” -> “ere. l oryh brx”
- 单码替换密码:每个字母有与之对应的一个字母
- 明文:abcdefg … -> mnbvcx …
- 如:“bob. i love you” -> “nkn. s gktc wky”
- 加密密钥:26个字母集合向26个字母集合的映射
- 多码替换加密:使用多个单码替换密码,明文中不同位置的字母使用不同的单码替换密码
- 例如:a,b,c,d,e,f … -> C1(K=5):f,g,h,i,j,k … -> C2(K=19):t,u,v,w,x,y …
- 加密密钥:(C1=5,C2=19)
- 明文:bob. i love you
- 密文:ghu. n etox dhz
- 换位密码:重新排列明文中的字母
- 置换法:将明文划分为固定长度d的组,每个组内的字母按置换规则f变换位置
- 密钥:(d,f)
- 例如 d = 4 ,f = (1 -> 3, 2 -> 1, 3 -> 4, 4-> 2)
- 明文:i love you -> ilov eyou -> lvio yueo 打乱重组
- 列置换加密
- 将明文按行组成一个矩阵,然后按给定列顺序输出得到密文
- 密钥 k = 4(矩阵列数),(2314)输出顺序
- 明文 bob i love you -> 矩阵 bly ooo bvu iex,输出 ooo bvu bly iex
- 凯撒密码:一个字母替代另一个字母
现代加密技术
- 现代加密技术的基本操作包括经典的 替代 和 置换
- 不再针对一个个字母,而是针对二进制位操作
- 主要分为 对称密钥加密 和 非对称密钥加密
- 对称密钥加密
- 流密码
- 分组密码 也称块密码
流密码
- 基本思想:首先利用密钥K产生一个密钥流:z=z0,z1,z2 …,然后使用如下规则对明文串x=x0x1x2… 进行加密
- 解密时,使用相同的密钥流与密文做运算XOR
7.4)身份认证
7.5)消息完整性与数字签名
散列函数算法
- MD5
- 被广泛应用的散列函数
- 通过4个步骤,对任意长度的报文输入,计算输出128位的散列值
- MD5不是足够的安全
- SHA-1
- 另一个正被使用的散列算法
- SHA-1要求输入消息长度<2的64次方
- SHA-1的散列值位160位
- 速度慢于MD5,安全性优于MD5
数字签名
- 数字签名技术是实现安全电子交易的核心技术之一
- 可验证性
- 不可伪造性
- 不可抵赖性
7.6)密钥分发与公钥证书
八、网络安全协议与技术
8.1)安全电子邮件
电子邮件安全需求
- 机密性:只有真正的接收方才能阅读邮件
- 完整性:电子邮件在传输过程中不被修改
- 身份认证性:电子邮件的发送者不被假冒
- 抗抵赖性:发信人无法否认发过电子邮件
安全电子邮件基本原理
- 期望发送机密邮件
- 发送者生成随机对称密钥
- 利用对阵密钥加密报文
- 同时,利用接收者的公钥加密密钥
- 将加密后的密钥和公钥发送给接收者
- 接收者利用私钥解密加密的密钥
- 通过发送者的密钥解析加密的邮件
- 期望提供发送者认证与报文完整性
- 发送者对报文进行数字签名
- 发送报文和数字签名
- 期望提供保密,发送者认证和报文完整性
- 发送者使用3个密钥:私钥,公钥和新生成的对称密钥
8.2)安全套接字层SSL
- 基于应用层实现Web安全:为特定应用定制特定安全服务,将安全服务直接嵌入在应用程序中
- 基于传输层实现Web安全:SSL或TLS可作为基础协议栈的组成部分,使用SSL或TLS后,传送的应用层数据会被加密
- 基于网络层实现Web安全:IPSec提供端到端的安全机制,各种应用程序均可利用IPSec提供的安全机制
SSL
- 提供机密性、完整性、认证
一个简单的安全信道
- 握手:利用证书、私钥认证彼此,交换共享密钥
- 密钥派生:用共享密钥派生出一组密钥
- 数据传输:输数据分割成一系列记录
- 连接关闭:通过发送特殊消息,安全关闭连接
8.3)IP安全
两个IPsec协议
- AH:提供源认证/鉴别和数据完整性校验,但不提供机密性
- ESP:提供源认证/鉴别、数据完整性以及机密性,比AH应用更广泛
8.4)无线局域网安全
8.5)防火墙
为什么需要防火墙
- 预防DDOS
- 预防非法修改/内部数据访问
- 只允许对内部网络的授权访问
无状态分组过滤
- 内部网络通过路由器防火墙与Internet连接
- 路由器逐个分组过滤,决策是否丢弃
有状态分组过滤
- 跟踪每个TCP连接,根据状态确定是否放行
- 超时的非活动连接,不再允许分组通过
应用网关
- 基于应用数据以及IP/TCP/UDP头部字段过滤分组
防火墙的局域性
- IP欺骗:路由器不知道数据是否来自于声称的源
- 折衷:确定安全级别