文武双全的大白菜 · 《计算机网络-自顶向下方法》笔记| ...· 3 周前 · |
文武双全的大白菜 · 计算机网络面试题,63道计算机网络八股文(2 ...· 3 周前 · |
文武双全的大白菜 · 美国研究生信息安全学校列表-迁木网· 3 周前 · |
文武双全的大白菜 · 网络空间安全专业| 计算机学院· 3 周前 · |
因特网也被称为“网中网”,我们所用的网络都是大网中的小网(套娃)。
网络边缘的端系统 通过 接入网 (物理链路) 连接到 边缘路由器 (端系统到任何其他远程端系统的路径上的第一台路由器)。
利用 电话线路 接入网络。其中 ADSL 是非对称的数字用户线,基本都用ADSL,因为一般下行的数据量都远大于上行的数据量,所以要设计成非平衡的链路。
采用 独占 的 频分多路复用 来传输。因为利用的是原有的电话线路,所以需要将DSL传输的网络信号(上行、下行)和电话信号通过频分多路复用来区分开来。
同轴电缆 和 光纤节点 相连再接入边缘路由器。
不对称 的 竞争式协议 ,最高可达到30Mbps的下行速率和2Mbps的上行速率。由于采用竞争式协议,在用户少时使用体验优于普通的电缆因特网接入,但是在用户多时容易造成卡顿。
网络核心:由端系统的分组交换机和链路构成的网状网络。下图标亮部分即使网络核心。
一共有三种交换方式:报文交换(很少使用)、分组交换和电路交换
端系统之间彼此传输报文,分组交换中,将长报文划分为分组,分组再通过通信链路和分组交换机(分为路由器和链路层交换机)传送。
存储转发传输 (Store-and-Forward Transmission)
分组交换和报文交换都采用了存储转发的传输形式。但分组交换的存储转发以分组为单位,即交换机接收到整个分组后才能输出该分组的数据;而报文交换的存储转发单位为报文,需要交换机接收到整个报文后才能输出。
传输相同大小的数据包,分组交换比报文交换更快。下面是分组交换传输3L大小的报文的时间流,报文分为3个大小为L的分组,根据分组交换原理,一共耗费了 4L/R 时间完成传输(即 存储转发时延 )。而如果使用报文传输同样的3L大小的报文则需要耗费 6L/R 时间。
排队时延 (Queuing Delay)和 分组丢失 (Packet Loss)
分组交换机有有一个 输出缓存 (output buffer),分组可能会在分组交换机上排队等待输出,造成排队时延。
分组交换机的缓存空间是有限的,所以在过于拥堵时会产生分组丢失(丢包)。
转发表 (Forwarding Table)和 路由选择协议 (Routing Protocol)
端到端连接 (end- to-end connection):在发送数据之前,必须先在发送和接收两端建立端到端连接,并预留一部分带宽。而分组交换不预留,所以会造成排队和丢包。
远距离传输会有衰减,所以考虑用 数字信号 进行传输。在时域上对信号进行 采样 ,接收时再将采样信号恢复。
TDM在时域上被划分为固定的 帧 (frame),每帧又被划分为固定数量的 时隙 (slot),链路中的每条连接专用一个时隙。
分组交换的性能优于电路交换,适用于随机数据,可以满足更多用户。
电路交换需要预留带宽,相当于固定了链路用户的数量。而分组交换不需要预留带宽,用户使用网络是有一定概率的,在一个时刻较多人使用的概率其实相对较低,所以一条链路可以给更多的用户使用。
电路交换适用于特殊情况,比如要保障传输数据能力。
协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送和/或接收一条报文或其他时间所采取的动作。
协议三大要素:
因特网协议栈由5个层次组成:物理层、链路层、网络层、传输层和应用层。因特网协议栈是一个理想模型。
下层为上层提供服务。越下面的层,越靠近硬件;越上面的层,越靠近用户。
OSI模型由国际标准化组织(ISO)制定,实际并没有应用,只有理论。
OSI模型由7层组成:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
应用层:将 应用层报文 (application-layer message)M传送给传输层;
传输层:接收报文M,附上传输层首部信息Ht(包括差错检测位信息等),构成 传输层报文段 (transport-layer segment),将其传递给网络层;
网络层:接收传输层报文段,附上网络层首部信息Hn(包括源和目的地址等),构成 网络层数据段 (network-layer datagram),将其传递给网络层;
链路层:接收网络层数据段,附上链路层首部信息Hl,构成 链路层帧 (link-layer frame),将其传递给物理层;
物理层:负责比特流物理传输。
在接收端以反方向重构报文段。
在两个物理媒体间进行比特流传输,上层都是逻辑链接,只有物理层是实际的物理连接。
机械特性 :指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等;
电气特性 :指明传输模式、电压范围、编码、阻抗匹配、传输速率以及传输距离等等;
功能特性 :指明各条物理线路的功能,比如某条线上出现的某一电平的电压表示何种意义,
物理接口信号线按功能分为四类:数据线、控制线、定时线和地线;
规程特性 :指明各物理线路工作规程和时序的关系,比如对于不同功能的各种可能事件的出现顺序,
信号传输的模式:单工(仅单向通行)、半双工(双方通,但一个时刻仅一方通)、全双工(双方随时通)。
模拟传输VS数字传输
信道容量 (Channel capacity):在一个信道中能够可靠地传送信息时可达速率的最小上界,单位 bps。
频带宽度 (Frequency bandwidth):信道允许的信号频率范围,单位 Hz。
传输延迟 (Transmission delay):包括发送到接受的处理事件、电信号的响应时间、中间介质的传输时间。
奈奎斯特定理 (Nyquist’s Law)
香农定理 (Shannon’s Formula)
信道的信息传输速率C(单位:bps)
W - 带宽,单位 Hz
S - 信道的平均信号功率
N - 信道的高斯噪声功率
S/N - 信号功率与噪声功率之比(也可以叫信噪比)
一般情况下,信噪比不用 $S/N$ 表示,而是 $10log_{10}S/N$ ,单位为dB。
数字/模拟信号 经过 调制 变成 模拟信号 ,如此可在 模拟信道 上传输,再经过 解调 变成 数字/模拟信号。
数字/模拟信号 经过 编码 变成 数字信号 ,如此可在 数字信道 上传输,再经过 解码 变成 数字/模拟信号。
调幅 (Amplitude Modulation, AM )
把数字信号转化成不同幅度的正弦信号。
调频 (Frequency Modulation, FM )
把数字信号转化成不同频率的正弦信号。
把数字信号转化成不同相位的正弦信号。
脉码调制步骤:
采样频率是信号频率的两倍,则可不失真地恢复原始信号。
取整采样信号。
量化后的信号编码成二进制。
Non-Return-To-Zero Level ( NRZ-L ) Coding
高电平表示“1”,低电平表示“0”。
NRZ-L的优点:简单好实现
NRZ-L的缺点:
反向不归零编码( NRZ-I )
遇“1”反向。只能解决NRZ-L的部分问题(全“1”问题,不再是直流)
外同步 (External synchronization)
给系统一个同步时钟信号,设置一个周期的宽度。
外同步有诸多不便,于是有了自同步的曼切斯特编码。
每个编码由两段组成,“1”:先高后低;“0”:先低后高(可以反过来定义)。
曼切斯特编码的优点(解决了不归零编码的问题):
曼切斯特编码的缺点:
基频增加 :基频是不归零编码的两倍,从而比特率变成了不归零编码的一半;
二义性 :组合情况有两种。
“0”:自己的前半波与前一个编码的后半波相反。
有两种画法,初始为高、初始为低,两种画法结果对称。
差分曼切斯特编码的优点:
差分曼切斯特编码的缺点(同曼切斯特编码):
每台设备都给一个不同向量的码片,比如手机A的码片为A,手机B的码片为B。不同设备的码片正交,即
要向手机A发送数据a,向手机B发送数据b,则在信道中发送 $a\times A + b\times B$。
在手机A接收数据时,将接收到的信号乘A。
同理手机B,如此两台设备同时利用一条信道传输,并成功分离各自的数据。
现实中的计算机系统不是理想系统,事件是随机突发的,所以不可避免的存在延时。
数据包的延时由四个部分组成:
处理时延 (Nodal Processing Delay,$d_{proc}$)
路由器接收到分组对其进行处理的时间(比如差错检测),耗时很短,毫秒级。
排队时延 (Queuing Delay,$d_{queue}$)
分组在链路上等待传输的时间,取决于先期到达的正在排队等待向链路传输的分组数量。
传输时延 (Transmission Delay,$d_{trans}$)
将分组的比特流传输到链路的时间(比如进行编码转换成查分曼切斯特编码的时间)。
如分组长度 L ,传输速率 R bps,则其传输时延为:
所以传输时间取决于分组长度和传输速率。
传播时延 (Propagation Delay,$$)
信号在媒体上传播的时间。
如物理链路的长度 d,传播速度 s m/sec,则其传播时延为:
流量强度(traffic intensity)代表了路由器上排队的拥堵率。
其中,L —— 分组长度(bits);
R —— 链路带宽(bps);
a —— 平均分组到达速率
路由器的排队容量是有限的,当分组到达一个已满的队列时,路由器将丢弃该分组,产生丢包。
串联链路吞吐量取决于 瓶颈链路 (bottleneck link)。
服务器 :
客户机 :
优点: 自扩展性 (self-scalability):新的点都会提供服务容量和负荷。
缺点:每个点都是间断性连接,而且IP地址会改变。
例子:P2P的文件分享。
不同主机之间,进程通信同过报文交换,
比如并行计算中的MP和MPI,MP(Multi Processing)只能用于同一台主机间的通信,MPI(Message Processing Interface)主要用于不同主机之间的通信,也适用于同一台主机。
客户机进程 (client process):发起通信的进程。
服务器进程 (server process):等待连接的进程。
P2P应用也存在客户机进程和服务器进程。
socket在进程通信中的作用相当于一个信封:
如果两个主机之间的进程进行通信,发送端不仅要知道接收端的IP地址还需要知道进程相应的端口号。
IP地址 :IPv4中32位IP,负责找到接收端主机。
端口号 (port number):每台主机都可能运行着多个进程,每个进程对应一个端口号。
比如,HTTP服务端口号80、邮件服务端口号25
专用网络协议
数据完整性 (data integrity)
一些app需要100%可靠的文件传输,比如文件传输;有一些运行一部分的丢失,比如语音。
时效性 (timing)
一些app要求较少的延时,比如对话直播。
吞吐率 (throughput)
吞吐率,即 最小带宽 ,一些app存在一个吞吐率下限才能正常使用,比如视频音频等多媒体;有些app运行弹性的吞吐率,比如邮件传输,吞吐率小可以慢慢传过去。
UDP是一种 不提供不必要服务 的轻量传输协议。优点是速度快、灵活性好。
World Wide Web 中的网页由超链接(hyperlink)连接。
www.someshcool.edu/someDept/pic.gif
,其中
www.someshcool.edu
为主机名,
/someDept/pic.gif
为路径名。
超文本传输协议(hypertext transfer protocol, HTTP)
网页的 应用层 协议
基于 客户机-服务器体系结构
TCP连接关闭
如果要加载多个对象时,需要多次非持久性HTTP连接。
RTT :往返时间(Round Trip Time),一个很小的数据包(处理文件的时间可忽略)从客户机传到服务器再传回来的时间。
HTTP响应时间 (一个对象):
对象/文件传输的时间
对一个对象来说,非持久性HTTP响应时间为
例题:一个网页包含1个HTML和10张图片,共有5个并行的TCP连接,则非持久性HTTP响应需要多少个RTT?
首先传输HTML需要 $2RTT$ 的时间,5个并行的TCP连接传输10个对象需要2个 $2RTT$ 的时间。
域名系统(Domain Name System,DNS)通过分布式的数据库来实现IP地址和域名的映射。
DNS作为一个
网络核心功能
,为什么要放在应用层?
与网络结构设计理念有关,网络中主机很多映射很复杂,希望将复杂度留在端系统中,而不是在网络核心。
为什么要选用分布的DNS,而不采用集中式的DNS?
DNS采用三层结构
一个客户机得到
www.amazon.com
的IP地址的步骤:
.com DNS server
的地址;
.com DNS server
,得到权威域名服务器
amazon.com DNS server
的地址;
amazon.com DNS server
,得到
www.amazon.com
的IP地址
世界上现在有13个根域名服务器,分布在世界各地。
.com
、
.org
、
net
、
.edu
等等,国家的TLD,比如
.cn
、
.uk
等等。
.com
、
net
TLD的组织
.edu
的组织
被联系到的服务器会将后一个服务器的名字反馈回来,即“我不认识这个域名,但是你可以去问那台服务器(=゚ω゚)ノ”
下面的迭代查询过程,利用本地域名服务器作为代理迭代查询域名对于的IP地址。
把域名解析的负担交给了联系到的域名服务器,这种方法对于高级的负担增加,所以一般采用迭代查询而不采用递归查询。
DNS的分布式数据库里存储了 资源记录 (resource record, RR)
RR的格式:
(name, value, type, ttl)
type = A
type = NS
foo.com
)
type = CNAME
www.ibm.com
是
servereast.backup2.ibm.com
的别名,这与负荷的分配有关,可能有多个服务器。
type = MX
DNS有两种消息类型:查询(query)和回答(reply),两种消息格式相同。
.com
的TLD提供商 Network Solution 注册
networkutopia.com
.com
TLD服务器插入 NS、A 的RR
networkutopia.com
,
dns1.networkutopia.com
, NS)
dns1.networkutopia.com
,
212.212.212.1
, A)
www.networkutopia.com
的type A记录
networkutopia.com
的type MX记录
查询一个域名的A记录,如果没指定dns-server,用系统默认的dns服务器。
1 |
nslookup domain [dns-server] |
1 |
nslookup -qt=type domain [dns-server] |
type可以是以下这些类型:
缺点:每个点都是间断性连接,而且IP地址会改变。
例子:P2P的文件分享。
从一个服务器分发大小为F的文件到N个节点需要多少时间?(每个节点上传和下载的速率都是有限的,网络中有足够的带宽)
如果选用 客户机-服务器 结构
客户机下载:每个客户机都需要下载文件,$d_{min}$ 是客户机最小下载速度,则客户机下载的最大时间为 $F/d{min}$
客户机-服务器结构的分发时间
此处的N导致耗费的时间随要下载的节点的数量线性增长,当要下载的节点数目大时,要耗费相当多的时间。
不需要先上传完再下载,参考 第一章/网络核心/分组交换 ,以分组为单位发送,可以忽略上传到下载的时间。
如果选用 P2P 结构
客户机上传:每个下载了文件的客户机都可以上传文件,此时总上传速率可以达到$u_s+\sum\limits^{n} u_i$
P2P结构的分发时间
客户机-服务器结构和P2P分发时间对比
新的节点想下载文件,先询问追踪器参加的节点,再从相近的节点处下载文件块
节点加入洪流:
每隔 30s 会随机选择其他节点发送文件块,这样这个随机节点可能就会成为新的top4
tit-for-tat原则:上传速率快的节点相应地得到高下载速率的回报。
socket:相当于应用进程和点对点传输协议之间的一扇门
socket类型:对应TCP和UDP有两种socket
接收方从数据包中提取处IP地址+端口号
UDP提供的是一种不可靠的数据流传输,传输过程中可能会丢包,接收的时候顺序也可能被打乱。
这里jupyter notebook中进行编程,安装好jupyter notebook后,在命令行执行
1 |
jupyter notebook |
即可启动jupyter notebook
UDP服务器代码
1 |
from socket import * #引入socket库 |
UDP客户机代码
1 |
from socket import * #引入socket库 |
先运行UDPServer.ipynb,启动服务器运行。
先运行UDPClient.ipynb,进行客户机访问。
服务器接收客户机消息
1 |
from socket import * #引入socket库 |
TCP客户机代码
1 |
from socket import * #引入socket库 |
先运行TCPServer.ipynb,启动服务器运行。
先运行TCPClient.ipynb,进行客户机访问。
传输层和网络层对比
传输层:进程之间的通信
传输层依赖于并能强化网络层服务。
UDP:不可靠的,无序的传送
二者均不提供的服务:延时保障、带宽保障
多路复用存在于发送方:发送方需要处理多个套接字,并且给套接字加上传输层的头部。
多路分用存在于接收方:利用头部信息,将接收到的报文段传输给正确的套接字。
主机利用IP地址和端口号来把报文段传入正确的套接字
参考 UDP的socket工作方式 ,如果数据报的 目的IP地址和端口号 相同,它们将被传到同一个socket当中。(即使数据报的源可能不同)
UDP(User Datagram Protocol,用户数据报协议),标准为RFC 768。
不用连接:客户机和服务器不需要握手,每个UDP段都是独立处理的
UDP的优点
位于UDP头部,负责检测传输的段有没有发生“错误”(比如位的翻转)
校验和相同只能说是“检验不出错误”,不能保障没有错误。比如传输中多个16bit字发生错误,但是可能恰巧相加校验和不变。
例题:有两个16-bit的字,1110011001100110 和 1101010101010101,求校验和。
wraparound存在溢出,进位的部分回卷,加到最后一位。
可靠数据传输原理(Principles of reliable data transfer, rdt )
对应用层、传输层、链路层都很重要
不可靠信道的特点决定了不可靠传输协议的复杂度
调用接口函数:
下层信道不可能完全可靠 => 引入rdt2.0
停等机制(stop and wait)
发送方发送一个packet,然后等待接收方的响应。
接收方可能判断ACK/NAK信号出错,导致发送分组重复 => 引入rdt2.1
引入0/1序号和丢弃分组,解决接收方判断ACK/NAK信号出错,导致发送分组重复问题。但这也让发送方和接收方有限状态机的状态翻倍。
接收方有2种状态—— 等待下级调用 0 、 等待下级调用 1 。只有在数据包ACK且 收到的packet序号与目前状态等待的序号相同 时,才能向上传输。
为什么接收方等待1状态接收到0的packet时,为什么要反馈ACK?
为了让发送方的状态转移,从“等待ACK或NAK 0”到“等待上级调用 1”。
接收方如果校验和检测出错,则发送上一次序号的ACK;在校验和检测正确时,发送ACK也需要带上本次的序号。
发送方传输开始时,
start_timer
启动计时器。如果
timeout
传输超时,则重新启动计时器;如果在规定时间内接收到反馈,则
stop_timer
结束计时。
例题:一个 1Gbps的链路,15ms的传播时延,传输8000bit的packet,求发送方的使用效率。
传输时延
发送方使用效率
可见rdt3.0的使用效率很低。
rdt3.0网络协议限制了物理资源的使用率。
采用流水线的机制,不要等一个RTT发送回来再发下一个(即不再采用停等机制),来提高物理资源的使用率。
图 停等机制(Stop-and-wait) 图 流水线机制(Pipelined Operation)例题:采用GBN协议,一个发送方发送了 #0到#5 的packet,但是只收到了 ACK0 和 ACK2。问发送方要重发哪些packet?
重发#3、#4、#5 的 packet。
虽然没有收到ACK1,但是接收方只有在#n及之前的packet都收到了的时候,才会发送ACKn,发送方接收到ACK n,则证明接收方#n及之前的packet都收到了。所以ACK1应该是在发送过程中丢包了,但是实际接收方已经收到了#1 packet。所以重发#3、#4、#5 的 packet。
比如下面序列号有:#0, #1, #2, #3,window大小为3的情况。SR会无法分清a、b两种情况,导致在b中误判重发的第一轮的
pkt0
,被当作后一轮的
pkt0
填入。
1、端口号:用来标识同一台计算机的不同的应用进程。
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
2、序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。
3、数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。
4、保留:为将来定义新的用途保留,现在一般置0。
5、控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。
6、窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。
7、校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
8、紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
9、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。
10、数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。
例题:下面文件的前3个报文段的序号分别是?
第一个报文段:0;第二个报文段:1000;第三个报文段:2000
如何EstimateRTT(估计RTT)?
则EstimateRTT为
DevRTT(偏差RTT)为(一般$\beta = 0.25$)
重传超时间隙(TimeoutInterval)
TCP快速重传机制:
如果发送方收到对同一数据收到3个重复的ACK(实际收到4次该ACK),则认为此时未ACK的segment丢失,不需再等待timeout,重发未ACK的最小seq#
接收方要控制发送方,使发送方不会发送得太快导致接收方的缓存(buffer)溢出。
如果sender接收到$rwnd=0$,此时没有剩余buffer,再发送数据会造成receiver buffer溢出,但是有要防止锁住。
所以sender向receiver发送一个1 byte data的报文,以更新rwnd。
为什么两次握手行不通?
图 TCP3次握手
图 TCP关闭连接
sender逐渐增加发送速率(window size),从而探查可用bandwidth,直到丢包
TCP发送速率(TCP sending rate)
发送cwnd bytes,等待1个RTT接收ACK,然后再发送后续的bytes。
当cwnd达到上次timeout时的1/2(即sstresh)时,从指数级增长变成线形增长。
sstresh —— 出现丢包时,将sstresh设置为此时cwnd的1/2
图 TCP Tahoe/Reno下cwnd的变化图【注:中间有一次3次ACK的丢包】
10Gps的吞吐量,报文段丢失概率为 $2\times 10^{-10}$
目标:K条TCP连接,经过R bps的瓶颈,每条TCP连接分 R/Kbps,则公平。
以两条TCP连接为例,从A出发,经过加性增、乘性减,会逐渐趋向公平线。所以TCP可以实现公平性。
网络层提供 尽力而为的服务 (best-effort service)。
VC组成:
路由维持连接状态的信息。
信令协议(signaling protocol)
VC采用信令协议(signaling protocol)
转发表存储地址范围对应的链路接口,比如
例题:下面转发表
目的地址
11001000 00010111 00010110 10100001
和
11001000 00010111 00011000 10101010
分别对应的Link Interface为?
11001000 00010111 00010110 10100001
-> 0
11001000 00010111 00011000 10101010
-> 1(与1和2都匹配,但是与1匹配更长)
ATM:复杂度在网络核心
目标:从源到目的找到一条最好的路径
路由图表示:
路由算法:找到cost最小路径
路由算法分类
算法步骤如下:
G={V,E}
算法复杂度
假如有n个节点,
Dijkstra算法存在振荡问题。
通过广播路由得到路由的实时情况。完成广播通信的最直接方式是由发送节点向每个目的地分别发送分组的拷贝。
洪泛 (Flooding):从源发送pkt到所有其他的节点
无限制洪泛会引起 广播风暴 (Broadcast storm),导致广播路由耗光了所有的流量。
受控洪泛 (Controlled flooding):解决广播风暴问题
序号控制洪泛 (Sequence-number-controlled flooding)
源节点将其地址(或其他的唯一标识符)以及广播序号放人广播分组,再向它的所有邻居发送该分组。每个节点维护它已经收到的、复制的和转发的源地址和每个广播分组的序号列表。当一个节点接收到一个广播分组时,它首先检查该分组是否在该列表中。如果在,丢弃该分组;如果不在,复制该分组并向该节点的所有邻居转发。
反向路径广播 (Reverse Path Broadcasting,RPB)
RPB 的基本思想是当一台路由器接收到具有给定源地址的广播分组时, 仅当该分组到达的链路正好是位于它自己到其源的最短单播路径上,它才向其所有出链路 (除了它接收分组的那个)传输分组。否则,该路由器丢弃入分组。
定义 $d_x(y)$ :从x到y的最小cost路径的cost
Bellman-Ford方程:$d_x(y)$进行分解
例题:通过$d_v(z)$、$d_w(z)$、$d_x(z)$计算$d_u(z)$。
迭代、异步
:
每个本地迭代产生于:
如何解决无限问题?
如果要节点最小cost路由要绕路(即不是邻居),则标为$\infty $
cost:跳数
最大15跳 ,16跳视为$\infty $。设置最大跳数以防止无穷计数问题,但这也限制了只能用于小网络,大网络很容易超最大跳数。
每30s通过发送通告的方式更新DV,通告最多路由到25个目的
如果超过180s每收到通告,则这个邻居/链路宣告死亡
每个边界网关向邻居(对等方)广播到达目的地的整个路径(即 AS的序列)
eBGP :外部BGP,跨越两个AS对话。从相邻的AS获取子网可达性信息。
路由器可能知道到达同一个前缀的多条路由。BGP以下优先级选择路由:
假设:网关X 将其路径发送到 网关W
X是 Multihomed AS,连接了两个ISP,也可以称为 dual-homed,一般是大型公司。X可以不允许 B -> X -> C 这条路由,则X不通告B有路由到C
A 通告 B 路径 AW
IP数据报分片示例
需要将数据分为3片来发送
length
:片长度,包括了 20 bytes IP首部部分,最大为MTU
fragflag
:3 bits
offset
:data部分偏移量,以 8 bytes 为单位,只计算data部分
接口连接方式
把路由器去掉,剩下的每个区域都是一个子网。
上图中有6个子网。
0
1.0.0.0
~
127.255.255.255
10
128.0.0.0
~
191.255.255.255
110
192.0.0.0
~
223.255.255.255
1110
1111
当一台主机加入网络时,从子网中的DHCP服务器获取IP地址。
ICANN:Internet Corporation for Assigned Names and Numbers
10.0.0.0
~
10.255.255.255
(A类)
176.16.0.0
~
172.31.255.255
(B类)
192.168.0.0
~
192.168.255.255
(C类)
10.0.0.0
~
10.255.255.255
),一个NAT支持内部60000+的连接
在Mac上可在app“系统信息”中的
窗口
->
网络实用工具
中使用Ping、Traceroute等工具。
版本
(Version,
4 bit
)
对于IPv6,字段的值是6(0110)。
流量类型 (Traffic class, 8 bit )
用来标识对应IPv6的通信流类别,类似于IPv4中的ToS。
流标签 (Flow label, 20 bit )
用来标记报文的数据流类型,以便在网络层区分不同的报文。
有效载荷长度 (Payload length, 16 bit )
给出了IPv6数据报中跟在定长的40 byte数据报头部后面的字节数量。
下一个头部 (Next Header, 8 bit )
该字段标识数据报中的内容(数据字段)需要交付给哪个协议(如TCP或UDP)。无扩展的头部,Next Header指向TCP/UDP;有扩展的头部,Next Header指向的下一个头部比如路由选择。与IPv4头部 协议(Protocol)字段相同。
跳段数限制 (Hop limit, 8 bit )
生存时间,相当于IPv4中的TTL。转发数据报的每台路由器讲对该字段内容 -1,如果跳转限制计数到0时,则丢弃该数据报
源IP地址 (Source Address, 128 bit )
目的IP地址 (Destination Address, 128 bit )
数据 (Data)
三种类型: 单播 (unicast)、 多播 (multicast)、 任意播 (anycast)
冒号划分的十六进制 (128 bit)
eg.
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
用双冒号
::
表示一组0或多组连续的0,但只能出现一次。
FF05:0:0:0:0:0:0:B3
=
FF05::B3
0:0:0:0:0:0:128.10.2.1
=
::128.10.2.1
(IPv4和IPv6兼容的IP)
12AB:0:0:CD30:0:0:0:0
=
12AB::CD30:0:0:0:0
=
12AB:0:0:CD30::
(如果出现两个多个0,随意压一个都行)
全球路由前缀 (Global routing prefix, 48 bit )
前3位为
001
,分配给公司和组织。
子网ID (Subnet ID, 16 bit )
如果是小公司,只需要1个子网的话,全设为0
接口ID (Interface ID, 64 bit )
基于 EUI-64
当IPv6穿过IPv4的路由器上时,将IPv6作为载荷承载在IPv4上。就是像一个连接两个IPv6路由器的IPv4隧道
链路层服务:
成帧 (Framing)、 接入链路 (link access)
将来自上级的数据报分装成帧,加上header、trailer
完成共享媒体的信道连接
可靠交付(Reliable delivery)
流量控制(Flow Control)
差错检测(Error Detection)
差错纠正(Error Correction)
在每帧的前面添加 Counting header(本帧长度)
设定两个ASCII——SOH、EOT,SOH为标注开始的字符,EOT为标注结尾的字符。
如果中间的数据部分也有SOH或EOT,则加入转义字符 EOT 标识。类似于C语言中的
\
的作用。
与基于字符的首尾界定法的思路相似,但开始和结束的标志为
01111110
为防止中间的数据部分也有
01111110
导致提前结束
1
后插入一个
0
1
后删除一个
0
1
0
违逆码只能应用在物理层,因为违逆码无法储存。
差错检测不是100%可靠的。
更大的EDC检错能力更强
单个奇偶校验位 (Single Bit Parity)
分为奇校验和偶校验,EDC长度为1 bit。
如发送一个长为$d$ bit 的信息时,加EDC一共$d+1$ bit。
1
(即如果发送的信息有偶数个
1
,则EDC为
0
;奇数个
1
,则EDC为
1
)
1
(即如果发送的信息有偶数个
1
,则EDC为
1
;奇数个
1
,则EDC为
0
)
下图采用偶校验,信息D中共有9个
1
,所以偶校验位为
1
。
奇偶校验只能检测出奇数个错误的情况。但由于现在传输的准确率很高,就算出错,大概率也就出 1 bit 的错误,所以使用简单的奇偶校验也能检测出大部分错误。
二维奇偶校验 (two-dimensional parity)
将$D$中的$d$ bit 划分成$i$行、$j$列,计算每行和每列的奇偶校验值,产生$i+j+1$个奇偶比特,即ECD长度为$i+j+1$ bit。
二维奇偶校验不仅可以检测错误,还可以利用奇偶校验差错的行和列的索引找出错误的比特位,进行纠错。
CRC(Cyclic Redundancy Check),循环冗余检测。
思路:发送信息$D$,设置一个生成多项式,利用冗余位$R$,将$D+R$凑成生成多项式的整数倍,在接收方如果无法整除,则出差错。
设置一个$r+1$ bit 的生成多项式,先将生成多项式$G(x)$化为二进制数$G$,最高位必须为$1$。
比如下面,三次项和常数项系数为$1$,则二进制数$G$的第四位和第一位为$1$
生成多项式$G$为$r+1$ bit,则CRC冗余位为$r$ bit。如此才能保证能把$D+R$凑成$G$的整数。
增加$R$的目的是实现:
先将信息$D$乘以$2^r$,即左移$r$ bit,后面补
0
。再将移位后的$D\times 2^r$除$G$,但是中间步骤不用减,而用异或。比如
信息$D$为
101110
,生成多项式$G(x)=x^3+1$。此时$r=3$,先在$D$后补$3$个
0
,得
101110000
,再除以$G=1001$
得到的余数
011
则为CRC冗余位$R$。
发送方发送信息$D$和冗余位$R$的拼接,即
101110011
。
接收方收到发送方发来的
101110011
后,将其除以生成多项式$G$
1001
。如果整除则未检测到差错,否则检测到差错。
由链路一端的单个发送方和链路另一端的单个接收方组成。
多个发送方和接收方,单一的、共享的信道。
多路访问协议 (Multiple access protocol),规范结点在共享的广播信道上的传输行为。
多路访问协议分类:
多路访问协议的目标:高效、公平、简单、分布式
TDM将时间划分为时间帧(frame),并进一步划分每个时间帧为$N$个时隙(slot),链路中的每条连接专用一个时隙。
详见 码分多路复用(Code division multiplexing,CDM) ) 。
假设一帧在$t_0$处开始传输,则在$[t_0-1,t_0+1]$,其他结点如有传输,发生碰撞,则易损时间区长度为$2\tau$($tau$为一帧的传输时间)。
一个结点发送成功,则需要本结点发送、其他结点在$[t_0-1,t_0]$和$[t_0,t_0+1]$不发送。一个给定结点成功传送的概率为
则有$N$个结点,任意一个结点成功传送的概率为
如此,求得纯ALOHA的最大效率为$1/(2e)\approx 0.18$(改变$p$,使$S$最大化)。
假设一帧在$t_0$处开始传输,则在本时隙中,其他结点如有传输,发生碰撞,则易损时间区长度为$\tau$($\tau$为一帧的传输时间)。
一个给定结点成功传送的概率为
如果有$N$个活跃结点,任意一个结点成功传送的概率为
如此,求得时隙ALOHA的最大效率为$1/e\approx 0.37$(改变$p$,使$S$最大化)。即在有大量结点有帧要传输时,最多$37%$的时隙做有用的工作,信道传输速率不是$R$ bps,而是$0.37R$ bps。
时隙ALOHA的最大效率是纯ALOHA的两倍。
载波侦听多路访问(CSMA,Carrier Sense Multiple Access),一个结点在传输前先侦听信道。
如果侦听到 信道空闲 ,则传输帧
如果侦听到 信道正忙 ,则推迟传输。再传输方式分为坚持型和非坚持型:
CSMA依旧会发生 碰撞
只要共享信道,那么碰撞就是不可避免的,即使CSMA有侦听。
比如下图中,B结点在$t_0$时传输帧,但是帧的传输是需要一定时间的,这就导致在$t_1$时,D结点侦听判断信道空闲,传输帧。两信号发生碰撞。
如此,整个帧传输时间被浪费了。可以看出,广播信道的端到端 信道传播时延 (distance and propagation delay)(信号从一个结点到另一个结点的传播时间)在决定性能上起关键作用。
如下图,当B结点和D结点检测到碰撞时,立即停止继续发送。
争用期 :以太网的端到端往返时间$2\tau$
A结点给B结点发送帧流,最坏情况就是在即将发送到B结点时,发生碰撞,返回碰撞信息,最大用时即为$2\tau$。
最短帧 :最短帧长度为$2\tau R$($R$为信道速率)
和上述同样的最坏情况中,从A结点发送帧,到碰撞信号返回到A结点花费$2\tau$的时间,在此期间A结点不能停止帧的发送,所以最短帧的长度为$2\tau R$。
如此可以最大利用网络效率,而且不会产生二义型。如果发送完了这个帧,没有发生碰撞,则发生成功。
CSMA/CD 效率
CSMA/CD 效率:当有大量的活跃结点,且每个结点有大量的帧要发送时,帧在信道中无碰撞地传输的那部分时间在长期运行时间中所占的份额。
其中,$t_{prop}$为两结点之间的最大传播时间;
$t_{trans}$为传输一个最大长度的帧的时间。
效率趋近1,则需
CSMA/CD 比 ALOHA 简单、便宜、分布式。
有一个主结点
主结点以循环的方式轮询每个结点
主结点先向一个结点发送报文,告诉能够传输的帧的最多的数量,这个结点传输完帧后,主机点再发给下一个结点报文,循环轮询。
令牌 (token)在结点之间以某种固定次序进行交换
结点只有在拿到令牌时,才能发送帧
受控的,不会发生碰撞
可以叫 MAC 地址 、 LAN地址 、 物理地址
用于从一个接口到另一个物理连接的接口(同一网络)获取数据报
MAC地址长度:$48$ bit / $6$ byte
与硬件有关,一个网卡(适配器)对应一个MAC地址
例如:
1A-2F-BB-76-09-AD
与局域网相连的每个接口都有唯一的MAC地址
MAC地址由IEEE分配
IEEE给公司固定MAC地址的前$24$ bit,后$24$ bit由公司保证每个适配器MAC地址的唯一性
IP地址和MAC地址的关系:IP地址就像是一个邮件地址,解决在哪上网的问题;MAC地址像身份证,解决谁在上网的问题
ARP(Address Resolution Protocol),地址解析协议
局域网中的每个IP结点(主机、路由器)都有ARP表
ARP表 :局域网结点的IP地址和MAC地址的对应关系
<IP address; MAC address; TTL>
TTL
:存活时间,过TTL的时间要丢弃这一行数据
早期流行,所有的结点共用一条总线。
以太网现在使用的拓扑结构,中间是交换机,所有结点和交换机的连接是唯一的,不会发生冲突。
前导码 (Preamble, 7 byte )
7 bytes 的方波
10101010
,用于“唤醒”接收适配器,并将它们的时钟与发送方的时钟同步。
帧开始符 (Start of Frame Delimiter(SFD), 1 byte )
10101011
,用来警告接收适配器,要开始了。
目的MAC地址 (Destination address, 6 byte )
目的适配器的MAC地址。
源MAC地址 (Source address, 6 byte )
源适配器的MAC地址。
类型 (Type, 2 byte )
上层的协议。比如,IP协议对应
0X0800
。
数据 (Data, 46~1500 byte )
IP数据报。
最小长度——46 byte
由$2\tau R$决定。IEEE 802.3中,$2\tau$为$51.2\mu s$,$R=10Mbps$,由此得到最小帧长度$64\ bytes$。再减去$18\ bytes$的其他部分,得到最小数据的长度$46\ bytes$。
小于最小长度得补充到46 byte。
最大长度——1500 byte
超过最大长度得分片。
帧校验序列 (FCS, 4 byte )
错误检测机制,比如CRC。
1 |
A: //A事件 |
Jam Signal :长$48\ bits$,保证每个其他的发送方意识到冲突
一旦检测到冲突,为降低再冲突的概率,需要等待一个随机时间,二进制指数退避算法即解决时延时间的问题。
时延的时间为端到端的往返时间$2\tau$的整数倍,即$2\tau \times n$($n$为整数)。$k$为冲突次数collisions。
下图为$100\ Mbps$以太网标准,其中100代表$100\ Mbps,TX、T2、T4代表媒体为不同的铜线,FX、SX、BX代表媒体为不同的光纤。
<MAC address, interface, TTL>
,即MAC地址、通向该MAC地址的接口、存活时间。
1 |
when frame received at switch: //交换机接收到帧 |
为解决上述问题,采用虚拟局域网VLAN。
VLAN:在单个LAN内,将支持VLAN功能的交换机配置为多个虚拟LAN。
最早采用实体线相连,后采用中继端口。
中继端口 (trunk port):也可以叫共享端口,在多个物理交换机上定义的VLAN之间传送帧。
下图中,a为实体线相连,b为中继端口连。
802.1q:原802.1帧未带有VLAN标识,所以802.1q协议为中继端口之间转发的帧添加/删除了其他报头字段