提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 第一章 计算机网络和因特网
    • 一、基本术语和概念
    • 二、 网络核心
    • 三、协议层次及其服务模型
  • 第二章 应用层
    • 一、应用层协议原理
    • 二、应用层协议
      • 1.Web和HTTP
      • 2.因特网中的电子邮件
      • 3.DNS:因特网的目录服务
      • 4.P2P文件分发
      • 5.视频流和内容分发网
    • 三、套接字编程
  • 第三章 运输层
    • 一、概述和运输层服务
    • 二、多路复用和多路分解
    • 三、无连接运输:UDP
    • 四、可靠传输原理
      • 1.构造可靠数据传输协议
      • 2.流水线可靠数据传输协议
      • 3.回退N步
      • 4.选择重传
    • 五、面向连接的运输:TCP
      • 1.TCP连接
      • 2.TCP报文段结构
      • 3.往返时间的估计与超时
      • 4.可靠数据传输
      • 5.流量控制
      • 6.TCP连接管理
    • 六、拥塞控制原理
    • 七、TCP拥塞控制
  • 第四章 网络层:数据平面
    • 一、网络层概述
    • 二、路由器工作原理
      • 1.输入端口和处理和基于目的地转发
      • 2.交换
      • 3.何时出现排队
      • 4.分组调度:
    • 三、网际协议:IPv4、寻址、IPv6及其他
    • 四、通用转发和SDN
  • 第五章 网络层:控制平面
    • 一、概述
    • 二、路由选择算法
    • 三、因特网中自治系统内部的路由选择
    • 四、ISP之间的路由选择:BGP
    • 五、SDN控制平面
    • 六、ICMP:因特网控制报文协议
    • 七、网络管理和SNMP
  • 总结

第一章 计算机网络和因特网


一、基本术语和概念

主机或端系统:包括传统设备(桌面PC、Linux工作站、服务器)和非传统设备(家电、平板等)
路由器和链路层交换机:当今因特网中两种最著名的分组交换机。链路层交换机通常用于接入网中,而路由器通常用于网络核心中。
ISP(Internet Service Provider):因特网服务提供商,每个ISP自身就是一个由多台分组交换机和多段通信链路组成的网络,各ISP为端系统提供了各种不同类型的网络接入。
RFC:因特网标准(Internet standard)由因特网工程任务组(Internet Engineering Task Force,IETF)研发,IETF的标准文档称为请求评论(Request For Comment)。
套接字接口:与因特网相连的端系统提供了一个套接字接口,该接口规定了运行在一个端系统上的程序请求因特网基础设施向运行在另一个端系统上的特定目的地程序交付数据的方式
协议:定义了在两个或多个通信实体之间交换和接收这些报文的格式和顺序,以及报文发送和/或 接收一条报文或其他事件所采取的动作
在两台物理上连接的计算机中,硬件实现的协议控制了两块网络接口卡的"线上"的比特流;在端系统中,拥塞控制协议控制了在发送方和接收方之间传输的分组发送的速率;路由器中的协议决定了分组从源到目的地的路径。
接入网:将端系统物理连接到其边缘路由器的网络,边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器
描述因特网的方式
一是描述因特网的构成,即构成因特网的基本硬件和软件组件,二是根据为分布式应用提供服务的联网基础设施来描述因特网
宽带住宅接入有两种最流行的类型
数字用户线(Digital Subscriber Line)和电缆
住户通常从提供本地电话接入的本地电话公司处获得DSL因特网接入,每个用户的DSL调制解调器使用现有的电话线与位于电话公司的本地中心局(CO)中的数字用户接入复用器(DSLAM)交换数据。

电缆因特网接入(cable Internet access)利用了有线电视公司现有的有线电视基础设施.因为在这个系统中应用了光纤和同轴电缆,所以它经常被称为混合光纤同轴电缆(Hybrid Fiber Coax,HFC)。

二、 网络核心

电路交换和分组交换(不再介绍)
传输时延、传播时延、排队时延、处理时延、分组丢失
传输时延是路由器推出分组所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器中间的距离无关。传播时延是一个比特从一台路由器传播到另一台路由器所需要的时间,它是两台路由器之间距离的函数,而与分组长度或链路传输速率无关
当表征排队时延时,人们通常使用统计量来度量,如平均排队时延、排队时延的方差和排队时延超过某些特征值的概率。
随着流量强度接近于1,平均排队时延迅速增加。该强度的少量增加将导致时延大比例增加

频分复用、时分复用(不再介绍)
转发表:每台路由器具有一个转发表,用于将目的地址(或目的地址的一部分)映射成为输出链路,当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路,路由器则将分组导向该出链路。
网络的网络
存在点(Point of Presence,PoP):PoP存在于等级结构的所有层次,但底层(接入ISP)等级除外,一个PoP只是提供商网络中的一台或多台路由器(在相同位置)群组,其中客户ISP能够与提供商ISP连接。对于要与提供商PoP连接的客户网络,它能从第三方电信提供商租用高速链路将他的路由器之一直接连接到位于该PoP的一台路由器。
多宿:任何ISP(除了第一层ISP)可以选择多宿,即可以与两个或更多提供商ISP连接。当一个ISP多宿时,即使他的提供商之一出现故障,它仍然能够继续发送和接收分组。
对等:位于相同等级结构层次的一对临近ISP能够对等,能够直接将它们的网络连到一起,使他们之间所有流量经直接连接而不是通过上游的中间ISP传输。当两个ISP对等时,通常不进行结算,即任一个ISP不向其对等付费。
因特网交换点(Internet Exchange Point,IXP):IXP是一个汇合点,多个ISP能够在这里一起对等

三、协议层次及其服务模型

应用层协议和运输层协议总是在端系统中用软件实现的,物理层和数据链路层负责处理跨越特定链路的通信,通常在与给定链路相关联的网络接口卡中实现,网络层通常是硬件和软件实现的混合体。
运输层在应用程序端点之间传送应用报文,运输层的分组称为报文段
网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机
链路层将分组从一个节点移动到链路上的下一个节点,链路层分组称为

第二章 应用层

网络应用是计算机网络存在的理由,如果我们不能构想出任何有用的应用,也就没有任何必要去设计支持它们的网络协议了。

一、应用层协议原理

1.网络核心设备并不在应用层上起作用,而仅在较低层起作用,特别是在网络层及下面层次起作用。这种基本设计,即将应用软件限制在端系统的方法,促进了大量的网络应用程序的迅速研发和部署。

2.网络应用程序体系结构
客户服务器体系结构:特征:客户之间不能直接通信;服务器具有固定的、周知的IP地址,并且服务器总是打开的,客户总是能够通过向该服务器的IP地址发送分组来与其联系
P2P体系结构:对位于数据中心的专用服务器有最小的(或者没有)依赖,相反,应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。特性:自扩展性,通常不需要庞大的服务器基础设施和服务器带宽,但由于高度非集中式结构,面临安全性、性能和可靠性挑战。

3.进程通信
在一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。
进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。套接字是同一台主机内应用程序与运输层之间的接口。由于该套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口(Application Programming Interface, API)

端口号查询:http://www.iana.org

4.可供应用程序使用的运输服务
可靠数据传输、吞吐量、定时、安全性

今天的因特网通常能够为时间敏感应用提供满意的服务,但它不能提供任何定时或带宽保证。
5.因特网提供的运输服务
TCP服务模型包括面向连接服务和可靠数据传输服务。

面向连接的服务:在应用层数据报文开始流动之前,TCP让客户和服务器互相交换运输层控制信息。在握手阶段,一个TCP连接就在两个进程的套接字之间建立了。这条连接是全双工的,连接双方的进程可以在此连接上同时进行报文收发。当应用程序结束报文发送时,必须拆除该连接。

可靠的数据传输服务:通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据。

TCP的加强版:安全套接字(Secure Sockets Layer, SSL),用SSL加强后的TCP不仅能够做传统的TCP所做的一切,而且提供了关键的进程到进程的安全性服务,是在应用层实现的

UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。没有握手过程,提供不可靠数据传送服务,没有拥塞控制机制。

二、应用层协议

区分网络应用和应用层协议是很重要的,应用层协议只是网络应用的一部分。

1.Web和HTTP

HTTP概况
Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),它是Web的核心。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式
每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名
HTTP使用TCP作为它的支撑运输协议,不用担心数据丢失,也不关注TCP从网络的数据丢失和乱序故障中恢复的细节,那是TCP以及协议栈较低层的工作
HTTP是无状态协议
HTTP既能使用非持续连接,也能够使用持续连接。
非持续连接的缺点:1.必须为每个请求的对象建立和维护一个全新的连接,对于每个这样的连接,在客户和服务器中都要分配TCP缓冲区和保持TCP变量,这给Web服务器带来了严重的负担 2.每一个对象要经受两倍RTT交付时延,即一个RTT用于创建TCP,另一个RTT用于请求和接收一个对象
请求报文

使用GET方法时实体体为空,而使用POST方法时才使用该实体体。如果方法字段的值为POST时,则实体体中包含的就是用户在表单字段中的输入值。GET方法使用 ?& 这种方式实现URL的拓展
HEAD方法进行调试跟踪;PUT方法用于向Web服务器上传对象;DELETE方法允许用户或应用程序删除Web服务器上的对象
响应报文

cookie
cookie可以在无状态的HTTP之上建立一个用户会话层

Web缓存
Web缓存器(Web cache)又叫代理服务器(proxy server),Web缓存器既是服务器又是客户,通常由ISP购买并安装。
优点:可以大大较少对客户请求的响应时间;大大减少一个机构的接入链路到因特网的通信量;大大减低因特网上的Web流量,从而改善所有应用的性能
我的理解:Web缓存器和计算机的多级缓存很相似,相比较提高链路的速率,这种方式成本更低,效率更高

条件GET方法
HTTP有一种机制,允许缓存器证实它的对象是最新的,即条件GET方法,此时(1)请求报文使用GET方法,并且(2)请求报文中包含一个"If -Modified-Since:"首部行。
当服务器上的内容被更新之后,才向缓存器发送更新后的内容,否则不发送

2.因特网中的电子邮件

一个典型的邮件发送过程:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。

SMTP
SMTP是因特网电子邮件中主要的应用层协议,使用TCP可靠数据传输服务。
SMTP一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。

与HTTP对比
相同点:这两个协议都用于从一台主机向另一条主机传送文件:HTTP从Web服务器向Web客户(通常是一个浏览器)传送文件(也称为对象);SMTP从一个邮件服务器向另一个邮件服务器传送文件(即电子邮件报文)。当进行文件传送时,持续的HTTP和SMTP都使用持续连接
区别:
(1)HTTP主要是一个拉协议,即在方便的时候,某些人在Web服务器上装载信息,用户使用HTTP从该服务器拉取这些信息,TCP连接由想接收文件的机器发起,。SMTP基本上是一个推协议,即发送邮件服务器把文件推向接收邮件服务器,TCP连接由要发送该文件的机器发起。
(2)SMTP要求每个报文采用7比特ASCII码格式,HTTP数据则不受这些限制
(3)HTTP把每个对象封装到它自己的响应报文中,而SMTP则把所有报文对象放在一个报文之中
邮件访问协议:第三版的邮局协议 Post Office Protocol — Version 3(POP3)、因特网邮件访问协议 Internet Mail Access Protocol (IMAP)以及HTTP
为什么要邮件服务器中转?没有邮件服务器,为了能够即使接收可能在任何时候到达的新邮件,用户的PC 必须总是不间断地运行着并一直保持在线,这是不现实的。
POP3
POP3按照三个阶段进行工作:特许、事务处理、更新
特许阶段:用户代理发送(以明文形式)用户名和口令以鉴别用户。
事务处理阶段:用户代理取回报文等操作
更新阶段:发生在客户发出quit的命令之后,目的是结束该POP3会话,这时邮件服务器删除那些被标记为删除的报文
IMAP
POP3协议没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法
IMAP服务器把每个报文与一个文件夹联系起来,收件人能够把邮件移到一个新的、用户创建的文件夹中。允许用户代理获取报文的某些部分。

3.DNS:因特网的目录服务

DNS(Domain Name System)是(1)一个由分层的DNS服务器实现的分布式数据库(2)一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是允许BIND(Berkeley Internet Name Domain)软件的UNIX机器。DNS协议运行在UDP之上,使用53号端口
DNS是应用层协议原因在于:(1)使用客户-服务器模式运行在通信的端系统之间(2)在通信的端系统之间通过下面的端到端运输协议来传送DNS报文
DNS提供的服务:进行主机名到IP地址的转换、主机别名、邮件服务器别名、负载分配(一个IP地址集合与同一个规范主机名相联系,DNS在所有这些冗余的Web服务器之间循环分配了负载)
DNS工作机理概述
DNS是一个提供简单、直接的转换服务的黑盒子,但事实上,实现这个服务的黑盒子非常复杂,它由分布于全球的大量DNS服务器以及定义了DNS与查询主机通信方式的应用层协议组成。
分布式、层次数据库
有3种类型的DNS服务器:根DNS服务器、顶级域(Top-Level Domain,TLD)DNS服务器和权威DNS服务器

DNS查询示例:实践中,通常从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的

详见89、90页(没啥说的)
DNS资源记录(Resource Record,RR)(Name,Value,Type,TTL)详见89页,没啥说的
DNS报文格式

在dos窗口输入 nslookup 能够向任何DNS服务器发送DNS查询

4.P2P文件分发

Web、电子邮件和DNS都采用了客户-服务器体系结构,极大地依赖于总是打开的基础设施服务器,使用P2P体系结构对总是打开的基础设施服务器有最小的(或者没有)依赖。
在客户-服务器文件分发中,服务器必须向每个对等方发送文件的一个副本,即服务器承受了极大的负担,并且消耗了大量的服务器带宽。在P2P文件分发中,每个对等方能够向任何其他对等方重新分发它已经收到的该文件的任何部分
客户—服务器 和 P2P体系结构的最小分发时间如图,可以看出对于客户—服务器体系结构,随着对等方数量的增加,分发时间呈线性增长并且没有界,然而P2P体系结构,最小分发时间不仅总是小于客户—服务器体系结构的分发时间,并且对于任意的对等方数量N,总是小于1小时。因此具有P2P体系结构的应用程序能够是自拓展的,这种拓展性的直接成因是对等方除了是比特的消费者还是它们的重新分发者。

BitTorrent
BitTorrent是一种用于文件分发的流行的P2P协议,参与一个特定文件分发的所有对等方的集合被称为一个洪流。
每个洪流具有一个基础设施节点,称为追踪器。当一个对等方加入某洪流时,它向追踪器注册自己,并周期性地通知追踪器它仍在洪流中。以这种方式,追踪器跟踪参与在洪流中的对等方。一个给定的洪流可能在任何时刻具有数以百计或数以千计的对等方
对等方从邻居请求哪些块?
对等方采用最稀缺优先的技术,请求它邻居中副本最少的块,目的是均衡每个块在洪流中的副本
数量。
对等方应当向哪些向她请求块的邻居发送块?
对等方采用 “一报还一报” 的激励机制,根据当前能够以最高速率向她提供数据的邻居,给出其优先权。最终对等方能够以趋向于找到彼此的协调的速率上载。

5.视频流和内容分发网

视频是一系列图像以恒定的速率(每秒24或30张图像)来展现,一幅未压缩、数字编码的图像由像素阵列组成,其中每个像素是由一些比特编码来表示亮度和颜色。视频的一个重要特征是能够被压缩,因而可用比特率来权衡视频质量。
DASH(Dynamic Adaptive Streaming over HTTP) 允许客户使用不同的以太网接入速率流式播放具有不同编码速率的视频。使用低速3G连接的客户能够接收一个低比特率(和质量)的版本,使用光纤连接的客户能够接收高质量的版本。如果端到端带宽在会话过程中改变的话,DASH允许客户适应可用带宽。这种特色对于移动用户特别重要,当移动用户相对于基站移动时通常他们能够感受到其可用带宽的波动。
内容分发网(Content Distribution Network,CDN)
CDN管理分布在多个地理位置上的服务器,在它的服务器中存储视频的副本,并且所有试图将每个用户请求定向到一个将提供最好的用户体验的CDN位置。
CDN通常采用两种不同的服务器安置原则
(1)深入 该原则是通过在遍及全球的接入ISP中部署服务器集群来深入到ISP的接入网中。其目标是靠近端用户,通过减少端用户和CDN集群之间链路和路由器的数量,从而改善用户感受的时延和吞吐量。因为这种高度分布式设计,维护和管理集群的任务成为挑战
(2)邀请做客 该原则是通过在少量关键位置建造大集群来邀请到ISP做客。不是将集群放在接入ISP中,这些CDN通常将它们的集群放置在因特网交换点(IXP)。与深入设计原则相比,邀请做客设计通常产生较低的维护和管理开销,可能以对端用户的较高时延和较低吞吐量为代价。

CDN操作

三、套接字编程

UDPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort))
print("The Server is ready to receive")
while True:message,clientAddress = serverSocket.recvfrom(2048)modifiedMessage = message.decode().upper()serverSocket.sendto(modifiedMessage.encode(),clientAddress)

UDPClient.py

from socket import *
serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET,SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(),(serverName,serverPort))
modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()

TCPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(1)
print("The Server is ready to receive")
while True:connectionSocket,addr = serverSocket.accept()sentence = connectionSocket.recv(1024).decode()capitalizedSentence = sentence.upper()connectionSocket.send(capitalizedSentence.encode())connectionSocket.close()

TCPClient.py

from socket import *
serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET,SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
sentence = input('Input lowercase sentence:')
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(1024)
print("From Server:",modifiedSentence.decode())
clientSocket.close()

第三章 运输层

网络层负责在两个端系统之间的交付服务,运输层负责在两个不同端系统上的应用进程之间的交付服务

一、概述和运输层服务

1.运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能,是在端系统中而不是在路由器中实现的
运输层和网络层的关系
运输协议能够提供的服务常常受制于底层网络层协议的服务模型,如果网络层协议无法为主机之间发送的运输层报文段提供时延或带宽保证的话,运输层协议也就无法为进程之间发送的应用程序报文提供时延或带宽保证。
然而,即使底层网络协议不能在网络层提供相应的服务,运输层协议也能提供某些服务。如即使底层网络协议是不可靠的,也就是说网络层协议会使分组丢失、篡改和冗余,运输协议也能为应用程序提供可靠的数据传输服务。即使网络层不能保证运输层报文段的机密性,运输协议也能使用加密来确保应用程序报文不被入侵者读取。
因特网运输层概述
进程到进程的数据交付差错检查是两种最低限度的运输层服务,也是UDP所能提供的仅有的两种服务。特别是,与IP一样,UDP也是一种不可靠的服务,即不能保证一个进程所发送的数据能够完整无缺地(或全部!)到达目的进程
TCP为应用程序提供了几种附加服务,可靠数据传输和拥塞控制,而UDP流量是不可调节的,使用UDP传输的应用程序可以根据其需要以其愿意的任意速率发送数据。

二、多路复用和多路分解

在接收主机中的运输层实际上并没有直接将数据交付给进程,而是将数据交给了一个中间的套接字。每个运输层报文段中具有几个字段,在接收端运输层检查这些字段,标识出接收套接字,进而将报文段定向到该套接字。
将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用

通常,应用程序的客户端让运输层自动地(并且是透明地)分配端口号,而服务器端则分配一个特定的端口号
一个UDP套接字是由一个二元组全面标识的,该二元组包含一个目的IP地址和一个目的端口号,因此如果两个UDP报文段有不同的源IP地址和/或源端口号,但具有相同的目的IP地址和目的端口号,那么这两个报文段将通过相同的目的套接字被定向到相同的目的进程
TCP套接字是由一个四元组(源IP地址,源端口号,目的IP地址,目的端口号)来标识的,主机使用全部4个值来将报文段定向(分解)到相应的套接字

三、无连接运输:UDP

运输层最低限度必须提供一种复用/分解服务,以便在网络层与正确的应用级进程之间传递数据。如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是直接与IP打交道。使用UDP时,在发送报文之前,发送方和接收方的运输层实体之间没有握手,因此UDP被称为是无连接的。DNS是一个通常使用UDP协议的例子。
某些应用程序选择UDP的原因
(1)关于发送什么数据以及何时发送的应用层控制更为精确。TCP有一个拥塞控制机制,当源和目的主机间的一条或多条链路变得极度拥塞时来遏制运输层TCP发送方。TCP仍将继续重新发送数据报文段直到目的主机收到此报文并加以确认,而不管可靠交付需要用多长时间。
(2)无须连接建立 谷歌的Chrome浏览器中的QUIC协议(快速UDP因特网连接)将UDP作为其支撑运输协议并在UDP之上的应用层协议中实现可靠性。
(3)无连接状态
(4)分组首部开销小 每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销
流行因特网应用及其下面的运输协议

UDP报文段结构
长度字段指示了在UDP报文段中的字节数(首部加数据)。因为数据字段的长度在一个UDP段中不同于在另一个段中,故需要一个明确的长度
UDP检验和:发送方的UDP对报文段中所有的16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷,得到的结果被放在UDP报文段中的检验和字段。在接收方,全部的4个16比特字(包括检验和)加在一起。如果该分组中没有引入差错,则显然在接收方处该和将是1111111111111111。如果这些比特之一是0,那么就知道该分组中已经出现了差错。
UDP为什么要提供检验和
既无法确保逐链路的可靠性,又无法确保路由器内存中的差错检测的情况下,如果端到端数据传输服务要提供差错检测,UDP就必须在端到端基础上在运输层提供差错检测。 这就是被称颂的端到端原则:因为某种功能(此时为差错检测)必须基于端到端实现,与在较高级别提供这些功能的代价相比,在较低级别上设置的功能可能是冗余的或几乎没有价值的

虽然UDP提供差错检测,但它对差错恢复无能为力,UDP的某种实现只是丢弃受损的报文段,其他实现是将受损的报文段交给应用程序并给出警告。

四、可靠传输原理

可靠数据传输协议为上层实体提供的服务抽象是:数据可以通过一条可靠的信道进行传输,借助于可靠信道,传输数据比特就不会受到损坏或丢失,而且所有数据都是按照其发送顺序进行交付。

1.构造可靠数据传输协议

经完全可靠信道的可靠数据传输(rdt1.0)
发送方和接收方的有限状态机(Finite-State Machine,FSM)如图所示

rdt_send(data)事件是由较高层应用的过程调用产生的
rdt_rcv(packet)事件是由较低层协议的过程调用产生的。
经具有比特差错信道的可靠数据传输(rdt2.0)
基于重传机制的可靠数据传输协议称为自动重传请求(Automatic Repeat reQuest)协议,该协议需要 差错检测、接收方反馈、重传 三种协议功能来处理存在比特差错的情况

发送方将不会发送一块数据,除非发送方确信接收方以正确接收到当前分组,由于这种行为,rdt2.0被称为停等协议(stop-and-wait)
如果一个ACK或NAK分组受损,发送方无法知道接收方是否正确接收了上一块发送的数据:发送方对其数据分组编号。
协议2.1使用了从接收方到发送方的肯定确认和否定确认

协议2.2是在有比特差错信道上实现的一个无NAK的可靠数据传输协议

经具有比特差错的丢包信道的可靠数据传输:rdt3.0
分组丢失或者接收方对该分组的确认丢失,这两种情况下发送方都收不到应当到来的接收方的响应。如果发送方愿意等待足够长的时间以便确定分组已丢失,则它只需重传该数据分组即可。基于时间的重传

2.流水线可靠数据传输协议

rdt3.0性能问题的核心在于它是一个停等协议,这是一个形象的网络协议限制底层网络硬件所提供的能力的图例,采用流水线技术必须增加序号范围,协议的发送方和接收方两端不得不缓存多个分组,解决流水线差错恢复有两种基本方法:回退N步(Go-Back-N)和选择重传(Selective Repeat,SR)

3.回退N步


基序号:最早未确认分组的序号,下一个序号:最小的未使用序号,N表示那些已被发送但还未被确认的分组的许可序号范围,则
[0,base-1]段内的序号对应于已经发送并被确认的分组,[base,nextseqnum-1]段内对应已经发送但未被确认的分组,[nextseqnum,base+N-1]段内的序号能用于那些要被立即发送的分组,大于等于base+N的序号是不能使用的
N常被称为窗口长度,GBN协议也常被称为滑动窗口协议

发送方必须维护窗口的上下边界及nextseqnum在该窗口中的位置,接收方需要维护的信息就是下一个按序接收的分组的序号,该值保存在expectedseqnum变量中

4.选择重传

选择重传协议通过让发送方仅重传那些它怀疑在接收方出错(丢失或受损)的分组而避免了不必要的重传。这种个别级的、按需的重传要求接收方逐个的确认正确接收的分组

接收方需要重新确认(而不是忽略)已收到过的那些序号小于当前窗口基序号的分组,否则发送方的窗口将无法向前移动。
窗口长度必须小于或等于序号空间大小的一半

对于分组重新排序,信道可被看成基本上是在缓存分组,并在将来任意时刻自然地释放出这些分组。由于序号可以被重新使用,必须小心,以免出现这样的冗余分组。实际应用中采用的方法是,确保一个序号不被重新使用,直到发送方“确信”任何先前发送的序号为x的分组都不再在网络中为止。通过假定一个分组在网络中的“存活”时间不会超过某个固定最大时间量来做到这一点。

五、面向连接的运输:TCP

1.TCP连接

TCP“连接”不是一条像在电路交换网络中的端到端TDM或FDM电路。相反,该“连接”是一条逻辑连接,其共同状态仅保留在两个通信端系统的TCP程序中。由于TCP协议只在端系统中运行,而不在中间的网络元素(路由器和链路层交换机)中运行,所以中间的网络元素不会维持TCP连接状态。事实上,中间路由器对TCP连接完全视而不见,它们看到的是数据报而不是连接
TCP连接也总是点对点的,对于TCP而言,两台主机是一对,而3台主机则太多了。
TCP可从缓存中取出并放入报文段中的数据数量受限于最大报文段长度(Maximum Segment Size,MSS)。MSS通常根据最初确定的由本地发送主机发送的最大链路层帧长度(即所谓的最大传输单元(Maximum Transmission Unit,MTU))来设置。设置该MSS要保证一个TCP报文段(当封装在一个IP数据报中)加上TCP/IP首部长度(通常40字节)将适合单个链路层帧。以太网和PPP链路层协议都具有1500字节的MTU,因此MSS的典型值为1460字节。
MSS是指在报文段里应用层数据的最大长度,而不是指包括首部的TCP报文段的最大长度

2.TCP报文段结构


TCP把数据看成一个无结构的、有序的字节流,一个报文段的序号是该报文段首字节的字节流编号。
TCP只确认该流中至第一个丢失字节为止的字节,所以TCP被称为提供累积确认

3.往返时间的估计与超时


α推荐值是0.125,这个加权平均对最近的样本赋予的权值要大于对旧样本赋予的权值,因为越近的样本越能更好地反应网络当前的拥塞情况。从统计学观点讲,这种平均被称为指数加权移动平均(Exponential Weighted Moving Average,EWMA)
RTT偏差DevRTT

β的推荐值是0.25
设置和管理重传超时间隔

TimeoutInterval的推荐初始值为1秒

4.可靠数据传输

TCP发送方高度简化的描述


快速重传
如果TCP发送方接收到对相同数据的3个冗余ACK,它把这当作一种指示,说明跟这个已被确认过3次的报文段之后的报文段已经丢失。一旦收到3个冗余ACK,TCP就执行快速重传,即在该报文段的定时器过期之前重传丢失的报文段。

TCP是选择确认,它允许TCP接收方有选择地确认失序报文段,而不是累积地确认最后一个正确接收的有序报文段。当将该机制与选择重传机制结合起来使用时(即跳过重传那些已被接收方选择性地确认过地报文段),TCP看起来就很像我们通常的SR协议。因此,TCP的差错回复机制也许最后被分类为GBN协议与SR协议的混合体。

5.流量控制

流量控制用来消除发送方使接收方缓存溢出的可能性。流量控制因此是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。TCP发送方也可能因为IP网络的拥塞而被遏制,这种形式的发送方的控制被称为拥塞控制。即使流量控制和拥塞控制采取的动作非常相似,但是它们显然是针对完全不同的原因而采取的措施。
TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制

接收方通过把当前的rwnd(receive window)值放入它发给发送方的报文段接收窗口字段中,通知接收方它在该连接的缓存中还有多少可用空间。
TCP规范中要求,当接收方的接收窗口为0时,发送方继续发送只有一个字节数据的报文段,这些报文段将会被接收方确认。

6.TCP连接管理

三次握手、四次挥手


在完成三次握手的第三步之前分配缓存和变量,使得TCP易于收到称之为SYN洪泛的拒绝服务攻击

六、拥塞控制原理

拥塞代价
当到达的分组速率接近链路容量时,分组经历巨大的排队时延
发送方必须执行重传以补偿因为缓存溢出而丢弃(丢失)的分组
发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本
当一个分组沿一条路径被丢弃了,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了
拥塞控制方法
端到端拥塞控制,网络层没有为运输层拥塞控制提供显示支持。即使网络中存在拥塞,端系统也必须通过对网络行为的观察(如分组丢失与时延)来推断之
网络辅助的拥塞控制:(1)直接反馈信息可以由网络路由器发给发送方,通常采用阻塞分组的形式 (2)路由器标记或者更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生,一旦收到一个标记的分组后,接收方就会向发送方通知该网络拥塞指示,这种形式的通知至少要经过一个完整的往返时间。

七、TCP拥塞控制

运行在发送方的TCP拥塞控制机制跟踪一个额外的变量,即拥塞窗口(congestion window),拥塞窗口表示为cwnd,它对一个TCP发送方能向网络中发送流量的速率进行限制。特别地,在一个发送方中未被确认的数据量不会超过cwnd与rwnd的最小值
发送方如何感知在它与目的地之间的路径上出现了拥塞
发送方的丢包事件:要么出现超时,要么收到来自接收方的3个冗余ACK
网络没有发生拥塞的情况
这种情况下,TCP发送方将收到对于以前未确认报文段的确认。TCP将这些确认的到达作为一切正常的指示,即在网络上传输的报文段正被成功地交付给目的地,并使用确认来增加窗口的长度(及其传输速率)。如果确认以相当慢的速率到达,则该拥塞窗口将以相当慢的速率增加;如果确认以高速率到达,则该拥塞窗口将会更为迅速地增大。
TCP发送方如何确定它们的发送速率,既使得网络不会拥塞,同时又能充分利用所有可用带宽
指导原则:
(1)一个丢失的报文段意味着拥塞,因此当丢失报文段时应当降低TCP发送方速率
(2)一个确认报文段指示该网络正在向接收方交付发送方的报文段,因此,当对先前未确认报文段的确认到达时,能够增加发送方的速率。
(3)带宽探测 网络中没有明确的拥塞状态信令,即ACK和丢包事件充当了隐式信号,并且每个TCP发送方根据异步于其他TCP发送方的本地信息而行动。
TCP拥塞控制算法包括3个主要部分:慢启动、拥塞避免和快速恢复
慢启动:cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加一个MSS,因此TCP发送速率起始慢,但在慢启动阶段以指数增长。
如果检测到由超时指示的丢包事件,开始慢启动+拥塞避免
如果检测到3个冗余ACK,执行快速恢复
TCP拥塞控制常常被称为加性增、乘性减(Additive-Increase,Multiplicative-Decrease,AIMD)

有限状态机描述

第四章 网络层:数据平面

网络层能够被分解为两个相互作用的部分,即数据平面和控制平面
数据平面功能,即网络中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报(即网络中的分组)如何转发到该路由器的输出链路之一
控制平面功能,即网络范围的逻辑,该控制平面功能控制数据沿着从源主机到目的主机的端到端路径中路由器之间的路由方式
传统上,这些控制平面路由选择协议和数据平面转发功能已被实现成一个整体,位于一台路由器中。软件定义网络通过将这些控制平面功能作为一种单独服务,明确地分离数据平面和控制平面,控制平面功能通常置于一台远程“控制器”中

一、网络层概述

每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据包,控制平面的主要作用是协调这些本地的每台路由器转发动作,使得数据报沿着源和目的主机之间的路由器路径最终进行端到端传送。
转发是数据平面的唯一功能,分组也有可能被现有的路由器阻挡(例如分组来源于一个已知的恶意主机,或者该分组发向一个被禁止的目的主机),或者可能是冗余的并经过多条出链路发送
路由选择算法在网络层的控制平面中实现
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。转发发生的时间尺度很短(几纳秒),通常用硬件来实现
路由选择是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。路由选择的时间尺度长得多(几秒),通常用软件来实现。

控制平面:传统的方法:如上图,路由选择算法决定了插入路由器转发表(Forwarding information table/base)的内容。路由选择算法运行在每台路由器中,并且在每台路由器中都包含转发和路由选择两种功能。在一台路由器中的路由选择算法与在其他路由器中的路由选择算法通信(根据路由选择协议交换包含路由选择信息的路由选择报文),以计算出它的转发表的值。

控制平面:SDN方法:如上图,远程控制器计算和分发转发表以供每台路由器所使用,控制器路由选择功能与物理的路由器是分离的,即路由选择设备仅执行转发,而远程控制器计算并分发转发表。远程控制器可能实现在具有高可靠性和冗余的远程数据中心中,并可能由ISP或某些第三方管理。通过交换包含转发表和其他路由选择信息的报文,路由器和远程控制器进行通信。这种控制平面方法是软件定义网络(Software-Defined Networking)的本质,因为计算转发表并与路由器交互的控制器是用软件实现的,故网络是”软件定义“的。

网络服务模型 因特网的网络层提供了单一的服务,称为尽力而为的服务(best-effort service)。使用尽力而为的服务,传送的分组既不能保证以它们发送的顺序被接受,也不能保证它们最终交付;既不能保证端到端时延,也不能保证有最小的带宽。尽力而为服务看起来是根本无服务的一种委婉说法,即一个没有向目的地交付分组的网络也符合尽力而为交付服务的定义!

二、路由器工作原理


输入端口的三个方框分别表示物理层、数据链路层和网络层,分组通过路由器的交换结构转发到输出端口。控制分组(携带路由选择协议信息的分组)从输入端口转发到路由选择处理器。
交换结构是一个网络路由器中的网络
当一条链路是双向时(即承载两个方向的流量),输出端口通常与该链路的输入端口成对出现在同一线路卡上。
路由选择处理器执行控制平面功能。在传统的路由器中,它执行路由选择协议,维护路由选择表与关联链路状态信息,并为该路由器计算转发表。 在SDN路由器中,路由选择处理器负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。路由选择处理器还执行网络管理功能。

1.输入端口和处理和基于目的地转发


如图:输入端口的线路端接功能与链路层处理实现了用于各个输入链路的物理层和链路层。在输入端口中执行的查找对于路由器的运行是至关重要的。在这个地方,路由器使用转发表来查找输出端口,使得到达的分组能经过交换结构转发到该输出端口。

转发表是由路由选择处理器计算和更新的(使用路由选择协议与其他网络路由器中的路由选择处理器进行交互),或者转发表接收来自远程SDN控制器的内容。转发表从路由选择处理器经过独立总线复制到线路卡,使用在每个输入端口的影子副本,转发决策能在每个输入端口本地做出,无须基于每个分组调用集中式路由选择处理器,避免了集中式处理的瓶颈。

在吉比特速率下,查找必须在纳秒级执行,因此,不仅必须要用硬件执行查找,而且需要对大型转发表使用超出简单线性搜索的技术,同时必须对内存访问时间给与特别关注,这导致用嵌入式片上DRAM和更快的SRAM内存来设计。实践中也经常使用三态内容可寻址存储器(Tenary Content Address Memory,TCAM)来查找。
注意到输入端口查找目的IP地址(“匹配”),然后发送该分组进入交换结构(“动作”)的步骤是一种更为一般的“匹配加动作”抽象的特定情况,这种抽象情况在许多网络设备中执行。

2.交换

经内存交换、经总线交换、经互联网络交换

3.何时出现排队

如果交换结构不能快得(相对于输入线路而言)使所有到达分组无时延地通过它传送,在输入端口将出现分组排队.如图所示,交换结构决定发送左上角队列前端的分组,导致左下角队列中的所有分组都将等待,这种现象叫做输入排队交换机中的线路前部阻塞(Head-Of-the-Line,HOL)

交换结构很快会使输出端口出现排队

4.分组调度:

先进先出、优先权排队、循环和加权公平排队

三、网际协议:IPv4、寻址、IPv6及其他


数据报长度:以字节计,IP数据报的理论最大长度为65535字节,然而数据报很少有超过1500字节的,该长度使得IP数据报能容纳最大长度以太网帧的载荷字段。
IP数据报中的协议号所起的作用,类似于运输层报文段中端口号字段所起的作用。协议号是将网络层与运输层绑定到一起的粘合剂,而端口号是将运输层和应用层绑定到一起的粘合剂
为什么TCP/IP在运输层与网络层都执行差错检测?
首先,在IP层只对IP首部计算了检验和,而TCP/IP检验和是对整个TCP/UDP报文段进行的。其次,TCP/UDP与IP不一定都属于同一个协议栈。原则上,TCP能够运行在一个不同的协议上,而IP能够携带不一定要传递给TCP/UDP的数据。
IPv4编址
为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点,这些隔离的网络中每一个都叫作一个子网。
全球因特网中式如何编址的
因特网的地址分配策略被称为无类别域间路由选择(Classless Interdomain Routing,CIDR)。CIDR将子网寻址的概念一般化了。当使用子网寻址时,32比特的IP地址被划分为两部分,并且也具有点分十进制数形式a.b.c.d/x,其中x指示了地址第一部分中的比特数,地址的x最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀(或网络前缀)

如图,使用单个网络前缀通告多个网络的能力通常称为地址聚合(address aggregation),也称为路由聚合(route aggregation)或路由摘要(route summarization)
在CIDR被采用之前,IP地址的网络部分被限制为长度为8、16或24比特,这是一种称为分类编址的编制方案,这是因为具有8、16、24比特子网地址的子网分别被称为A、B和C类网络。
获取主机地址:动态主机配置协议
系统管理员通常手工配置路由器中的IP地址(常常在远程通过网络管理工具进行配置)。主机地址也能手动配置,但是这项任务目前更多的是使用动态主机配置协议(Dynamic Host Configuration,DHCP)来完成。除了主机IP地址分配外,DHCP还允许一台主机得知其他信息,例如它的子网掩码、它的第一跳路由器地址(常称为默认网关)与它的本地DNS服务器的地址
DHCP是一个客户-服务器协议。客户通常是新到达的主机,它要获得包括自身使用的IP地址在内的网络配置信息。在最简单场合下,每个子网将具有一台DHCP服务器。如果在某子网中没有服务器,则需要一个DHCP中继代理(通常是一台路由器),这个代理知道用于该网络的DHCP服务器的地址。

网络地址转换

IPv6

IPv4数据报中出现的几个字段在IPv6数据报中已不复存在:
分片/重新组装:IPv6不允许在中间路由器上进行分片与重新组装。这种操作只能在源与目的地执行。如果路由器收到的IPv6数据报因太大而不能转发到出链路上的话,则路由器只需丢掉该数据报,并向发送方发回一个“分组太大”的ICMP差错报文即可。于是发送方能够使用较小长度的IP数据报重发数据。分片与重新组装是一个耗时的操作,该功能从路由器中删除并放到端系统中,大大加快了网络中IP转发速度。
首部检验和:因为因特网层中的运输层和数据链路层协议执行了检验操作,IP设计者大概觉得在网络层具有该项功能实属多余,所以将其去除。再次强调,快速处理IP分组是关注的重点。由于IPv4首部中包含一个TTL字段,所以在每台路由器上都需要重新计算IPv4首部检验和。就像分片与重新组装一样,在IPv4中这也是一项耗时的操作。
选项:选项字段不再是标准IP首部的一部分了,但它并没有消失,而是可能出现在IPv6首部中由“下一个首部”指出的位置上。这就是说,就像TCP或UDP协议首部能够是IP分组中的“下一个首部”一样,选项字段也能是“下一个首部”,删除选项字段使得IP首部成为定长的40字节。

IPv4到IPv6迁移的方法包括双协议栈和隧道技术

四、通用转发和SDN

因特网路由器的转发传统上仅仅基于分组的目的地址。然而,我们也看到执行许多第三层功能的中间盒有了大量发展。NAT盒重写首部IP地址和端口号;防火墙基于首部字段值阻拦流量或重定向分组以进行其他处理,如深度分组检测(DPI)。负载均衡器将请求某种给定服务的分组转发到提供该服务的服务器集合中的一个。

OpenFlow是一个得到高度认可和成功的标准,它已经成为匹配加动作转发抽象、控制器以及更为一般的SDN革命等概念的先驱。
匹配加动作转发表在OpenFlow中称为流表(flow table)

第五章 网络层:控制平面

一、概述

控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。
转发表(在基于目的地转发的场景中)和流表(在通用转发的场景中)是链接网络层的数据平面和控制平面的首要因素。转发表和流表的计算、维护和安装有两种可能的方式:每路由器控制、逻辑集中式控制。

二、路由选择算法

分类
(1)集中式还是分散式
集中式路由选择算法用完整的、全局性的网络知识计算出从源到目的地之间的最低开销路径。也就是说,该算法以所有节点之间的连通性及所有链路的开销为输入。具有全局状态信息的算法常被称作链路状态(Link State)算法
分散式路由选择算法:路由器以迭代、分布式的方式计算出最低开销路径。没有节点拥有关于所有网络链路开销的完整信息。相反,每个节点仅有与其直接相连链路的开销知识即可开始工作。然后通过迭代计算过程以及与相邻节点的信息交换,一个节点逐渐计算出到达某目的节点或一组目的节点的最低开销路径。如距离向量(Distance-Vector,DV)算法的分散式路由选择算法。之所以叫做DV算法,是因为每个节点维护到网络中所有其他节点的开销(距离)估计的向量。这种分散式算法,通过相邻路由器之间的交互式报文交换,也许更为天然地适合那些路由器直接交互的控制平面。
(2)静态还是动态
静态路由选择算法中,路由随时间的变化非常缓慢,通常是人工进行调整。动态路由选择算法随着网络流量负载或拓扑发生变化而改变路由选择路径。一个动态算法可周期性地运行或直接响应拓扑或链路开销的变化而运行。虽然动态算法易于对网络的变化做出反应,但也更容易受诸如路由选择循环、路由震荡之类问题的影响。
(3)负载敏感还是负载迟钝
当今的因特网路由选择算法(如RIP、OSPF和BGP)都是负载迟钝的,因为某条链路的开销不明确地反映其当前(或最近)拥塞水平。

链路状态路由选择算法

//Dijkstra算法
Initialization:N' = {u}for all nodes vif v is a neighbor of uthen D(v) = c(u,v)else D(v) = ∞
Loopfind w not in N' such that D(w) is a minimunadd w to N'update D(v) for each neighbor v of w and not in N':D(v) = min(D(v),D(w) + c(w,v) )/*new cost to v is either old cost to v or knowleast path cost to w plus cost from w to v */
util N' = N

距离向量(Distance-Vector,DV)算法是一种迭代的、异步的和分布式的算法。说它是分布式的,是因为每个节点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将其计算结果分发给邻居。说它是迭代的,是因为此过程一直要持续到邻居之间无更多信息要交换为止(此算法是自我终止的,即没有计算应该停止的信号,它就停止了)。说它是异步的,是因为它不要求所有节点相互之间步伐一致地操作。

Initializationfor all destinations y in NDx(y) = c(x,y) //if y is not a neighbor then c(x,y) = ∞for each neighbor wDw(y) = ? for all destinations y in Nfor each neighbor wsend distance vector Dx = [Dx(y):y in N] to w
loopwait (util I see a link cost change to some neighbor w orutil I receive a distance vector from some neigbor w)for each y in N:Dx(y) = minv{c(x,y)+Dv(y)}
if Dx(y) changed for any destination ysend distance vector Dx = [Dx(y) : y in N] to all neighbors
forever

距离向量算法:好消息传得快,坏消息传得慢

三、因特网中自治系统内部的路由选择

目前为止我们将网络看作一个互联路由器的集合。从所有路由器执行相同的路由选择算法以计算穿越整个网络的路由选择路径的意义上来说,一台路由器很难同另一台路由器区别开来。在实践中,该模型和这种一组执行同样路由选择算法的同质路由器集合的观点有一点简单化,有以下两个重要原因:
(1)规模 随着路由器数目变得很大,涉及路由选择信息的通信、计算和存储的开销将高得不可实现。在所有路由器之间广播连通性和链路开销更新所要求得负担是巨大的!在如此大量的路由器中迭代的距离向量算法将肯定永远无法收敛!必须采取措施以减少像因特网这种大型网络中的路由计算的复杂性。
(2)管理自治 因特网是ISP的网络,其中每个ISP都有自己的路由器网络。ISP通常希望按自己的意愿运行路由器,或对外部隐藏其网络的内部组织面貌。在理想情况下,一个组织应当能够按自己的愿望运行和管理其网络,还要能将其网络与其他外部网络连接起来。
自治系统(Autonomous System):每个AS由一组通常处在相同管理控制下的路由器组成。一个自治系统由其全局唯一的AS号(ASN)所标识,就像IP地址那样,AS号由ICANN区域注册机构所分配。
在相同AS中的路由器都运行相同的路由选择算法并且有彼此的信息,在一个自治系统内运行的路由选择算法叫作自治系统内部路由选择协议(intra-autonomous )
OSPF路由选择协议及其关系密切的协议IS-IS都被广泛用于因特网的AS内部路由选择。OSPF是一种链路状态协议,它使用洪泛链路状态信息和Dijkstra最低开销路径算法。使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图。于是每台路由器在本地运行Dijkstra的最短路径算法,以确定一个以自身为根节点到所有子网的最短路径树。OSPF通告包含在OSPF报文中,该OSPF报文直接由IP承载,对OSPF其上层协议的值为89

四、ISP之间的路由选择:BGP

在因特网中,所有的AS运行相同的AS间路由选择协议,称为边界网关协议(Border Gateway Protocol,BGP)
在BGP中,分组并不是路由到一个特定的目的地址,相反是路由到CIDR化的前缀,其中每个前缀表示一个子网或一个子网的集合。在BGP的世界里,一个目的地可以采用138.16.68/22的形式,对于这个例子来说包括1024个IP地址。因此一台路由器的转发表将具有形式为(x,I)的表项,其中x是一个前缀,I是该路由器的接口之一的接口号。

通告BGP路由信息
对于每个AS,每台路由器要么是一台网关路由器(gateway router),要么是一台内部路由器(internal router)。网关路由器是一台位于AS边缘的路由器,它直接连接到在其他AS中的一台或多台路由器。内部路由器仅连接在它自己AS中的主机和路由器。
在BGP中,每对路由器通过使用179端口的半永久TCP连接交换路由选择信息。每条直接连接以及所有通过该连接发送的BGP报文,称为BGP连接。跨越两个AS的BGP连接称为外部BGP(eBGP)连接,而在相同AS中的两台路由器之间的BGP会话称为内部BGP(iBGP)连接
先通过eBGP交换AS间的可达性信息,再通过iBGP向AS内的路由器通知可达性信息。

确定最好的路由
当路由器通过BGP连接通告前缀时,它在前缀中包括一些BGP属性。用BGP的术语来说,前缀及其属性称为路由。两个较为重要的属性是AS-PATH和NEXT-HOP。AS-PATH属性包含了通告已经通过的AS的列表,NEXT-HOP是AS-PATH起始的路由器接口的IP地址。每条BGP路由包含3个组件:NEXT-HOP,ASPATH,目的前缀 BGP路由器使用AS-PATH属性来检测和防止通告环路,特别是,如果一台路由器在路径列表中看到包含了它自己的AS,它将拒绝该通告。

热土豆路由选择(hot potato routing)

现实中的BGP路由选择
在实践中,BGP使用了一种比热土豆路由选择更为复杂但却结合了其特点的算法。对于任何给定的目的地前缀,进入BGP的路由选择算法的输入是到某前缀的所有路由的集合,该前缀是已被路由器学习和接受的。如果仅有一条这样的路由,BGP则显然选择该路由。如果到相同的前缀有两条或多条路由,则顺序地调用下列消除规则直到余下一条路由。
(1)路由被指派一个本地偏好值作为其属性之一(除了AS-PATH和NEXT-HOP以外),具有最高本地偏好值的路由将被选择
(2)从余下的路由中(所有都具有相同的最高本地偏好值),将选择具有最短AS-PATH的路由。如果该规则是路由选择的唯一规则,则BGP将使用距离向量算法决定路径,其中距离测度使用AS跳的跳数而不是路由器跳的跳数
(3)从余下的路由中(所有都具有相同的最高本地偏好值和相同的AS-PATH长度),使用热土豆路由选择,即选择具有最靠近NEXT-HOP路由器的路由
(4)如果仍留下多条路由,该路由器使用BGP标识符来选择路由

IP任播
在IP任播配置阶段,CDN公司为它的多台服务器指派相同的IP地址,并且使用标准的BGP从这些服务器的每台来通告该IP地址。当某台BGP路由器收到对于该IP地址的多个路由通告,它将这些通告处理为对相同的物理位置提供不同的路径(事实上,这时这些通告对不同的物理位置是有不同的路径的)。当配置好其路由选择表时,每台路由器将本地化地使用BGP路由选择算法来挑选到该IP地址地“最好的”路由。

五、SDN控制平面

SDN体系结构具有4个关键的特征
基于流的转发:SDN控制的交换机的分组转发工作,能够基于运输层、网络层或链路层首部中任意数量的首部字段值进行。
数据平面与控制平面分离:数据平面由网络交换机组成,交换机是相对简单(但快速)的设备,该设备在它们的流表中执行“匹配加动作”的规则。控制平面由服务器以及决定和管理交换机流表的软件组成
网络控制功能:位于数据平面交换机外部。控制平面自身由两个组件组成:一个SDN控制器(或网络操作系统),以及若干网络控制应用程序。控制器维护准确的网络状态信息(例如,远程链路、交换机和主机的状态);为运行在控制平面中的网络控制应用程序提供这些信息;提供方法,这些应用程序通过这些方法能够监视、编程和控制下面的网络设备。
可编程的网络:通过运行在控制平面中的网络控制应用程序,该网络是可编程的。这些应用程序代表了SDN控制平面的“智力”,使用了由SDN控制器提供的API来定义和控制网络设备中的数据平面。
SDN表示一种意义重大的网络功能的“分类”,即数据平面交换机、SDN控制器和网络控制应用程序是分离的实体,该实体可以由不同的厂商和组织交换机构所提供。这与SDN之前模式形成鲜明对照,在SDN之前模式中,交换机/路由器(连同其嵌入的控制平面软件和协议的实现)是一个整体,它是垂直的、综合的,并且由单一的厂商所销售。
控制器的层次结构

SDN使能的ISP能够容易地将最低开销路径的路由选择转变为更加定制的路由选择方法。因为控制器的确能够随心所欲地定制流表,因此能够实现它喜欢的任何形式的转发,即只是通过改变它的应用控制软件。这种改变的便利性与传统的每路由器控制平面的情况形成对照,传统的情况必须要改变所有路由器中的软件,而这些路由器可能是由多个不同厂商提供给ISP的。

六、ICMP:因特网控制报文协议

ICMP被主机和路由器用来彼此沟通网络层的信息,最典型的用途是差错报告,通常被认为是IP的一部分,但从体系结构上讲它位于IP之上,因为ICMP报文是承载在IP分组中的。这就是说,ICMP报文是作为IP有效载荷承载的,就像TCP与UDP报文段作为IP有效载荷被承载那样。类似的,当一台主机收到一个指明上层协议为ICMP中的IP数据报时(上层协议编码为1),它分解出该数据报的内容给ICMP,就像分解出一个数据报的内容给TCP或UDP一样。

七、网络管理和SNMP

什么是网络管理?
网络管理包括了硬件、软件和人类元素的设置、综合和协调,以监视、测试、轮询、配置、分析、评价和控制网络及网元资源,用合理的成本满足实时性、运营性能和服务质量的要求。

简单网络管理协议(Simple Network Management Protocol) 版本2(SNMPv2)是一个应用层协议,用于在管理服务器和代表管理服务器执行的代理之间传递网络管理控制和信息报文。
SNMP最常使用的是请求响应模式,其中SNMP管理服务器向SNMP代理发送一个请求,代理接收到该请求后,执行某些动作,然后向该请求发送一个回答。请求通常用于查询(检索)或修改(设置)与某被管设备关联的MIB对象值。
SNMP第二个常被使用的是代理向管理服务器发送的一种非请求报文,该报文称为陷阱报文。陷阱报文通常用于通知管理服务器,一个异常情况(例如一个链路接口启动或关闭)已经导致了MIB对象值的改变。


总结

本篇博客总结了1-5章我觉得重要的内容,是我看着自顶向下这本书边看别写的,主要是希望给自己记个笔记,要不然会有一种看完书向没看的感觉,大家有什么问题可以留言啊

学习笔记 之 计算机网络:自顶向下方法(原书第7版)相关推荐

  1. 计算机网络 自顶向下方法 原书第7版 Chapter 1 计算机网络与因特网读书笔记

    这里写自定义目录标题 1.1 什么是因特网 1.1.1 具体构成描述 1.1.2 服务描述 1.1.3 什么是协议 1.2 网络边缘 1.2.1 接入网 1.家庭接入:DSL.电缆.FTTH.拨号和卫 ...

  2. 计算机网络 自顶向下方法.原书第6版 - 网络层次、应用、发展

    20220502读完了这本书,感觉很棒,这本书基本上介绍了所有的网络知识,但这里的讲的都很浅(本人目前只是会一些基本网络编程,只涉及应用层的协议),不过也涉及一些数学知识,但是不影响阅读.希望愿意发展 ...

  3. 计算机网络 自顶而下方法 原书第七版 英文参考答案(网盘)

    找了半天没有免费可用的,现在找到了上传贴在这里 计算机网络 自顶而下方法 原书第七版 英文参考答案(网盘) 链接 提取码:t5ua

  4. 《计算机网络 自顶向下方法》(第7版)答案(第二章)(二)

    P17 黑人问号.jpg P18 a) 查询域名是否被注册,以及注册域名的相关信息的数据库 b) 略 P19 略 P20 查看在DNS缓存中出现的最频繁的Web服务器. P21 输入命令dig web ...

  5. 《计算机网络 自顶向下方法》(第7版)答案(第三章)(三)

    P41 将不收敛为平衡算法.若按照常量减小窗口,描述二者传输量的点将始终与x轴45°方向摆动,并不移向平衡点. P42 只有超时间隔加倍,只能减缓因反复重传造成的拥塞,不能阻止继续向拥塞处发送分组. ...

  6. 计算机网络--自顶向下方法 学习笔记之计算机网络和因特网

    什么是Internet? 因特网的具体构成描述 因特网是一个世界范围的计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络. 有趣的因特网互联设备 数以亿计的互联计算设备:便携机.智能手机.平板 ...

  7. 计算机网络 自顶向下方法 第七版中文 读书笔记 目录

    计算机网络 自顶向下方法 第七版中文 读书笔记 目录 计算机网络 自顶向下方法 第七版中文 读书笔记 目录 第 1 章 计算机网络和因特网 第 2 章 应用层 第 3 章 运输层 第 4 章 网络层 ...

  8. 《计算机网络:自顶向下方法(原书第6版)》一第1章

    本节书摘来华章计算机<计算机网络:自顶向下方法(原书第6版)>一书中的第1章 ,第1.1节,(美)James F.Kurose Keith W.Ross 著 陈 鸣 译 更多章节内容可以访 ...

  9. 《计算机网络:自顶向下方法(原书第6版)》一1.8 小结

    本节书摘来华章计算机<计算机网络:自顶向下方法(原书第6版)>一书中的第1章 ,第1.8,(美)James F.Kurose Keith W.Ross 著 陈 鸣 译 更多章节内容可以访问 ...

最新文章

  1. 【Go】Go基础(五):函数
  2. 美多商城之购物车(购物车管理3)
  3. java四种xml_Java中四种XML解析技术
  4. golang sleep函数 休眠延时
  5. Stanford UFLDL教程 独立成分分析
  6. GDCM:gdcm::Codec的测试程序
  7. Playfair加密算法(C 实现)
  8. CLion运行python程序
  9. ensp1.3.00.100用哪个virtualbox_virtualBox使用 Ubuntu18.0.4
  10. latex中report目录_在 LaTeX 中将不编号的章节列入目录
  11. Xamarin开发笔记—设备类第三方弹窗的使用和注意事项
  12. qt 怎么设计个性化的滑块_滑块上走滑块模具结构设计,不一样的结构思维成就你的高薪职业...
  13. 如何在Linux中使用ulimit命令
  14. Git/Gitlab项目开发使用简介
  15. fortran语言和python语言_Fortran常用语句
  16. 视频插帧算法之光流法
  17. Hive collect、explode函数详解(包括concat、Lateral View)
  18. python入门指南txt许半仙百度网盘-《江火欲燃山》《这题超纲了》《Python入门指南》...
  19. 判断浏览器的cookie是否开启
  20. 微信小程序里面的单步调试和变量查看

热门文章

  1. 计算机图形学-光栅渲染概述
  2. 颜值爆表!华为发布新千元旗舰畅享6S
  3. How To Resolve Stranded DBA_2PC_PENDING Entries [ID 401302.1]
  4. 万科又出新招,小市民只有看热闹的份
  5. 具体做事的人一定要承担责任吗?
  6. StyleFlow,牛逼!
  7. Markdown语法学习
  8. 与化学相关的计算机应用情况,计算机化学的发展、应用与展望
  9. sql 数据库前两列值乘_SQL注入原理和方法汇总
  10. 谷歌浏览器无法打开localhost:3000,打开localhost就跳转测试地址问题