第一章 计算机网络和因特网
线路交换(Circuit switching)中的时分复用(Time Division Multiplexing (TDM))与频分复用(Frequency Division Multiplexing (FDM))
首先,信令方法在网络核心内分配一条专线用于双方之间的通信。由于两个交换节点之间的链路带宽较高,因此采用时分复用、频分复用、码分复用(主要用于接入网)、波分复用(主要用于接入网)。光纤或其他将其分解成更小部分的方法,以同时为多个用户提供服务。
时分复用
时间被划分为多个周期性时隙,每个呼叫都被分配一个周期性时隙,在该时隙内它只能以其(较宽)频带的最大速率进行传输。
光学和电磁频率被分为(窄)频带,每个呼叫都被分配自己的频带,并且可以以该窄带的最大速度进行传输。
五层结构和协议
互联网协议栈: 应用层—— 传输层—— 网络层—— 链路层—— 物理层
应用层:网络应用
为人类用户或其他应用程序进程提供网络应用服务协议:FTP、SMTP、HTTP、DNS 传输层:在主机之间发送数据
进程间通信是根据网络层提供的端到端通信进行细分的。 TCP将IP提供的不可靠通信转变为可靠的通信协议。 TCP、UDP网络层:选择数据报路由。从源头到目的地
主机到主机通信、端到端通信、不可靠协议:IP、ICMP、ARP 链路层:相邻网络节点之间的数据传输(从逐帧的比特流确定帧的开始和结束)传输基础)
两个相邻点之间的通信、点对点通信、可信或不可信协议:点对点PPP、802.11 (WiFi)、以太网物理层:通过线路发送位
各层次的协议数据单元(PDU)
应用层:消息传输层:段:TCP 段、UDP 数据报网络层:数据包(如果无连接:数据报) 数据链路层:帧物理层:位
第二章 应用层
C/S架构与P2P架构
客户端-服务器模式(C/S:客户端/服务器)
服务器:
始终运行固定的IP 地址和众所周知的端口号(按照惯例) 可扩展性:服务器场
数据中心扩展的可扩展性较低客户端:
与服务器主动通信间歇性连接Internet 可能的动态IP 地址不直接与其他客户端通信对等模式(P2P: 对等)
(几乎)没有服务器一直在运行,任何终端系统都可以相互通信。它既可以是客户端,也可以是服务器。
自扩展性:新的对等节点带来了新的服务功能,当然,参与的主机可能会间歇性连接并更改其IP 地址。
无法管理的示例: Gnutella,Thunder
进程寻址(Addressing processes)
为了接收消息,进程需要一个标识符,即SAP(它也需要一个标识符来发送)
主机:唯一的32 位IP 地址
IP 地址本身并不能唯一地标识进程。系统上使用了许多应用程序进程。众所周知的端口号示例有:
HTTP: TCP 80Mail: TCP 25Ftp: TCP 22 过程:用IP + 端口标记结束节点。 本质上,一对主机进程之间的通信由两个端节点组成。
TCP/UDP提供的服务
TCP服务:
TCP套接字:
TCP 服务。两个进程之间的通信需要事先建立连接。
两个进程之间的通信会持续一段时间。 通信关系可以用来表示两个应用实体之间的通信关系。局部标记表示相互传递的最小信息量。 TCP 套接字:源IP、源端口、目标IP、目标端口对于使用面向连接的服务(TCP) 的应用程序,套接字是本地有意义的标识符的四元组。
一个四元组:(源IP、源端口、目的IP、目的端口)唯一指定一个会话(两个进程之间的会话关系)。应用程序使用此标识符与远程应用程序进程进行通信,而无需将标识符添加到每条消息中。这些四元组必须指定将来不应使用该文件的目录名和文件名,而应使用文件句柄,类似于使用操作系统打开文件时。文件名简单,易于管理UDP服务。
UDP套接字:
UDP服务,两个进程之间的通信不需要事先建立连接
只能使用整数来标识该应用程序实体,因为每个消息都是独立发送的,并且先前和后续消息可能被发送到不同的分布式进程。
由于这个消息可能会发送到另一个分布式进程,所以跨层接口传递的信息的最小尺寸是UDP套接字,即这个IP,这个端口,但是如果你是发送消息,你必须使用对方的IP,必须指定端口。
接收报文时:传输层必须上传对方的IP和端口。对于使用无连接服务(UDP) 的应用程序,套接字是具有本地含义的二元组标识符。
2元组:IP、端口(源规范) UDP套接字指定应用程序所在的端节点(端点)。发送数据报时,使用创建的本地套接字(标记为ID),因此不需要发送每个In。每条消息都指定要使用的IP和端口,但是发送消息时必须指定目的IP和UDP端口(另一个段节点)。
WEB应用
WEB 应用程序通过URL 引用每个对象
URL格式包括访问协议、用户名、密码、端口、目录文件等:
Prot: //user:psw@www.someSchool.edu:port/someDept/pic.gif(协议名称: //用户:密码@主机名:端口号/路径/文件名)一般WEB应用:
电子邮件目录服务流视频P2P
HTTP概况
HTTP: 超文本传输协议
Web应用层协议C/S模式
客户端:请求、接收和显示Web 对象的浏览器服务器:响应请求并发送对象的Web 服务器HTTP 1.0: RFC 1945 HTTP 1.1: RFC 2068 使用TCP:
客户端发起与服务器的TCP 连接(建立套接字)。端口号是80。服务器接受来自客户端的TCP 连接,并与浏览器(HTTP 客户端)和Web 服务器交换HTTP 消息(应用层协议消息)。 HTTP 服务器)。文本)TCP 连接已关闭。 HTTP 是无状态的。
服务器不保留有关客户端的任何信息(因此需要cookie)
HTTP两种连接
非持久HTTP
通过TCP 连接最多发送一个对象。下载多个对象需要非持久HTTP 连接。
可以通过单个TCP 连接(在客户端和服务器之间)传输多个对象。 HTTP/1.1 默认使用持久连接。
HTTP请求报文与响应报文的格式
HTTP请求消息:
01 GET /somedir/page.html HTTP/1.1 请求行(GET、POST、HEAD 等命令)
02 Host: www.someschool.edu
03 User-agent: Mozilla/4.0 中4 行
04 Connection: close 是第一行
05 接受的语言:fr
06 换行和回车以指示消息结束
一般格式为:
01 方法URL 版本(换行)
02 标头字段名称: 值(换行符)
.
0n(换行)
HTTP 响应消息:
01 HTTP/1.1 200 OK\\r\\n 状态行(协议版本、状态)
02 连接终止\\r\\n代码及相应的状态信息)
03 Date: 1998 年8 月6 日星期四12:00:15 GMT\\r\\n
04 Server: Apache/1.3.0 (Unix) \\r\\n
05 Last-Modified: Monday, June 22, 1998 . \\r\\n 02~07 第一行
06 内容长度: 6821\\r\\n
07 Content-Type: 文本/html\\r\\n \\r\\n
08 \\r\\n 09~10 两个空行后跟数据。
09\\r\\n
10 Data Data Data Data Data . 请求的HTML 文件等数据
SMTP
用户代理
也称为“电子邮件阅读器” 在Outlook、Foxmail 等中创建、编辑和阅读电子邮件。输出和输入的电子邮件存储在服务器Mail Server 上
管理和维护电子邮件输出消息队列,以将发送给用户的电子邮件保存在其邮箱中。 邮件服务器之间的SMTP 协议:发送电子邮件消息。
客户端:发送邮件服务器服务器:接收邮件服务器简单邮件传输协议:SMTP
TCP 用于在客户端和服务器之间发送消息。端口号为25。 直接发送:从发送服务器到接收服务器的三步传输。
握手发送消息关闭命令/响应交互
命令:ASCII 文本响应:状态代码和状态信息消息必须是7 位ASCII 代码
DNS基本功能
实现主机名和IP地址转换(名称/IP转换)等。
将主机别名转换为规范名称:主机别名将邮件服务器别名转换为邮件服务器的规范名称:邮件服务器别名负载平衡:繁忙的站点冗余地分布在多个服务器上,每个服务器在不同的终端系统上运行。不同的IP地址。这些冗余Web 服务器将一组IP 地址与规范主机名相关联。当客户端发出映射到一组地址的名称的DNS 请求时,服务器会使用整组IP 地址进行响应,但每个响应的地址顺序都会轮换。通常,客户端总是向具有最高IP 地址的服务器发送HTTP 请求消息,因此DNS 以循环方式在所有这些冗余Web 服务器之间分配负载。
DNS概述
集中式设计存在以下问题:
单点故障、远程集中数据库,以及基于域的分层命名机制。
根DNS服务器、顶级域DNS服务器、本地DNS服务器:虽然实际上不是服务器层次结构的一部分,但它们对于某些执行名称到IP地址转换的分布式数据库很重要。端口53 上的UDP 核心互联网功能,但作为应用层协议实现
网络边缘的复杂处理
第三章 传输层
运输层的功能
传输层协议提供运行在不同主机上的应用程序进程之间的逻辑通信功能。从应用程序的角度来看,运行不同进程的主机似乎通过逻辑通信直接连接。逻辑沟通的概念是:
传输层服务:(即进程之间的逻辑通信)
依赖于网络层的服务
延迟、带宽和网络层服务增强
数据丢失、中断、加密
UDP
一个“简洁”、“基本”的互联网传输协议“尽力而为”服务,该段是
发送到应用程序进程的消息段丢失并且连接丢失。
UDP 发送方和接收方之间不发生握手。 的UDP 单独处理。
流媒体(丢失不敏感、速率敏感、应用程序可控的传输速度) DNSSNMP 是基于UDP : 的可行且可靠的传输
通过特定于应用程序的错误恢复提高应用程序层可靠性
TCP
点对点:
一位发送者,一位接收者可靠的顺序字节流:
无消息边界流水线(Pipeiling):
TCP 拥塞控制和流量控制配置窗口大小发送和接收缓冲的全双工数据:
数据在同一连接上双向流动MSS:面向连接的最大段大小:
在数据交换之前,发送方和接收方的状态变量通过握手(控制消息的交换)进行初始化。 有流量控制。
发送者不会压倒接收者
TCP:序号和确认号
序列号32位:
字节流中报文段的第一个字节的编号确认编号32bits:
期望确认从对方收到的下一个字节的累积序列号。问:接收方如何处理乱序消息段?
答:没有限制。
TCP:数据传输
接收来自应用层的数据。
使用nextseq 为消息段创建序列号。 nextseq是报文段第一个字节的字节流号。如果计时器尚未运行,则启动计时器。
该计时器与最早的未确认段和到期间隔相关联。
TimeOutInterval 超时:
收到重传后,重新启动最旧段上的计时器。
如果您想查看消息中未确认的部分,
更新已确认消息的序列号。如果仍有未确认的报文段,则重新启动基于IP不可靠服务的TCP建立的RDT。
流水线段
GBN 或SR 累积确认(例如GBN) 没有指定单个重传定时器(例如GBN)是否可以接受由以下事件触发的乱序重传:
超时(仅重传最旧的未确认段:SR) 重复确认
示例:收到ACK50,然后收到3 个ACK50。超时时间通常太长。
重传丢失数据段之前延迟太长检测由于重复ACK 导致的数据段丢失
发送者通常连续发送许多段。丢失的段通常会导致多个重复的ACK。如果发送方收到同一数据的三个冗余ACK,它将重传序列号最低的数据段。
快速重传:在定时器超时之前重传该报文段。这假设确认数据之后的数据丢失。
第一个ACK 没问题。如果您收到该分段的第二个ACK,则意味着接收方在此分段之后收到了一个乱序分段。如果您收到该段的第3 个和第4 个ACK,则表示您收到了这两个ACK。或者,该段之后的三个乱序段很可能会丢失。
TCP:流量控制
TCP 通过让发送方维护一个称为接收窗口的变量来提供流量控制。通俗地说,接收窗口用于向发送方指示接收方可用的缓冲区空间量(——)。 TCP 是全双工的,因此连接两端的发送方各自维护一个接收窗口。
接收方在TCP 段标头的rwnd 字段中“通知”发送方其空闲缓冲区大小。
RcvBuffer 大小由套接字选项设置(典型的默认大小为4096 字节)。发送方限制未确认(“传输中”)字节数 接收方发送的字节数。不要让收件人溺水
TCP:三次握手、四次挥手
自然:
双方都认识到需要为这次通信建立一个缓冲区并设置一些控制变量。初始化的RcvBuffer 3-way必须互相通知。握手(初始序列号变更+双方确认)合作伙伴序列号)
第一次:Client Server:客户端初始序列号
X
X
x 第二次:服务器 客户端:发送确认
A
C
K
n
你
米
=
X
+
1
ACKnum=x+1
ACKnum=x+1 和服务器端初始序列号
y
y
y(捎带)第三次:客户端 服务器:发送确认
A
C
K
n
你
米
=
y
+
1
ACKnum=y+1
ACKnum=y+1 和客户端数据(捎带),即发送:SYN=1, seq=client_isn 接收:SYN=1, seq=server_isn, ack=client_isn+1 发送:SYN=0, seq=client_isn, ack=server_isn+ 1 4波
客户端和服务器各自关闭自己一侧的连接。
发送FIN 位=1 的TCP 段。当它收到FIN 时,它会用ACK 进行响应。
收到FIN 段后,您可以随发出的FIN 段一起发送ACK。 “对称释放,不完美。”为什么连接时会出现3次握手?什么时候关门?
答:因为当S收到C发送的SYN连接请求报文时,可以直接发送SYN+ACK报文。 ACK 消息用于响应,SYN 消息用于同步。关闭连接时,当S收到FIN报文时,SOCKET不太可能立即关闭,所以它先回复一个ACK报文,告诉C“我收到了你发的FIN报文”。只有所有S报文都发送完毕后才能发送FIN报文,因此不能一起发送。因此,需要四步握手。
TCP:拥塞控制
交通拥堵的原因和成本:
当数据包到达率接近链路容量时,数据包会经历较大的排队延迟。如果发生较大延迟,路由器会使用链路带宽,并且数据包可能会沿路径丢失。每个上游路由器在转发和丢弃数据包之间使用的传输能力最终被浪费。
端到端拥塞控制:在端到端拥塞控制方法中,网络层并不明确支持传输层拥塞控制。即使网络出现拥塞,终端系统也必须观察网络行为并做出决策。 网络辅助拥塞控制:通过网络辅助拥塞控制,路由器向发送方提供有关网络拥塞状态的信息并显示反馈信息。 TCP拥塞控制:
发送方上运行的TCP 拥塞控制机制跟踪一个附加变量,即拥塞窗口。拥塞窗口(用cwnd 表示)限制TCP 发送方向网络发送流量的速率。发送方未确认的数据量永远不会超过cwnd 和rwnd 的最小值,即:
L
是
s
t
乙
y
t
e
S
e
n
t
–
L
是
s
t
乙
y
t
e
A
C
K
min
{
c
w
n
d
,
r
w
n
d
}
LastByteSent-LastByteACK\\le \\min\\{cwnd,rwnd\\}
LastByteSent−LastByteACK≤min{cwnd,rwnd}
因为TCP使用确认来触发(或计时)增大它的拥塞窗口长度,TCP被说成是自计时(self-clocking)的。TCP基于本地信息设置它们的发送速率的指导性原则:
一个丢失的报文段表意味着拥塞,因此当丢失报文段时应当降低TCP发送方的速率;一个确认报文段指示该网络正在向接收方交付发送方的报文段,因此,当对先前未确认报文段的确认到达时,能够增加发送方的速率;带宽探测; TCP拥塞控制算法(TCP congestion control algorithm)
该算法主要包括3个部分:慢启动(slow-start)、拥塞避免(congestion avoidance)、快速恢复(fast recovery):
在慢启动(slow-start)状态,cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加1个MSS。TCP发送速率起始很慢,但在慢启动阶段以指数增长。如果存在一个由超时指示的丢包事件,TCP发送方将cwnd设置为1并重新开始慢启动过程。它还将第二状态变量ssthresh(慢启动阈值)设置为cwnd/2一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的值的一半,即距离拥塞可能并不遥远在任意状态冗余ACK达到3个就会进入快速恢复状态的缺失报文段。因此,TCP拥塞控制常常被称为加性增、乘性减(Additive-Increase,Multiplicative-Decrease,AIMD) 拥塞控制方式。
流量控制和拥塞控制的区别
流量控制:
流量控制的目的是防止发送方发送数据的速率超过接收方的处理能力。其关键机制是滑动窗口协议,特别是TCP中的接收窗口(Receiver Window)机制。接收窗口:接收方会在每个TCP报文段中通告一个窗口大小(window size),表示它当前可以接收的最大数据量。发送方根据这个窗口大小来调整发送速率,以确保不会超过接收方的处理能力。实现机制:
滑动窗口:发送方维护一个发送窗口,只有在接收到接收方的确认(ACK)并通告新的窗口大小后,发送方才能继续发送新的数据。零窗口通告:如果接收方的接收缓冲区已满,它会通告一个零窗口,通知发送方暂停发送数据,直到缓冲区有足够的空间。 拥塞控制(Congestion Control)
拥塞控制的目的是防止网络中出现拥塞,从而保证网络的稳定性和公平性。它通过调节发送方的发送速率来避免在网络中出现过多的数据包积压。
慢启动(Slow Start):在连接开始时,发送方会逐渐增加发送窗口的大小,直到检测到网络中可能出现拥塞的信号(如包丢失)。拥塞避免(Congestion Avoidance):当发送窗口达到慢启动阈值(ssthresh)后,进入拥塞避免阶段,发送窗口增长速度变慢,以避免引起网络拥塞。快速重传(Fast Retransmit)和快速恢复(Fast Recovery):在检测到丢包(通过重复ACK或超时)后,发送方会迅速重传丢失的数据包,并通过减少拥塞窗口(cwnd)来降低发送速率,然后缓慢恢复,以防止再次发生拥塞。拥塞窗口(Congestion Window,cwnd):这是一个动态调整的窗口,用于控制发送方的发送速率,根据网络拥塞状况进行增减。
区别
目标:流量控制是为了避免发送方超载接收方,拥塞控制是为了避免网络拥塞。机制:流量控制通过接收窗口大小调节发送速率,拥塞控制通过拥塞窗口大小调节发送速率。触发条件:流量控制基于接收方的能力,拥塞控制基于网络状况。
第四章 网络层-数据平面
转发与路由选择
基本概念:
输入端口(input port):
在路由器中终结进入物理链路的物理层;与位于入链路远端的数据链路层交互;查找转发表决定路由器的输出端口;控制分组从输入端口转发到路由选择处理器; 输出端口(output port):
存储从交换结构接收的分组;执行必要的链路层和物理层功能在输出链路上传输这些分组; 交换结构(switch fabric):
将路由器的输入端口;连接到它的输出端口; 路由选择处理器(routing process):
执行控制平面功能;传统路由器中,执行路由选择协议,维护路由选择表与关联链路状态信息,并由该路由器计算转发表;SDN路由器中,负责与远程控制器通信;执行网络管理功能; 转发与路由选择:
转发(forwarding)——数据平面:将分组从一个输入链路接口转移到适当的输出链路接口的路由器的本地动作(主要利用硬件);
每台网络路由器中有一个关键元素是它的转发表(forwarding table)。路由器检查到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。 路由选择(routing)——控制平面:确定分组从源到目的地所采取的端到端路径的网络范围处理过程(主要利用软件)
传统方法是由路由器器中的路由选择算法决定转发表中的值。软件定义网络(Software-Defined Networking,SDN)方法是从路由器物理上分离的另一种方法,远程控制器计算和分发转发表以供每台路由器所使用。
IP报的格式
至少5行&32列
第一行:
1~4bit:版本号(4bit)
5~8bit:首部长度(4bit)
9~16bit:服务类型(8bit)
17~32bit:数据报长度(16bit)
第二行:
1~16bit:标识(16bit)
17~19bit:标志(3bit)
21~32bit:片漂移(13bit)
第三行:
1~8bit:寿命(8bit)
9~16bit:上层协议(8bit)
17~32bit:首部检验和(16bit)
第四行:
1~32bit:源IP地址(32bit)
第五行:
1~32bit:目的IP地址(32bit)
第六行(可选):
1~32bit:选项(32bit)
第七行及其余行(可选):
1~nbit:数据(nbit)
版本号(Version):规定了数据报的IP协议版本;首部长度(Header length):在无选项(Options)首部时,IP具有==20字节==的首部;服务类型(Type of service):不同类型的数据报可以相互区分;数据报长度(Datagram length):IP数据报的总长度(首部加上数据),以字节计数;标识(Identifier)、标志(Flags)、片漂移(Fragmentation offset):用于IP分片;寿命(Time-to-live,TTL):确保数据段不会永远在网络中循环;上层协议(Upper-layer protocol):指示IP数据报应交付给哪个运输层协议;首部检验和(Header checksum):帮助路由器检测收到的IP数据报中的比特错误;源和目的IP地址(Source and Destination IP address);选项(Options):允许IP首部被扩展;数据(Data):一般为运输层报文段;
IP:数据报分片
一个链路层帧能承载的最大数据量叫作最大传送单元(Maximum Transmission Unit,MTU)。
组装,字段怎么变化
IP:编址
主机与物理链路之间的边界叫做接口(interface)。每个IP地址长度为32比特(4字节),因此总共有
2
32
2^{32}
232个可能的IP地址。这些地址通常按所谓点分十进制记法(dotted-decimal notation) 书写,及地址中的每个字节用它的十进制形式书写,各字节以句点隔开。地址192.32.216.9的二进制记法是:11000001 00100000 11011000 00001001。因特网的地址分配策略被称为无类别域间路由选择(Classless Interdomain Routing,CIDR)。当使用子网寻址时,32比特的IP地址被划分为两部分,并且也具有点分十进制形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数,并且该部分经常被称为该地址的前缀(prefix)(或网络前缀)。
IP:子网的确定与子网掩码
用IP的术语说,连接到中心路由器的网络都算作一个子网(subnet)。IP编址为这个子网分配一个地址233.1.1.0/24,其中/24称为子网掩码(network mask),指示该子网IP32bit中的左侧24bit定义子网地址。便于理解,可以将网络地址(子网地址)想象为街道名,主机地址想象为门牌号;子网掩码用于确定该IP地址街道与门牌号的分界线。
DHCP
DHCP协议是一个4个步骤过程,yiaddr指示分配给该新到达用户的地址
(非必要步骤) 发现 DHCP 服务器: 在 UDP 分组中向 67 端口发送DHCP 发现报文(DHCP discover message);
DHCP 发现报文使用广播目的地址 255.255.255.255:67 , 使用 “本主机” 源 IP 地址 0.0.0.0:68 ;
使用广播地址是因为客户不知道 DHCP 服务器地址; 该报文将会通过链路层广播, 达到该子网所连接的所有节点; (非必要步骤) DHCP 服务器提供服务: DHCP 收到 DHCP 发现报文时, 用 DHCP 提供报文(DHCP offer message) 响应;
DHCP 提供报文可能使用广播目的地址 255.255.255.255:68 (一般情况下);
广播和单播的选择与客户端的标志位设置有关, 具体不明 (待补充); DHCP 提供报文中包括以下内容:
分配给客户的 IP 地址;默认网关 (第一跳路由器) 的 IP 地址;DNS 服务器的域名和 IP 地址;子网掩码;IP 地址租用期 (address lease time): 用来指示分配的 IP 地址的有效期; (必要步骤) DHCP 请求: 从收到的 DHCP 提供报文中选择一个, 并发出 (DHCP 请求报文 (DHCP request message) 进行相应, 回显配置的参数;(必要步骤) DHCP ACK: 当 DHCP 服务器收到 DHCP 请求报文时, 使用 (DHCP ACK) 响应该请求报文, 证实所请求的参数;
收到 DHCP ACK 后, 客户即可在租期内使用分配到的 IP 地址了;
网络地址转换(Network Address Translation (NAT))
就外界而言,本地网络中的所有设备只共享一个IPv4地址。
通过 NAT 转换表 (NAT translation table) 区分分组
WAN 端LAN 端广域网一侧接口的 IP 地址 : 一个任意的源端口号内网中的 IP 地址 : 该主机中初始的端口号
发送时, WAN 端将内网中的专用地址, 换为自己的在外网中的 IP 地址, 同时使用一个在 NAT 转换表中尚未使用过的端口号, 替换源主机中发送进程对应的端口号;
端口号 16 bit, 因此可以维护 6 万多个并行的单 IP 地址连接; 接收时, 反过来执行替换操作, 将分组转发给具有内网中的专用地址的主机, 进而达到对应原始的端口号的进程;
IPV6
相比 IPv4 的变化
中间路由器不允许分片、重组, 只在源、目的地执行;
如果数据报太大, 导致路由器无法转发, 路由器将丢掉该分组, 然后发送“分组太大”的 ICMP 差错报文 固定的 40 bytes 基本首部;首部中去除了检验和: IPv4 每次路由首部字段的 TTL 等都会发生变化, 导致需要重新计算检验和, 这是一件十分耗时的操作;
第五章 网络层控制平面
路由选择算法(Routing Algorithms)
集中式路由选择算法(centralized routing algorithm):
用完整、全局性的网络知识计算出从源到目的地之间的最低开销路径。具有全局状态信息的算法常被称作链路状态(Link State,LS)算法,因为该算法必须知道网络中每条链路的开销。在实践中,这经常由链路状态广播(link state broadcast)算法完成。下面给出的链路状态路由选择算法叫做Dijkstra算法,其计算从某节点(源节点u)到网络中所有其他节点的最低开销路径。基本思想:经算法的第k次迭代后,可知道到k个目的节点的最低开销路径,在到所有目的节点的最低开销路径之中,这k条路径具有k个最低开销。我们定义如下符号:
D(v):到算法的本次迭代,从源节点到目的节点v的最低开销;p(v):从源到v沿着当前最小开销路径的前一个节点(v的邻居);N\’:节点子集;如果从源到v的最低开销路径已经确定,v在N\’中; 路线上的流量变化和拥塞会使LS算法产生路由震荡(Routing Oscillations)。源节点u的链路状态(LS)算法如下:
Initialization:
N\’={u}
for all nodes v
if v is a neighbor of u
then D(v)=c(uv)
else D(v)=∞
Loop
find w not in N\’such that D(w) is a minimum
add w to N\’
update D(v) for each neighbor v of w and not in N\’:
D(v)=min(D(v),D(w)+ C(wv))
/* new cost to vis either old cost to vor knownleast path cost to wplus cost from wto v*/
until N\’N
分散式路由选择算法(decentralized routing algorithm):
路由器以迭代、分布式计算的方式计算出最低开销路径。没有节点拥有关于网络链路开销的完整信息。一个分散式路由选择算法为距离向量(Distance-Vector,DV)算法,每个节点维护到网络中所有其他节点的开销估计的向量。距离向量(Distance-Vector,DV) 算法是一种迭代的(iterative)、异步的(asynchronous)、分布式的(distributed)和自我终止的(self-termination)算法。令
d
x
(
y
)
d_x(y)
dx(y)是从节点x到节点y的最低开销路径。则该最低开销与著名的Bellman-Ford方程相关,即:
d
x
(
y
)
=
min
v
{
c
(
x
,
v
)
+
d
v
(
y
)
}
d_x(y)=\\min_v\\{c(x,v)+d_v(y)\\}
dx(y)=minv{c(x,v)+dv(y)}方程中的
min
v
\\min_v
minv是对于x的所有邻居的。算法基本思想:每个节点x以
D
x
(
y
)
D_x(y)
Dx(y)开始,对在N中的所有节点y,估计从x到y的最低开销路径的开销路径。距离向量算法具体过程如下:
Initialization:
for all destinations yin N:
D (y)= c(x,y) /* if y is not a neighbor then c(x,y)=∞*/
for each neighbor w
D (y)= ? for all destinations y in N
for each neighbor w
send distance vector Dx = [Dx(y):y in N] to w
loop
wait (until I see a link cost change to some neighbor w or until I receive a distance vector from some neighbor w)
for each y in N:
Dx(y)= minv{c(x,v) + Dv(y)}
if Dx(y) changed for any destination y
send distance vector Dx=[Dx(y):y in N]to all neighbors
forever
开放最短路优先(Open Shortest Path First(OSPF))
OSPF是一种链路状态协议,它使用洪泛链路状态信息和Dijkstra最低开销路径算法。使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图。于是,每台路由器在本地运行Dijkstra的最短路径算法,以确定一个自身为根节点到所有子网的最短路径树。使用OSPF时,路由器向自治系统内所有其他路由器广播路由选择信息,而不仅仅是向其相邻路由器广播。每当一条链路的状态发生变化时,路由器就会广播链路状态信息。OFPF的优点:
安全(Security):能够鉴别OSPF路由器之间的交换;多条相同开销的路径(Multiple same-cost paths):允许使用多条路径;对单播与多播路由选择的综合支持(Integrated support for unicast and multicast routing);支持在单个AS中的层次结构(Support for hierarchy within a single AS);
ISP之间的路由选择:BGP
当分组跨越多个AS进行路由时,我们需要一个自治系统间路由协议(inter-autonomous system routing protocol)。在因特网中,所有的AS运行相同的AS间路由选择协议,称为边界网关协议(Broder Gateway Protocol,BGP)。BGP的作用:
在BGP中,分组并不是路由到一个特定的目的地址,相反是路由到CIDR化的前缀,其中每个前缀表示一个子网或者一个子网集合。BGP为每台服务器提供完成以下任务的手段:
从邻居AS获得前缀的可达性信息;确定到该前缀的“最好”的路由; 通告BGP路由信息
对于每个AS,每台路由器要么是一台网关路由器(getaway router),要么是一台内部路由器(internal router)。在BGP中,每对路由器通过使用179端口的半永久TCP连接交换路由选择信息。跨越两个AS的BGP连接称为外部BGP(eBGP) 连接,而在相同AS中的两台路由器之间的BGP会话称为内部BGP(iBGP) 连接。 确定最好的路由
通告前缀包括一些BGP属性(BGP attribute),前缀及其属性称为路由(route)。
ICMP(Internet Control Message Protocol)两种应用
因特网控制报文协议(the Internet Control Message Protocol,ICMP),被主机和路由器用来彼此沟通网络层的信息。ICMP最典型的用途是差错报告。最常见用于Ping与TTL查询:
ICMP TypeCodeDescripion00echo reply (to ping)30destination network unreachable31destination host unreachable32destination protocol unreachable33destination port unreachable36destination network unknown37destination host unknown40source quench (congestion control)80echo request90router advertisement100router discovery110TTL expired120IP header bad
第六章 链路层和局域网
链路层的功能
成帧 (framing)
几乎所有链路层协议都会将网络层数据报使用链路层帧封装起来; 链路接入
媒体访问控制 (Medium Access Control, MAC) 协议: 规定帧在链路上的传输规则; 可靠交付
保证无差错地经过链路层移动每个网络层数据报;
目的: 在差错发生的单个链路上纠错, 而不是在运输层/应用层协议被迫进行端到端的数据重传 (涉及很多链路); 该服务通常用于易产生差错的链路, 例如无线链路;对于比特差错率低的链路, 链路层提供的可靠交付服务可能是不必要的, 于是很多链路层协议不提供此服务; 差错检测和纠正
差错检测
差错检测
比特级差错检测和纠正 (bit-level error detection and correction): 对从一个节点发送到另一个物理上连接的邻近节点的链路层帧中的比特损伤进行检测和纠正;差错检测和纠正比特 (Error Detection and Correction, EDC)前向纠错 (Forward Error Correction, FEC): 在接收方检测和纠正差错的能力;
可以节省重传所需的往返时延, 适合实时网络应用和具有长传播时延的链路; 奇偶校验
单个奇偶校验位(parity bit):发送d比特信息附加一个比特使d+1比特中1的总数是偶数(偶校验)或奇数(奇校验)
只能检测不能纠错,不能检测超过1比特位的错误; **二维奇偶校验(two-dimension parity)
能检测并纠正1bit差错; 因特网检验和(Internet checksum)
基于这种方法,即数据的字节作为16比特的整数对待并求和。 循环冗余检测(Cyclic Redundancy Check(CRC))
计算机网络中广泛应用的差错检测技术基于循环冗余检测(Cyclic Redundancy Check,CRC) 编码,也称为多项式编码(polynomial code)R计算:
R
=
r
e
m
a
i
n
d
e
r
D
⋅
2
r
G
R=remainder\\frac{D\\cdot2^r}{G}
R=remainderGD⋅2r
媒体访问控制协议(MAC(Medium Access Control))
概述
解决多路访问问题: 如何协调多个发送和接收节点对一个共享广播信道的访问;MAC 协议规范这些节点在同一个共享广播信道上的传输行为;MAC 协议的分类
信道划分协议随机接入协议轮流协议 碰撞问题 (collide)
当多个节点同时传输帧时, 所有节点同时接收到多个帧, 这些帧在所有的接收方处发生了 “碰撞”;一般情况下, 碰撞帧的信号被纠缠在一起, 导致没有一个节点能够有效获得碰撞帧中的任何一个, 碰撞帧都丢失了;需要使用 MAC 协议进行协调, 以解决碰撞问题带来的信道带宽浪费; 理想的 MAC 协议
当仅有一个节点发送数据时, 该节点具有 𝑅 𝑏𝑝𝑠 (广播信道的总速率) 的吞吐量;当有 𝑀 个节点发送数据时, 每个节点吞吐量为 𝑅𝑀 𝑏𝑝𝑠 ;
这不必要求 𝑀 个节点, 每个总有 𝑅𝑀 𝑏𝑝𝑠 的瞬时速率, 而是每个节点在适当的时间间隔内, 都应有 𝑅𝑀 𝑏𝑝𝑠 的平均传输速率; 协议是分散的
没有特殊的主节点协调发送;
不会因某主节点故障而使整个系统崩溃; 没有时钟和时隙同步; 协议是简单的: 实现不昂贵; 时隙多路访问协议的效率 (efficiency)
当具有大量的活跃节点, 且每个节点总有大量的帧需要发送时, 长期运行中成功时隙的份额; 信道划分协议 (channel partitioning protocol)
特点:
将信道划分为小片 (根据时间, 频率, 编码等);每个片分配给每个节点专用;此类协议在低负载时效率低下, 高负载时能保证公平有效; 时分多路复用 (TDMA):在不同的时间说话
概述:
将时间划分为时间帧 (time frame), 每个时间帧划分为 𝑁 个时隙 (slot), 每个时隙分配给一个节点使用;节点只能在每个时间帧的属于自己的时隙中传输链路层帧;时隙长度的选择应当足够发送一个链路层帧; 优点:
消除了碰撞;公平; 缺点:
每个节点的最大速率只能为 𝑅𝑁 𝑏𝑝𝑠 , 即使它是唯一一个有分组需要发送的节点;不需要发送链路层帧的节点对应的时隙将空闲而被浪费;在每个时间帧中, 节点必须等待 “轮到自己”; 频分多路复用 (FDM):在不同的房间说话
概述:
将总速率为 𝑅 𝑏𝑝𝑠 的信道划分为不同的频段, 每个频段具有 𝑅𝑁 𝑏𝑝𝑠 的带宽;一个频段分配给一个节点专用; 优点:同 TDM;缺点:
每个节点的最大速率只能为 𝑅𝑁 𝑏𝑝𝑠 , 即使它是唯一一个有分组需要发送的节点;不需要发送链路层帧的节点对应的频段将空闲而被浪费; 码分多址 (Code Division Multiple Access, CDMA): 以不同的语言说话
概述:
为每个节点分配一个相互不同的编码;每个节点使用属于自己的唯一的编码来对需要发送的数据进行编码;
根据编码原理精心设计的编码, 能够使得不同节点同时传输而不必考虑其他节点的干扰, 接收方能够区分这些数据; 随机接入协议 (random access protocol)
特点:
每个传输节点总是以信道的最大速率 ( 𝑅 𝑏𝑝𝑠 ) 向信道传输数据, 不划分信道;允许发生碰撞;
当发生碰撞时, 所有涉及碰撞的节点反复重发碰撞帧, 直到碰撞帧成功地, 无碰撞地被接收为止;重发不是立刻的, 而是等待一个随机的时间间隔再重发; 此类协议在低负载时能够有效利用带宽, 但在高负载时冲突开销大, 导致效率很低; 时隙 ALOHA 协议
假设前提:
所有帧都是 𝐿 𝑏𝑖𝑡 ;时隙为 𝐿𝑅 𝑠 , 即一个时隙刚好传输一帧;节点只在时隙的起点开始传输帧;节点是同步的: 每个节点都知道时隙什么时候开始;如果在一个时隙中有帧碰撞, 则所有节点在该时隙结束之前能够检测到该碰撞; 操作:
当节点有一个新的帧需要发送时, 在下一个时隙发送该帧;
如果成功传输, 没有发生碰撞, 则无需重传, 能够在下一个时隙继续发送新的帧;如果发生碰撞 (根据假设, 会在该帧结束之前检测到碰撞), 则节点以概率 𝑝 在后续的每个时隙当中重传这个帧, 直到无碰撞地成功传输;
重传碰撞帧的状态下, 无法发送其他新的帧;概率 𝑝 是一个 0~1 的数; 效率:
当具有 𝑁 个活跃节点时, 时隙 ALOHA 的效率为: 𝑁𝑝(1−𝑝)𝑁−1 ;
当 𝑁→∞ 时, 最大效率为 1/𝑒≈37 , 这是时隙 ALOHA 的效率上限, 另外 37 是空闲的, 26 是碰撞的; 优点:
当只有一个节点活跃时, 它能够以 𝑅 𝑏𝑝𝑠 的满速率发送数据;时隙 ALOHA 协议是高度分散的, 各节点独立检测碰撞和执行重传;实现简单; 缺点:
存在冲突, 浪费时隙;即使有帧需要发送, 仍然可能因为运气差导致时隙的空闲 (概率 1−𝑝 的情况下, 不重传);需要对所有节点进行时隙的同步;节点的检测冲突所需时间 < 帧的传输时间;效率较低; 非时隙 ALOHA 协议
概述:
无时隙划分的 ALOHA;
实现更加简单, 无需进行时隙同步; 操作:
当节点有帧需要发送时, 立刻发送;当出现碰撞时: 立刻以概率 𝑝 重传
概率 𝑝 : 重传成功, 继续检测碰撞;概率 1−𝑝 : 保持等待一个帧的传输时间, 而不立刻重传, 等待过后继续以概率 𝑝 重传; 效率:
最大效率为时隙 ALOHA 的一半: 1/2𝑒≈18 ; CSMA & CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
概述:
载波侦听 (Carrier Sense)
当有其他节点正在向信道发送帧时, 等他们发送结束, 并且结束后一小段时间内没有传输时, 自己再开始发送; 碰撞检测 (Collision Detection)
节点传输时, 同时侦听信道, 如果检测到有其他节点正在同时传输帧 (干扰帧, 即发生碰撞), 则停止传输;在有线介质上容易, 但是一些无线介质上比较困难;因检测到碰撞而停止传输后, 再等待一段时间, 等待完成后继续重复上述 “载波侦听-当空闲时传输” 的循环;
等待时间的确定见下方讨论; 协议族
CSMA (载波侦听多路访问): 只具有载波侦听的特性;CSMA/CD (具有碰撞检测的载波侦听多路访问): 具有上述两种特性; 性能比 ALOHA 更好, 且是分布式的, 实现简单且廉价; 信道传播时延 (channel propagation delay) 导致碰撞的可能:
某些节点已经开始传输, 但位于其他空间位置上的节点因信道传播时延的存在, 没有检测到已经开始的传输而开始自己的传输, 进而导致碰撞; 碰撞后等待的时间:
不能等待固定的时间量, 这样会导致碰撞一直持续下去: 必须等待一个随机的时间, 且该时间的范围最好能够适应信道负载;
碰撞节点数量少时, 过长的等待时间导致信道空闲;碰撞节点数量多时, 等待时间范围太小将导致继续碰撞; 二进制指数后退算法 (binary exponential backoff)
目标: 适配器适应当前的信道负载, 在一个变化的碰撞窗口内选择一个随机的时间点重发;操作: 当传输一个给定的帧时, 如果该帧经过了连续的 𝑛 次碰撞, 则在 [0, 2𝑛−1] (碰撞窗口) 的范围内随机选择一个整数 𝐾;
帧的连续碰撞次数越多, 就越可能选择到更长的等待时间;以太网中, 𝑛 的最大取值在 10 以内, 且等待的实际时间是: 传输 512×𝐾 𝑏𝑖𝑡 所需的时间; 效率:
效率
=
1
1
+
5
⋅
d
p
r
o
r
d
t
r
a
n
s
\\textit{效率}=\\frac1{1+\\frac{5\\cdot d_{pror}}{d_{trans}}}
效率=1+dtrans5⋅dpror1𝑑𝑝𝑟𝑜𝑝 : 信号在任何两个节点之间传播时延的最大值;𝑑𝑡𝑟𝑎𝑛𝑠 : 传输一个最大长度的以太网帧的时间;
对于
10
M
b
p
s
10~~Mbps
10 Mbps 的以太网, 这个值约为
1.2
m
s
1.2~~ms
1.2 ms ;
MAC地址和ARP
MAC 地址(MAC address)
概述:
MAC 地址是网络适配器的地址, 即网络接口的地址, 不同于网络层的地址;
即: 链路层的地址; 链路层交换机的接口不具有 MAC 地址, 因为链路层交换机的任务是透明地在主机和路由器之间承载数据报;MAC 地址被设计为是永久的, 但是使用软件也可以更改一个适配器的 MAC 地址;
由 IEEE 管理 MAC 地址空间, 例如: 前 24 bit 固定, 可以指示生产厂商, 后 24 bit 由厂商自己分配给所生产的设备; MAC 地址具有扁平的结构, 区别于 IP 地址的层次化结构;
适配器的 MAC 地址 (类比身份证号) 不会随着适配器的位置而改变, 但是 IP 地址 (类比邮编) 会; 格式
长度: 6 Byte (48 bit);一般采用成对的 16 进制数表示, 中间用 “-” 隔开; 特殊的 MAC 地址
广播 MAC 地址: 全 1, 即 FF-FF-FF-FF-FF-FF ; ARP (Address Resolution Protocol, 地址解析协议)
概述:
执行在网络层地址 (例如: IP 地址) 和链路层地址 (MAC 地址) 之间转换的任务的协议;使用 ARP 表保存 IP 地址与 MAC 地址的映射关系以及 TTL (寿命) 信息; 与 DNS 对比
DNS:
将主机名解析为 IP 地址;为位于互联网任何位置的主机解析主机名 ARP:
将 IP 地址解析为 MAC 地址;为位于同一个子网下的主机和路由器解析 IP 地址;如果解析的 IP 地址不在对应子网下, ARP 将返回一个错误
ARP协议工作流程
子网内发送数据报的 MAC 地址解析过程
发送方主机发送一个数据报, 需要到达本子网下的另一台主机或路由器;发送方发现数据报目的 IP 位于同一子网内, 检查 ARP 表:
如果 ARP 表中有对应的映射, 则将数据报封装在链路层帧中, 并且目的 MAC 地址也被放入其中, 进而发送该帧, 结束;如果 ARP 表中没有对应的映射, 则继续; 发送方构造一个 ARP 查询分组, 然后发送方适配器广播该分组 (广播帧);子网中所有适配器均收到了这个查询分组, 并且这些适配器都检查自己的 IP 地址与 ARP 查询分组中的接收 IP 地址是否一致;对应一致的适配器将向查询主机发送一个 ARP 响应分组 (标准帧);发送方收到 ARP 响应分组, 并使用该映射封装帧, 进而正确发送该帧; 将分组发往子网之外
发送方主机 111.111.111.111 发送一个数据报, 需要到达本子网外的另一台主机 222.222.222.222 ;发送方发现数据报目的 IP 位于本地子网 111.111.111/24 外, 根据网络层的决定, 应当先发往 111.111.111.110(一般是默认网关);
它是第一跳的目的 IP , 该目的 IP 对应的 MAC 地址根据 ARP 获得; 发送方将数据报封装进链路层帧, 该帧的目的 MAC 是第一跳路由器对应的 MAC 地址, 但目的 IP 不变 (位于网络层数据报中, 所以不变);路由器的 111.111.111.110 对应的端口适配器将帧解封装, 并送至路由器的网络层;路由器的网络层根据转发表将数据报路由至 222.222.222.220 对应的端口, 并交给其端口适配器;222.222.222.220 对应的端口适配器将数据报封装进链路层帧, 继续上述类似过程;
下一站的 MAC 地址同样由 ARP 获得;
以太网帧的结构
前同步码 (Preamble)
长度: 8 Byte内容
前 7 Byte: 7 个 10101010最后 1 Byte: 10101011 作用: “唤醒” 接收适配器, 同步收发双方的时钟速率, 即确定发送方发送比特的准确速率;
虽然以太网有 10Mbps, 100Mbps, 1Gbps 等不同的标准, 但是实际速率不一定完全准确, 存在漂移, 通过前 7 Byte, 接收方可以锁定发送方的发送速率, 即时钟同步, 进而保证接收内容的准确;最后 1 Byte 的 11 告诉接收方适配器, 重要的数据就要来了! 目的地址
长度: 6 Byte作用: 指示目的适配器的 MAC 地址;说明
如果目的地址是自己的 MAC 地址或者广播地址, 则将数据字段的内容交给网络层;如果不是, 则将该帧丢弃; 源地址
长度: 6 Byte作用: 指示传输该帧到局域网上的适配器的 MAC 地址; 类型
长度: 2 Byte作用: 允许以太网复用多种网络层协议, 即根据类型字段的值, 交给适当的网络层协议;
例如: ARP 协议的类型字段值为 0x0806 ; 数据
长度: 46 ~ 1500 Byte作用: 承载 IP 数据报;说明
以太网的最大传输单元 (MTU) 是 1500 Byte, IP 数据报超过了 MTU 就需要对 IP 数据报进行分片;当 IP 数据报的长度小于 46 Byte 时, 后面的部分将会被填充, 使其到达 46 Byte, 数据报和填充部分都会交给网络层, 但是网络层会根据 IP 数据报的长度字段来去除填充部分; CRC
长度: 4 Byte作用: 让接收适配器能够检测到帧中的一些差错;
#以上关于复习提纲:《计算机网络(自顶向下方法)第七版》的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91185.html