计算机网络和因特网
因特网(Internet)
具体的构成:
- 计算设备:主机(hosts)/端系统(end systems)
功能:进行数据处理、运行网络应用程序。 - 连网设备:通信链路(link)
功能:保证高效、可靠地数据传输。
类型:同轴电缆、双绞线、光纤、无线电、卫星等。 - 连网设备:分组交换机(packet switch)
功能:接收、转发分组。
类型:路由器(router)、链路层交换机(link-layer switch)。 - 因特网服务提供商ISP(Internet Service Provider)
功能:端系统通过ISP接入因特网。 - 协议(protocol):TCP/IP协议
功能:控制网络中信息发送、接收。
标准:由因特网工程任务组IETF制定的标准文档RFC(Request For Comments)。
提供的服务:
- 提供网络应用基础架构:
允许终端系统上运行分布式应用程序,并彼此交换数据。 - 为分布式应用程序提供的通信服务接口:
无连接服务:不能对最终交付作任何保证。
面向连接服务:确保从发送方发出的数据最终按顺序完整地交付给接收方。
不提供数据传递时间保证(发送端到接收端)的服务。
协议
协议:定义通信实体之间交换报文的格式和传输顺序、以及发送、接收报文所采取的动作。
协议的三要素:语法、语义、时序。
接入网络(Access Network)
住宅接入网:
- 数字用户线路DSL(Digital Subscriber Line):
使用频分复用:通信链路划分为3个不重叠频段。
住宅常用不对称数字用户线路ADSL。 - 混合光纤同轴电缆HFC(Hybrid Fiber Coaxial Cable):
使用HFC结构:采用同轴电缆和光纤混合接入方式。
使用特殊的电缆调制解调器:通过以太网端口与家庭PC连接。
共享广播媒体:用户同时下载或上传,传输速率下降。
企业接入网:
- 以太网技术:
传输速率:10 Mbps、100 Mbps、1 Gbps、10 Gbps
端系统连接到以太网交换机。
无线接入网:
- 无线以太网:Wi-Fi
传输速率:11 Mbps、54 Mbps、450 Mbps - 广域无线接入网:3G/4G/5G
传输速率:1-10 Mbps
端系统连接到路由器。
数据如何通过网络传送?
链路传输速率(链路带宽):每秒传输多少位数据。单位bit/s或bps。
分组交换(packet switching):
- 主机将应用层报文划分为若干分组(packet);
- 每个分组沿着从源主机到目的主机的传输路径通过一系列分组交换机转发;
- 在每条链路传输时,分组以链路的最大传输速率传输;
- 传输过程采用存储转发传输机制:整个分组完整接收后,才能从输出链路转发;
- 传输到目的端后,目的端恢复原报文。
电路交换(circuit switching):
- 通信双方必须先建立一条专用的连接电路;
- 发送方可以以恒定的速率向接收方发送数据;
- 整条电路被临时占用,直到通信结束。
分组交换和电路交换的区别:
- 分组交换:因特网
不需要资源预留,利用率高,允许更多的用户使用网络;
按需使用资源,可能要排队等待;
简单有效,实现成本更低。 - 电路交换:电话网络
需预留端到端资源(缓存、链路带宽),过程复杂;
静默期(无数据传输)专用电路空闲,网络资源被浪费;
发送方以恒定速率向接收方传送数据。
分组交换网中的时延、丢包、吞吐量:
- 时延:输出缓存中分组排队等待交换。
处理时延:检查比特差错、决定输出链路的时间。
排队时延:分组在输出缓存中等待传输的时间。
传输时延:将完整分组传输到链路的时间。
传播时延:分组从起点到路由器之间传播需要的时间。
流量强度:分组到达队列速率÷分组从队列中推出的速率。 - 丢包:输出缓存空间已满,到达的分组丢失。
- 吞吐量:比特在发送方与接收方之间的链路传输速率。
因特网中对吞吐量的限制因素通常是接入网。
电路交换网络中的多路复用:
- 多路复用:在一条传输链路上同时建立多条连接,分别传输数据。
频分复用FDM:按频率划分若干频段,每个频段专用于一个连接。
时分复用TDM:按时间划分若干帧,每帧划分若干时隙,每个时隙专用于一个连接。
ISO/OSI RM、TCP/IP、因特网体系结构的区别?
因特网体系结构:
- 应用层(application):提供网络应用。(HTTP、Web、FTP、SMTP、DNS、DHCP)
- 运输层(transport):实现进程-进程的数据传输。(UDP、TCP)
- 网络层(network):实现主机-主机的数据传输。(IP、RIP、OSPF、BGP、ICMP)
- 链路层(link):实现单条链路的数据传输。(802.11、802.1、802.3)
- 物理层(physical):实现单条链路上比特流的编码和解码。(传输媒体)
OSI体系结构:
- 表示层:加解密、数据压缩、格式转换。
- 会话层:对数据传输进行管理,包括数据交换的定界、同步,建立检查点等。
数据的封装和解封装:加上/拿掉头部
- 应用层:报文(message)
- 运输层:报文段(segment)
- 网络层:数据报(packet)
- 链路层:数据帧(frame)
- 物理层:比特流(bit)
节点分层:
- 主机上:实现全部层次。
- 路由器:实现物理层、链路层、网络层。
- 交换机:实现物理层、链路层。
攻击威胁下的网络
恶意软件对主机的侵害:
- 恶意代码:病毒、蠕虫。
- 间谍软件:记录键盘敲击、访问网站等信息。
- 未授权访问:数据窃取、盗取账户。
恶意软件对网络基础设施的侵害:
- DoS攻击:攻击者通过海量的伪造分组使得合法用户无法正常使用资源。
- 嗅探(Sniffer):在共享信道中监听到别人的数据包。
- IP哄骗:发送分组到伪造的地址。
主动攻击:包括拒绝服务攻击、信息篡改、资源使用、欺骗等攻击方法。
被动攻击:包括嗅探、信息收集等攻击方法。
应用层
网络应用程序的体系结构
应用程序软件只在端系统运行,不在网络核心设备上运行。
客户机/服务器体系结构:
- 分布式应用程序:客户机/服务器分别在端系统上运行。
- 客户机程序(client):总是打开或间歇打开,向服务器发出请求,具有动态的IP地址。
- 服务器程序(server):总是打开,为多个客户机请求提供服务,具有永久的IP地址。
- 举例:电子邮件、Web服务。
纯P2P体系结构:
- 最少或不使用服务器;
- 对等应用程序同时起客户机和服务器的作用;
- 对等方间歇连接,IP地址不固定。
- 举例:文件分发、因特网电话。
客户机/服务器与P2P的混合:
- 举例:Napster、即时讯息。
因特网提供的传输服务
用户数据报协议UDP(User Datagram Protocol):无连接的方式
- 能提供的服务:数据的不可靠传输。
- 未提供的服务:流量控制、拥塞控制、带宽保证、时延保证、安全性。
传输控制协议TCP(Transmission Control Protocol):面向连接的方式
- 能提供的服务:数据的可靠传输、流量控制、拥塞控制。
- 未提供的服务:带宽保证、时延保证、安全性。
超文本传输协议HTTP
HTTP是无状态协议:服务器不保存关于客户机的任何信息。
HTTP协议使用的底层传输协议是TCP(端口号80):
- 客户机与服务器建立TCP连接,通过套接字访问;
- 客户机:从其套接字接口发送HTTP请求报文和接收响应报文;
- 服务器:从其套接字接口接收HTTP请求报文和发送响应报文。
HTTP连接:
- 非持续HTTP连接:每个TCP连接上只传送一个Web对象,一个请求/响应对。
缺点:每个对象需要新连接、每个对象的传输时延长。 - 持续HTTP连接:每个TCP连接上可传送多个Web对象,多个请求/响应对。
优点:服务器在发送响应后保持该TCP连接。
非持续HTTP连接的响应时间=2RTT+文件传输时间
- 往返时延RTT(Round-Trip Time):分组从客户机到服务器,再回到客户机所花的时间。
- RTT1:
客户机发送一个TCP连接请求报文;
服务器回送一个TCP确认响应报文; - RTT2:
客户机向服务器发送一个HTTP请求报文与TCP确认报文;
服务器接收HTTP请求报文,回送一个HTTP响应报文(包含被请求对象);
服务器返回对象后关闭TCP连接。
持续HTTP连接的两种方式:
- 非流水线方式:客户机只能在前一个响应接收到之后才能发出新的请求。
浪费服务器资源:服务器在发送完上一个对象、等待下一个请求时会出现空闲状态。 - 流水线方式:客户机可在前一个响应接收到之前发出新的请求,服务器连续发送相应对象。
节省RTT时延:TCP连接空闲时间很短。 - HTTP默认方式:流水线方式的持续连接。
HTTP报文格式:
- 请求报文:
请求行:命令(GET、POST、HEAD)、URL、版本。
首部行:对象主机、非持续、浏览器类型、返回对象语言。
回车、换行指示报文的结束。 - 响应报文:
状态行:版本、状态码(200、301、400、404、505)、状态短语。
首部行:关闭连接、发送日期、对象创建或修改日期、对象长度。
实体:数据,如请求的HTML文件。
Cookie:允许Web站点跟踪、识别用户;服务器可以限制用户访问。
- 包括四个部分:
HTTP响应报文的Cookie首部行;
HTTP请求报文的Cookie首部行;
用户主机的Cookie文件并由浏览器管理;
Web站点的后端数据库保存Cookie。 - 应用场景:标识用户、维护购物车列表、推荐商品、建立用户会话状态(Web e-mail)。
Web缓存器(proxy server):代替起始服务器来满足HTTP请求的网络实体,可在客户机、服务器、中间系统工作。
- 客户机发送所有的HTTP请求给Web缓存器;
- 若请求对象在Web缓存器:Web缓存器直接返回对象给客户;
若请求对象不在Web缓存器:Web缓存器向起始服务器请求,然后保存对象副本,返回给客户。 - 优点:减少客户机请求的响应时间、减少起始服务器接入链路的流量。
缺点:存放在缓存中的对象拷贝可能是旧的。
条件GET方法:使Web缓存器证实保存的对象是否为最新。
- 发送条件GET请求报文,检查起始服务器中的对象是否已被修改;
- 若没有发生修改,则返回空数据的响应报文;
若发生修改,则返回新数据的响应报文,包括对象的最后修改时间。
文件传输协议FTP
本地主机用户通过FTP用户代理向远程主机上传或下载文件。
FTP是有状态协议:服务器对每个用户会话状态进行追踪保留,限制同时会话的总数。
FTP的控制信息是带外传送:使用分离的控制连接。
FTP使用了两个并行的TCP连接:
- 控制连接(端口号21):传输用户认证信息、浏览目录、文件请求命令。
- 数据连接(端口号20):传输文件,每次传输都需要新的数据连接。
简单邮件传输协议SMTP
SMTP协议使用的底层传输协议是TCP(端口号25):
- 握手:指明收发双方的邮件地址;
- 邮件报文的传输:不使用中间邮件服务器,TCP连接从发送方到接收方直接相连;
- 结束:关闭TCP连接。
使用MIME将非ASCII数据编码后传输,接收方再解码还原。
SMTP和HTTP的异同:
- 共同:
都从一台主机向另一台主机传送文件;
都使用持久连接。 - 区别:
SMTP是推协议,HTTP是拉协议;
SMTP使用7位ASCII码格式,HTTP数据没有该限制;
SMTP把所有对象放在一个响应报文中,HTTP把每个对象封装在各个响应报文中。
邮件访问协议:
- POP3:特许阶段、事务处理阶段、更新阶段。
- IMAP:联机协议(客户端的相关操作都会同步服务器)、未删除前一直保存邮件。
- HTTP: 在远程服务器上以层次目录方式组织报文,如Hotmail、Yahoo、Mail。
电子邮件应用的协议:
- 从客户端软件到发送方的邮件服务器:HTTP、SMTP
- 从发送方邮件服务器到接收方邮件服务器:SMTP
- 从接收方邮件服务器获取邮件到本地:POP、IMAP、HTTP
域名系统DNS
DNS协议使用的底层传输协议是UDP(端口号53)。
DNS提供的服务:
- 主机名到IP地址的转换;
- 主机别名查询:获得主机别名所对应的规范主机名和IP地址;
- 允许主机查询由DNS服务器实现的分布式数据库的应用层协议;
- 负载均衡:一个域名对应多个IP地址及服务器,当一个DNS域名解析请求到达DNS服务器时,服务器依次用一个IP地址作为响应,以实现负载均衡。
DNS应用采用的是一种分布式数据库系统,为什么不采用集中式数据库系统?
- 单一点失效、流量负担、远程的集中式数据库、维护开销大,不具有扩展性。
域名服务器工作原理:DNS是一个分布式、层次化的数据库。
- 根服务器:13个根服务器,由ICANN管理顶级域名服务器的域名和IP地址。
- 顶级域名服务器:管理在该顶级域名服务器注册的顶级域名以及所有国家的顶级域名。
- 权威域名服务器:管理区的服务器的域名和IP地址。
- 本地域名服务器:主机发出DNS查询报文,报文首先被送往主机的本地域名服务器。
基于DNS的域名解析过程:
- 迭代查询:DNS服务器之间。
- 递归查询:DNS客户端设置的DNS服务器,负责全权处理客户端的DNS查询请求。
点对点技术P2P
位于网络边缘的对等方互相之间可以直接获取对象。
P2P体系结构特点:
- 直接在对等方之间传输:所有内容不经过第三方服务器;
- 高度的可扩展能力:利用众多对等方集合中的资源去分发内容;
- 使用客户机/服务器模式:请求的对等方是客户机,被选中的对等方是服务器。
在P2P中如何定位资源的位置:
- 集中式目标:对等方启动时,通知目标服务器IP地址和共享对象名称。
- 查询泛洪:全分布、公共域协议、加入对等方、对等方离开。
- 层次化结构的维护(KaZaA):组长维护它的子对等方共享的内容。
BitTorrent:用于文件分发的流行P2P协议。
如何从海量的视频中挑选出某些内容,采用流的方式发送给用户?
- 使用单点、庞大的服务器:
单点故障、单点网络拥塞;
远距离用户访问路径长;
相同的视频数据可能在链路上重复传输,浪费骨干链路资源。 - 多份拷贝存储在不同站点提供服务(内容分发网络CDN):
深入:将CDN服务器部署在众多的接入网络中。
邀请做客:在少量靠近接入网的关键位置建造CDN集群备份数据。
套接字编程
套接字(socket):同一台主机内应用层与运输层之间的接口。
- 应用程序开发者可以全部控制套接字应用层端;
- 几乎不能控制套接字运输层端,只能选择运输层协议、设定个别运输层参数。
UDP套接字编程:
- 客户端:socket、sendto、recvfrom、close
- 服务器:socket、bind、sendto、recvfrom
TCP套接字编程:
- 客户端:socket、connect、send、recv、close
- 服务器:socket、bind、listen、accept、recv、send、close
运输层
运输层服务
在运行不同主机上应用进程之间提供逻辑通信。
运输协议运行在端系统中:
- 发送方:将应用报文划分为段,传向网络层。
多路复用:从多个套接字收集数据, 用首部封装数据。 - 接收方:将段重新装配为报文,传向应用层。
多路分解:将接收到的数据根据IP地址和端口号,传递到正确的套接字。
UDP提供不可靠的、不按序的数据交付服务:不建立连接。
TCP提供可靠的、按序的数据交付服务:拥塞控制、流量控制、建立连接。
UDP和TCP都不提供:数据传输的时延保证、最小带宽(吞吐量)保证。
无连接传输:UDP
- 无连接:每个UDP数据段的处理独立于其他数据段;
- 简单:不需要连接状态,很小的数据段首部;
- 没有拥塞控制:UDP能够用尽可能快的速度传递;
- 支持一对一、一对多、多对一和多对多的交互通信;
- UDP数据段可能丢失、传递失序的报文到应用程序。
可靠数据传输机制:仅考虑单向数据传输、双向控制信息流动。
- Rdt1.0:完全可靠信道上的可靠数据传输
缺陷:没有bit错误、没有分组丢失。 - Rdt2.0:具有bit错误的信道
处理:差错检测、接收方反馈控制信息ACK/NAK。
缺陷:ACK/NAK混淆造成重复发送分组。 - Rdt2.1:处理混乱的ACK/NAK
处理:发送方给分组加序号,ACK/NAK混淆时重发报文,接收方丢弃重复的分组。 - Rdt2.2:一个不要NAK的协议
处理:发送方收到重复ACK或不正确的确认将重发报文。 - Rdt3.0:具有出错和丢失的信道
处理:发送者等待合理的确认时间,在定时器超时时重发报文。
停等协议:发送方发送一个报文,然后等待接受方的响应。
流水线机制:发送方允许发送多个在路上的还没有确认的报文。
GBN(go-Back-N):
- 发送方:定时器超时,重传所有已经发送还没有收到ACK确认的分组。
- 接收方:没有接收缓冲区,总是为正确接收的最高序号的分组发送ACK。
SR(选择重传):
- 发送方:每个未被确认的报文都有一个定时器,只重发没有收到确认的分组。
- 接收方:分别确认已经收到的分组,必要时缓冲报文, 最后按序提交给上层。
- 两难选择:要求窗口小于或等于序号空间大小的一半。
面向连接传输:TCP
- 点到点:一个发送者,一个接收者;
- 面向连接:在数据交换前握手(交换控制信息),初始化发送方和接收方的状态;
- 可靠按序的字节流:没有信息边界;
- 流水线:TCP拥塞控制和流量控制设置窗口大小,具有收发缓冲区;
- 全双工数据:同一个连接上的双向数据流。
- 序号:字节流中的位置。
- 确认号:已收到序号的下一个序号。
设置定时器:
- TimeoutInterval(超时)= EstimatedRTT(样本RTT均值)+ 4×DevRTT(安全余量)
- 安全余量:SampleRTT偏离EstimatedRTT多少的估计。
可靠数据传输机制:TCP在IP不可靠服务之上创建Rdt服务。
- 发送方:从应用层接收数据,用序号创造一个数据段,启动定时器,设置超时间隔。
触发重发:超时事件、重复确认。 - 快速重传:在定时器超时之前重发丢失的报文段。
速度匹配服务:发送速率和接收应用程序的提取速率匹配。
流量控制:发送方发送太多太快的数据,接收缓冲区溢出。
- 使用接收窗口:接收缓冲区的剩余空间;
- 接收方:在报文段中宣告接收窗口的剩余空间;
- 发送方:限制没有确认的数据不超过接收窗口,保证接收缓冲区不溢出。
TCP的建立:三次握手
- 客户机向服务器发送TCP SYN报文段:指定初始序号(随机产生),没有数据;
- 服务器收到SYN报文段, 用SYN/ACK报文段回复:分配缓冲区,指定初始序号;
- 客户机收到SYN/ACK,用ACK报文段回复:可能包含数据。
为什么最后由客户端应答服务器确认消息的步骤不能缺少?
- 客户端确保服务器知道自己的正确序号:通过第二次握手的SYB/ACK确认;
- 服务器确保客户端知道自己的正确序号:通过第三次握手的ACK确认。
TCP的释放:四次挥手
- 客户机向服务器发送TCP FIN控制报文段:半连接状态,告知不再发送数据;
- 服务器收到FIN,用ACK回复:半关闭连接,告知不再接收数据;
- 客户机收到ACK,直到服务器发送FIN:进入超时等待状态;
- 客户机收到FIN,用ACK回复,服务器受到ACK:连接关闭。
为什么要进入超时等待状态?
- 客户机收到服务器的ACK不会马上释放缓冲区,因为服务器可能有数据正在传输。
拥塞控制:太多源主机发送太多太快的数据,网络来不及处理。
- 拥塞的表现:丢失分组(路由器的缓冲区溢出)、长延迟(路由器的缓冲区排队)。
- 拥塞的代价:链路需要运输多个分组的拷贝、分组丢失后上游路由器的发送被浪费。
- 拥塞控制的方法:
端到端拥塞控制:从端系统观察到的丢失和延迟推断出拥塞。
网络辅助的拥塞控制:路由器给端系统提供反馈,指明发送者应该发送的速率。
TCP拥塞控制:端到端拥塞控制
发送方如何感知拥塞?
- 丢失事件:超时、3个重复的ACK。
- 发送方在发生丢失事件后降低发送速率(CongWin)
三个机制:
- 慢启动:窗口以2的指数增长,直到发生丢失事件或达到阈值(ssthresh)。
- 对拥塞事件作出反应:
CongWin < 阈值:慢启动阶段,窗口指数增长;
CongWin > 阈值:拥塞避免阶段,窗口线性增长;
发生丢失事件:阈值 = CongWin ÷ 2;
超时:CongWin = 1 MSS(最大报文段长度);
3个重复的ACK:(Tahoe)CongWin = 1 MSS,(Reno)CongWin = 阈值 + 3 MSS。 - AIMD:加性递增(CongWin + 1 MSS),发生丢包事件后乘性递减(CongWin ÷ 2)。
网络层
网络层服务
- 尽力而为服务:分组的定时、接收顺序不能被保证,分组不能保证最终交付;
- 发送方:封装报文段为数据报,传输到接收方;
- 接收方:递交报文段给传输层;
转发(forwarding):将分组从路由器的输入端口转移到正确的路由器输出端口。
- 转发表:确定本路由器上的本地转发。
路由(routing):确定分组从发送方传输到接收方所经过的路径(或路由)。
- 路由算法:确定通过网络的端到端路径。
数据平面:路由器本身的功能,决定如何转发。
控制平面:网络范围内,决定如何路由。
- 传统的路由算法:在路由器内实现。
- 软件定义网络SDN(Software Defined Networking):在远程服务器上实现。
路由器
路由器的两个核心功能:
- 运行路由算法/协议:RIP、OSPF、BGP;
- 将分组从路由器的输入链路传送到正确的输出链路。
路由器的体系结构:
- 输入端口:
线路端接模块、数据链路处理模块、查找与转发模块。 - 交换结构(路由处理):
基于内存:交换由CPU(选路处理器)控制完成,每个分组穿过两次总线。
基于总线:通过一条共享总线直接传送分组,不需要选路处理器的干预。
纵横式(crossbar):2n条总线作为交换矩阵。 - 输出端口:
排队:交换结构将分组交付给输出端口的速率超过输出链路速率。
丢包:输出端口的缓冲区溢出。
IP协议
IP地址:分配给主机/路由器接口的标识符。
- 接口:主机/路由器与物理链路之间的边界。
- 主机可以有多个接口、路由器有多个接口、每个接口有一个IP地址。
IP地址有两种:
- IPv4:32个二进制位长(4字节),常用点分十进制表示。
- IPv6:128个二进制位长(16字节),常用冒号分隔表示。
IPv4数据报格式:
IPv4数据报分片和重组:
IPv4编址:
- 地址结构:网络号(主机所在网络的编号)、主机号(主机在网络中的编号)。
- 特殊IP地址段:
本地地址:127.0.0.1-127.255.255.254
私有地址:10.x.x.x、172.16.x.x-172.31.x.x、192.168.x.x
无法识别的网络或主机(本地地址):0.0.0.0
受限的广播地址:255.255.255.255 - 网络地址:IP地址中的网络号不变,主机号取0。
什么是子网?
- 设备接口的IP地址具有同样的网络部分;
- 没有路由器的介入,物理上能够相互到达。
- 子网掩码:网络号和子网号取1,主机号取0。
路由表(使用子网掩码的分组转发):目的网络地址、子网掩码、下一跳地址。
划分子网:
无分类域间路由CIDR(Classless Inter-Domain Routing):
- 斜线记法(CIDR记法):在IP地址后面加上斜线/和数字,数字指定网络前缀的长度。
- CIDR地址块:网络前缀都相同的连续的IP地址。
- 路由聚合(构造超网):一个CIDR地址块可以表示分类IP的多个分类地址。
DHCP协议
主机如何得到IP地址?
- 手工指定:保存在系统配置中。
- 动态主机配置协议DHCP(Dynamic Host Configuration Protocol):自动从DHCP服务器得到IP地址。
DHCP协议的工作过程:
- 主机广播:DHCP DISCOVER(发现报文)
- DHCP服务器:DHCP OFFER(提供报文)
- 主机请求IP地址:DHCP REQUEST(请求报文)
- DHCP服务器确认:DHCP ACK/NACK(设置计时器)
- 主机终止租用期:DHCP RELEASE(释放报文)
DHCP动态地址配置:
DHCP可分配:客户的IP地址或网关、DNS服务器的IP地址或域名、子网掩码。
网络地址转换NAT:对外部网络来讲,本地网络只用一个IP地址,本地网络内部设备不可见。
路由算法
默认路由器(第一跳路由器):与主机直接相连的路由器。
选路算法:根据给定的网络抽象图,找出从源节点到目的节点的最低费用路径。
- 全局路由算法:所有路由器拥有完整的网络拓扑信息和链路费用信息。
链路状态路由算法LS(Dijkstra算法):不断添加最低费用路径。 - 分布式路由算法:以迭代的、分布式的方式计算最低费用路径。
距离向量路由算法DV:分布式、迭代、异步、自我终结。
LS算法与DV算法比较:
- 消息复杂度:LS算法知道每条链路的费用;DV算法仅知道直接相连邻居的费用。
- 收敛速度:LS算法可能振荡;DV算法收敛较慢,可能选路回环、计数到无穷的问题。
- 健壮性:LS算法仅计算自己的转发表;DV算法中不正确的计算值会扩散到整个网络。
层次选路:
- 自治系统AS(Autonomous System):一个区域内的路由器组成集合。
- 网关路由器:和其他自治系统内的路由器直接相连的路由器。
- 域内路由协议IGP:
路由信息协议RIP(距离向量路由算法)
开放最短路径优先OSPF(链路状态路由算法) - Internet域间选路BGP:
软件定义网络SDN
软件定义网络SDN(Software Defined Network):通过软件编程的形式定义和控制网络。
SDN并不是一个具体的技术,它是一种网络设计理念,规划了网络的各个组成部分(软件、硬件、转发面和控制面)及相互之间的互动关系。
SDN体系结构的关键特征:
- 基于流的转发;
- 数据平面与控制平面分离;
- 网络控制功能:位于数据平面交换机外部;
- 可编程的网络。
OpenFlow协议:SDN中控制器与转发层之间的通信接口标准,运行在SDN控制器和(SDN 控制的)交换机或其他(实现OpenFlow API的)设备之间。
链路层
链路层服务
- 封装成帧,链路接入:
封装数据报为数据帧,增加头部,尾部信息;
如果是共享链路,接入链路;
在数据帧头部中,用MAC地址来标识源和目的MAC地址,不同IP地址; - 在相邻节点之间可靠传输数据帧:
在比特错误率很低的链路(光纤、双绞线)很少使用;
无线链路:高比特错误率; - 流量控制:
用于控制发送节点向直接相连的接收节点发送数据帧的频率; - 差错检查:
差错可能由信号衰减、噪声引入;
接收方检测是否出现错误,通知发送方重传或丢弃数据帧; - 错误纠正:
接收方标识和纠正比特错误,而不需要请求重传; - 半双工和全双工:
在半双工模式,链路的两个节点都可以发送数据,但是不能同时发送;
链路层在主机(主要是网络适配器)和网络设备(路由器)上实现;
- 发送方:封装数据报为数据帧,增加差错检测、可靠数据传输、流量控制等机制;
- 接收方:执行检查错误、可靠数据传输、流量控制等机制;抽取数据报将其递交给上层;
差错检测和纠错
差错检测和纠错技术越好,越复杂,开销更大。
奇偶校验:最基本的方法
一比特奇偶校验:
- 发送方:在数据后面附加奇偶校验位,使1的个数是奇数(奇校验)或偶数(偶校验);
- 接收方:检测收到的信息中1的个数,如果偶校验发现奇数个1或奇校验发现偶数个1,说明有奇数个比特差错,但不能发现偶数个比特差错;
- 若比特差错概率很小,一比特奇偶校验可满足要求;若差错集中突发,一帧中未检测到的差错的概率达到50%;
二维奇偶校验:
- 将数据划分为i行j列,对每行和每列分别计算奇偶值,结果的i+j+1个奇偶比特构成了帧的差错检测比特;
- 可以检测并纠正(数据或校验位中)单个比特差错;能够检测但不能纠正分组中任意两个比特差错;
Internet校验和:常用于运输层(UDP、TCP校验和)
- 发送方:将数据分成若干16位的整数并求和,对得到的和逐位取反作为检查和;
- 接收方:对收到的信息按与发送方相同的方法求和,全1说明收到的数据无差错,其中有0说明收到的数据出现差错;
- 分组开销小,但差错检测能力弱;
循环冗余检测CRC(cyclic redundancy check):常用于链路层
- 发送方和接收方先共同选定一个生成多项式G(r+1位),最高有效位是1;
- 发送方:将数据后面添加r个0,除以给定的生成多项式G,所得余数即为CRC校验;
- 接收方:用生成多项式G去除接收到的信息,余数为0说明传输正确,余数非0说明传输发生差错;
- 能检测小于r+1位的突发差错、任何奇数个差错。
多路访问链路和协议
两种网络链路:
- 点对点链路:链路两端各一个节点,一个发送和一个接收。
- 广播链路:多个节点连接到一个共享的广播信道。
广播:任何一个节点传输一帧时,信号在信道上广播,其他节点都可以收到一个拷贝。
多路访问协议:协调多个节点在共享广播信道上的传输,避免多个节点同时使用信道,发生冲突,产生互相干扰。
多路访问协议类型:
信道划分协议:把信道划分为小片,给节点分配专用的小片。
- 时分多路访问TDMA(time division multiple access)
- 频分多路访问FDMA(frequency division multiple access)
- 码分多路访问CDMA(frequency division multiple access)
随机访问协议:发送节点以信道全部速率发送,发生冲突时,冲突的每个节点分别随机等待一段时间再重发,直到发送成功。
- ALOHA协议(slot ALOHA、pure ALOHA)
- 载波监听多路访问CSMA协议
载波侦听:节点发送前先监听信道,信道忙则随机等待一段时间再侦听,信道空则开始传输整个数据帧。 - 带冲突检测的载波监听多路访问CSMA/CD协议(used in Ethernet)
增加载波侦听和冲突检测两个规则:先听后说、边说边听。
冲突检测:一旦检测到冲突就立即停止传输,尽快重发。 - 带冲突避免的载波监听多路访问CSMA/CA协议(used in 802.11)
轮流协议:通过轮流访问信道避免冲突,要发送的节点越多轮流时间越长。
- 轮询协议(polling):主节点邀请从节点依次传送。
- 令牌传递协议(token passing):控制令牌顺序从一个节点传递到下一个节点。
以太网CSMA/CD的运行机制:
- 适配器从网络层获得一个数据报,封装成帧;
- 如果适配器侦听到信道空闲则开始传送帧,如果信道忙则等到信道空闲才传送帧;
- 如果适配器传送整个帧时,都没有监听到其它信号,则完成该帧的传送;
- 如果适配器监听到其它信号,则中止传送,并发送一个拥塞信号;
- 中止传送后,适配器会进入指数回退阶段(二进制指数回退算法),重新执行步骤2。
局域网LAN
局域网LAN(Local Area Network):网络为一个组织所拥有,且地理范围和站点数目均有限。
常见的网络拓扑结构:星型结构、总线结构、环型结构、树型结构、网状结构。
局域网体系结构:
- IEEE802与OSI参考模型对应关系:
- 几个基础性IEEE802标准的关系:
MAC地址
每个节点有网络层地址(IP地址)和链路层地址(MAC地址)。
MAC地址(物理地址、LAN地址):
- 节点网卡本身所带的地址(唯一),生产时固化在其ROM里;
- 长度通常为6字节(48比特),用16进制表示,例如:1A-2F-BB-76-09-AD;
MAC地址分配:
- MAC地址是平面结构:同一节点在任何网络中都有同样的MAC地址。
- IP地址具有层次结构:节点移动到不同网络时,其IP地址发生改变。
MAC地址识别:
- 由网卡负责MAC地址的封装和识别。
- 发送适配器:将目的MAC地址封装到帧中并发送,所有其他适配器都会收到这个帧。
- 接收适配器:检查帧的目的MAC地址是否与自己MAC地址相匹配,不匹配则丢弃帧。
- 广播帧:FF-FF-FF-FF-FF-FF
ARP地址解析协议
通信时进行地址转换:主机名(应用层)→IP地址(网络层)→MAC地址(链路层)
- DNS域名系统:将主机名解析到IP地址。
- ARP地址解析协议:将IP地址解析到MAC地址。
位于同一局域网的两台主机通信:
- 主机A希望发送数据报给主机B:B的MAC地址不在A的ARP映射表中;
- 主机A广播ARP查询分组:局域网中所有节点收到ARP查询分组;
- 主机B收到ARP查询分组,返回B的MAC地址给主机A(单播);
- 主机A在它的ARP表中缓存IP-MAC地址对,直到信息超时被删(软状态);
发送数据报到子网以外:
- 主机A构建IP数据报,源地址是A的IP地址,目的地址是B的IP地址;
- 主机A构建链路层数据帧,目的地址是路由器左边端口的MAC地址;
- 数据帧从主机A发送到路由器,路由器收到数据帧,抽取出数据报递交到IP层;
- 路由器R将该数据报封装成链路层帧,目的地址是主机B的MAC地址;
以太网(Ethernet)
以太网是第一个广泛使用的局域网技术。
最初的以太网是采用同轴电缆来连接各个设备的,如今则广泛使用双绞线、光纤等。
以太网的帧结构:
- 前同步码:使接收方和发送方的时钟同步,接收方一旦收到连续的8字节前同步码,可确定有帧传过来,收到后删除不向上层传。
- 类型:以太网可以多路复用(支持)多种网络层协议,通过类型字段区分。
以太网向网络层提供的服务:
- 无连接服务:通信时,发送方适配器不需要先和接收方适配器握手。
- 不可靠的服务:接收到的帧可能包含比特差错。
收到正确帧,不发确认帧;
收到出错帧,丢弃该帧,不发否定帧;
发送适配器不会重发出错帧,丢弃数据的恢复是通过终端传输层的可靠数据传输机制来实现的; - 以太网的MAC协议:使用无时隙的CSMA/CD协议(二进制指数回退)。
链路层交换机
- 链路层设备:存储转发数据帧;支持多节点同时传输,而不会发生碰撞。
- 透明:主机不关心是否存在交换机。
- 即插即用和自学习:交换机不需要手工配置,通过自学习建立交换表。
链路层交换机的工作原理:数据帧的过滤/转发
路由器和交换机的异同:
- 两者都是存储转发设备:
路由器:网络层设备(检查网络层头部)
交换机:链路层设备(检查链路层头部) - 两者都有转发表:
路由器:使用路由算法计算转发表,基于IP地址转发。
交换机:通过泛洪、自学习来学习转发表,基于MAC地址转发。
虚拟局域网VLAN
利用支持VLAN的交换机,可以在一个实际的物理局域网内,定义多个虚拟的局域网。
- 基于端口的VLAN:
- 跨越多个交换机的VLAN: