Ch1 计算机网络和因特网
原目录:计算机网络
1. 因特网
即世界范围的计算机网络
构成与名词解释
主机/端系统 | 几十亿台连接因特网的设备 | |
通信链路(links) | 包括fiber, copper(铜线), radio, satellite等,其传播速度即为带宽(bandwidth),单位为bit/s或bps | |
分组(packet) | 端系统间发送数据,发送端把数据分段加上首部字节,由此形成的信息包为packet | |
路由器(routers) | 在不同端系统之间转发分组(forward packets) | |
因特网服务提供商(ISP) | 自身即为多台分组交换机和多段通信链路组成的网络,ISP端系统提供不同类型的网络接入 | |
协议(protocol) | 定义了两个或多个通信实体之间交换报文(message)的格式和顺序,以及报文传输和其他事件所采取的动作
|
2. 网络结构

2.1 网络边缘
network edge
构成 | 端系统和应用程序 |
模式 | CS, P2P |
2.2 接入网
将端系统物理连接到其edge router的网络
形式 | 描述 |
Dial-up Modem 拨号调制解调器 | 使用电话线,Modem把数字数据转换为高频音,通过电话线给中心局;模拟信号再通过Modem转回数字数据,问题在于不能"always on",通话时就无法上网 信号转换: digital <-> analogue signal 速度: 最高56Kbps 线路: dedicated(家庭直接由电话线连接CO) |
Digital Subscriber Line | 原理同上,但对不同信号(高速下行/中速上行/双向通话)使用不同频率编码,在接入时使用分配器过滤不同频率的信号,实现always on 信号转换: digital <-> analogue signal 速度: 上行: 1Mbps 下行: 8Mbps 线路: dedicated |
cable 电缆接入 | 一种住宅接入(residental access)方式,使用有线电视线缆,系统中: 信号转换: digital <-> analogue signal 速度: 上行: 2Mbps 下行: 30Mbps 线路: shared(无论光缆和电缆) |
光纤到户 | 使用光纤连接中心局和家庭,速度快,同时可携带电话,电视信号,分为主/被动两类
信号转换: light <-> electrical 速度: 有KMbps的潜力 线路: shared |
ethernet 以太网 | 通常在企业,大学中使用,端系统用双绞铜线连接以太网交换机,再连接更大的因特网 速度: 10Mbps,100Mbps,1Gbps,10Gbps... |
wireless access 无线接入 | 无线用户从/到一个access point发送/接收packet,接入点即基站,其与企业网相连,再与更大因特网连接 |
2.3 物理媒介
常用概念
bit | 在传送者/接收者间传播 |
bit rate | 比特速率,每秒传输的bit数,单位bps |
physical link | 连接传送者/接收者 |
guided media | 在固体媒介中传播(铜缆,光纤) |
unguided media | 自由传播(广播) |
常见媒介
Coaxial cable 同轴电缆 |
|
Optical fiber 光纤 |
|
radio 广播 | 常见类型
|
twisted pair 双绞线 |
|
2.4 网络核心⭐
构成 | 大量连接的路由器 |
数据传播方式 |
参考链接: |
- 电路交换
网络在host间创建专用的端到端连接(e2e),路径中的routers都为连接维持状态,连接期间也预留了恒定的传输速率(带宽,bandwidth),如传统电话网络 特点总结:
|
- 电路交换中的复用(multiplexing)
链路中对于不同连接建立不同线路的方式为以下两种multiplexing
频分复用 | 时分复用 |
链路为不同连接分配特定频段,该频段的宽度即为带宽 | 时间划分为固定间隔的帧,帧又分为固定数量的时隙(slot),不同时隙对应不同连接专用 |
右图每一帧左旋90度,即为左图,本质TDM也是使用了1/4的带宽 | |
❓例题: 传输一个64000bits的文件,假设使用24slots的TDM电路交换,(带宽)比特速率1.536Mbps,且需500ms创建端到端电路,则发送文件的时间为? 解: 1.536Mbps/24 = 64Kbps (不理解就看FDM与TDM图,实际等效) 64000bits/64Kbps = 10s 10 + 0.5 = 10.5 s | |
- 分组交换
每个端对端数据流被分为组(packet),不同用户的组共享网络资源,每个组可占有全部带宽;总资源需求可以超过可用量,但在分组队列中会发生阻塞,分组每次只能移动一跳(hop) 特点总结:
|
- 分组交换中的复用(multiplexing)
统计复用也为"异步时分复用,STDM",对比TDM,它能够动态的分配时隙,效率更高(根据需求共享带宽)
- 存储转发传输(store-and-forward transmission)
交换机(包括router和switch)在开始向链路传输分组的第一个bit前,必须接收整个的分组(缓存)
如图链路,源发送一个大小L的packet,链路传输速率Rbps,则传输到目的地的时延为多少? 解:由于S&F机制,开始源需要L/R才能将packet完整传输到router,此时router才能开始forward此packet,又需要L/R才能完整到达目的地,共需2L/R的时间 结论:对于N条速率R的链路组成的路径(N-1个router),源发送一个packet抵达目的地的e2e时延为: |
- 排队时延(queuing delay)和分组丢失(packet loss)
packet需要传输到某个链路时发现其正传输其他packet,此时就需要进入交换机的输出缓存(output buffer)中等待,因此产生了排队时延,但buffer有限,当到达的packet发现buffer已经被填满,此时packet被丢弃,发生丢包(packet loss)
如图,35个用户共享链路进行分组交换,带宽1Mbps,每个用户活跃时只能使用100kbps带宽,且活跃时间占其传输时间的1/10,求分组交换,电路交换下最多用户数?
|
- 转发表和路由选择
路由器有无数链路可走,为了选择正确的forward方向,源主机向目标发送packet时,在其首部包含了目的地的IP地址,当到达某个router时,router检查packet的目的地址中的一部分,然后向相邻router转发packet;在每个router中有一个转发表,可以将目的IP或其中一部分映射为应该转发的输出链路(见Ch4 网络层)
2.5 网络的网络
为了解决ISP自身互联的问题,如今的网络结构是networks of network:
在给定区域,有一个较大的ISP(第一层ISP),为小规模ISP或区域ISP提供网络接入,下级ISP类似;当两个ISP对等(peer)时,互相之间不结算(收费);且任何非第一层ISP都可以多宿
|
关于内容提供商网络:以Google为例

3. 分组交换深入
3.1 时延(Delay)

时延分为多种类型
处理 | pkt从到达节点到进入输出队列的间隔,包括检查packet首部决定去向,检查bit级别错误 |
排队 | 当link在传输别的packet,则当前packet等待 |
传输(transmission) | 即L/R,将完整packet传输(推出)的时间 |
传播(propagation) | 受限于Link的物理媒介传播速度,d为router间距,s为物理速率,则时延为d/s 区别传输&传播时延
|
e2e时延
之前都在讨论节点间的时延,但两台设备传输数据时的真正时延为e2e时延
假设两台端系统间的Link要通过N-1台router,即N次转发,且无阻塞(无排队时延),设每台router和源host的传输速率都为R,则e2e时延为(对比S&F下的e2e时延):
![]()
![]()
3.2 丢包(Loss)
由排队时延(queuing delay)和分组丢失(packet loss)知道丢包发生在排队时延过长的时候,这取决于"流量到达队列的速率,link传输速率,流量本身性质(周期性或突发)",规定:
- a表示packet到达队列的平均速率(pkt/s)
- La就是就是link每秒要承受的比特数
- La/R可以描述link的流量压力,称为流量强度(traffic intensity)
小结:
运算 | 解释 | 常用单位 |
a | packet达到队列的平均速率 | pkt/s |
R | link的推出bit的速率 | bps |
L | 视所有packet大小都是L比特 | b |
La | 每秒到达Link的比特数 | bps |
La/R | 流量强度,link的压力 |
|

3.3 吞吐量(Throughout)
吞吐量用于描述传输速率,有两种情况的定义:
- 瞬时(instaneous):主机A到B在瞬间传输的bps
- 平均:比如下载Fbits的文件用去Ts,则平均吞吐量为F/Tbps
- 瓶颈链路(bottleneck link)

- Rs<Rc时,packet以Rs速度被推入router,只能以最快Rs转发给目的地,不可能达到Rc,但此时可以顺畅转发
- Rs>Rc时,packet以Rs速度推入router,最快也无法突破Rc这个限制,且会发生阻塞,堆积在router的packet会增长到被丢弃,上述即为bottleneck link,其吞吐量为:min{Rc, Rs}
通常核心网link的传输速率R都非常快,但根据瓶颈链路可知,吞吐量被接入网的传输速率Rc所限制
上述场景不代表网络核心不会限制吞吐量,👇下图描述了下载场景,此时吞吐量为min{Rc,Rs,R/N},即便R本身很大,当用户数目变多后R/N太小,此时网络核心也会成为限制吞吐量的因素

4. 协议层次及其服务模型
网络以分层方式组织协议和实现协议的软硬件,即协议层次
- 层间关系
某层向其上一层提供服务,即服务模型(service model);
而每层通过在该层中执行动作和直接使用下层的服务来提供服务;
- 协议层的实现
一个协议层可用软/硬/结合实现:
- 如HTTP这类应用层协议总在端系统中软件实现;运输层类似;
- 物理层与链路层中协议通常在网卡中实现;
- 网络层作为软硬件混合体通常结合实现;
第n层协议分布在网络的不同组件中,其不同部分通常在网络组件各部分中
4.1 协议栈
所有各层协议合称协议栈,因特网协议栈有5层,ISO/OSI模型有7层
- PDU(Protocol Data Unit):协议数据单元,是指对等层次之间传递的数据单位
因 特 网 协 议 栈 | 应用层 | 支持网络程序,是网络程序及其应用层协议存留处
| |
运输层 | 在程序端点间传输应用层message
| ||
网络层 | 将称为数据报(datagram)的网络层分组从一台主机移动到另一台
| ||
链路层 | 在相邻网络节点间转递数据,其上的分组为帧(frame)
| ||
物理层 | 负责将frame中的bit运输到相邻网络元素
| ||
I O | 表示层 | 使通信的app可解释交换数据的含义 | |
会话层 | 提供数据交换和定界与同步功能,包括建立check point和恢复 |
4.2 封装

- 封装(Encapsulation)
源主机app发出一个message,其被传输给运输层,运输层在message首部加入附加信息Ht(通常这个Ht会被接收端的运输层使用),称运输层封装了应用层message,以下每层类似,每层封装后的报文结果称为每层协议栈的PDU.
封装即是指下层对上层数据的处理

每一层,一个packet通常由两部分:首部字段+有效载荷字段(payload field),后者通常来自上一层的packet
- 拆封
如图,源主机首先传输数据给switch,后者只实现了两层:先通过physical接收bits,再通过link接受为完整的frame,再由link重设首部,确定下一个相邻的网络元素;下一个router中发生了类似的过程,因此进出router的packet,其hl,hn肯定不同
MindMap
SCU林峰老师(my计网老师)制作

Ch2 应用层
原目录:计算机网络
1. 网络应用
1.1 网络应用架构
- client-server, CS
server
| |
clients
|
- peer-to-peer, P2P
pure p2p
| |
特点
|
- CS & P2P混合
比如QQ,当登录后获取联系人列表,为CS模式,单人用户之间聊天,为P2P模式
1.2 进程通信
- socket
进程通过套接字这个网络接口向网络发送/接收message

- 进程寻址
在因特网中使用"IP地址+端口号port number"来唯一标识网络上的进程,可以类比Linux中的pid
| 为何不采用PID区分网络唯一进程 |
|
关于port |
port分为三类
|
- 应用程序对传输服务的需求
①Data loss:丢包,如视频,通话可掉帧,但游戏需要实时性
②Timing:延迟,一些apps需要低延迟
③Throught:吞吐量,一些apps可能需要最小吞吐量来保证效率,其余可能需要弹性的按需分配
④安全性:加密(encryption),数据完整性
- 因特网传输协议服务(TCP/UDP是传输层协议)⭐
| TCP 服务 | UDP 服务 |
意义 | 由于分组交换中没有建立连接,packet传到哪里完全由网络核心的routers们决定,可能出现问题: | 用户数据报协议,实现简单,发送速度快 |
支持 |
|
|
不支持 |
|
|
应用 | 邮件,远程连接,web | 流媒体,DNS,网管协议 |
对比 | UDP实现简单速度快;TCP为了可靠性需要大量约束 | |
2. Web和HTTP
2.1 HTTP概述
名称 | 超文本传输协议 hypertext transfer protocol | |
位置 | 应用层 | |
架构 | CS | |
特点 |
|
2.2 持久/非持久
- 背景
典型的HTTP传输场景 | 关于RTT(round-trip time, 往返时间) |
建立TCP连接 ->传递HTTP请求/响应 ->TCP连接关闭 | RTT是一个packet在CS之间往返的时间 |
三次握手+HTTP RR传输=2RTT | |
**问:一个TCP可以携带几个不同的HTTP请求: 通过三次握手说明,只有持久连接时才能携带一个以上的不同HTTP请求 | |
- 四种HTTP连接方式⭐
nonpersistent | 每个R/R对经过一个单独的TCP连接发送 |
np + cocurrent TCP | 虽然每个R/R使用单独TCP,但TCP可同时创建 |
persistent | 所有的R/R对可通过一个TCP连接发送,由此可知,只有在persistent连接中,一个TCP才能携带多个HTTP请求,依次处理 |
(默认)p + pipeline (无等待HTTP) | 无需等待之前的response返回,可一次性发出所有request,近似为同一时间全部发出(pipeline看似想同时处理HTTP请求,但实践困难,虽然服务器端默认开启,但现代浏览器默认关闭) |
例题⭐
| |
| 清楚流程: 2. 对html中的三幅图片: 当为np时,每个图片也需要2RTT=>3*2RTT; 当为cTCP时,相当于只有一幅图片=>2RTT; 当为p时,无需重建TCP,每个图片需要RTT=>3*RTT 当为PP时,相当于一幅图片且无需重建TCP=>RTT |
(设传播时延为ds) | |
深入分析以上非持续并行的2RTT构成 | |
| |
2RTT+RTT'+9*100k/R
| |
2.3 HTTP请求报文
HTTP协议有request和response两类报文,下图为报文形式,无需死记硬背
request | response |
GET/POST/HEAD区别
| Connection控制是否为持久连接 |
2.4 Cookies
构成 | |
流程 |
2.5 Web cache
构成 | web cache既是client也是server:在本地存储副本传输给客户;又向原始server发出request |
作用 |
|
3. FTP
|
3.1 对比HTTP
- 相同点:
①都是app层协议
②都以TCP作为支持的运输层协议
③都是client-server架构,区分服务器端和客户端
- 不同点
| HTTP | FTP |
面向对象 | 超文本传输,面向网页 | 文件传输协议,面向文件 |
端口 | 默认80 | 默认20,21 |
传输 | 单TCP连接,控制信息带内传输 | 双TCP连接,控制信息带外传输 |
状态 | 无状态 | 会话期间保留用户state |
持久性 | 默认持久且带流水线,可转换 | 控制连接persistent,数据non-persistent |
4. 电子邮件
一个典型的电子邮件系统如右图,主要由三部分构成:
|
4.1 发送协议
simple mail transfer protocol是一种发送协议
构成 | 使用TCP进行可靠传输,占用端口25,有状态 |
过程 |
|
举例 | ①②③A打开Outlook写信->Outlook发送给A.server (SMTP) ④---->A.server和B.server建立TCP连接----> (SMTP) ⑤⑥B.server中信息被Gmail读取->B在Gmail上查看邮件 (POP3/IMAP...) |
- 对比HTTP
SMTP | HTTP | 共同点 |
|
| 都有基于ASCII的command/response交互,状态码 |
4.2 获取协议
- POP3(Post Office Protocol)
POP协议负责agent<-->server的授权和下载,无状态
- IMAP(Internet Mail Access Protocol)
IMAP更复杂,且能控制msgs在server上的存储,有状态
- HTTP
Web邮件系统,HTTP可以代替POP3/IMAP完成agent<-->server之间的传输,但依旧无法取代SMTP
5. DNS
5.1 概述
定义 | ①一个由分层(hierarchy)的DNS服务器实现的分布式数据库 ②使得host能够查询分布式数据库的应用层协议. |
位置 | DNS服务器:通常是运行Berkeley Internet Name Domain软件的UNIX机器. DNS协议:运行在运输层的UDP之上,使用53端口 |
功能 |
用户host上的浏览器/邮件阅读器需要把host name转换为IP地址时:
(所有请求和回答msgs都使用传输层UDP数据报通过53端口发送);
|
热门站点的Web服务器被冗余的分布在多台服务器,每台服务器所在端系统有不同IP,但所有IP的集合对应着一个规范host name,为了防止客户只对排在最前面的IP访问导致服务器负载不均,DNS会循环地址的次序,分配负载 |
- 非集中式(centralized)DNS的原因
|
5.2 DNS分级

Root name servers | 世界上400多个根域名服务器遍布世界,由13个组织管理.根域名服务器提供TLD服务器的IP地址 |
TLD, Top-level domain servers | 顶级域名服务器.对于如com,org,net,edu,gov等顶级域和国家域都有TLD服务器,提供authoritative servers的IP地址 |
Authoritative DNS servers | 权威DNS服务器,在Internet上有公共可访问主机的组织机构需提供公众可访问的DNS记录,用以映射IP地址.组织机构需实现自己的权威DNS服务器来实现保存记录 |
local DNS serves | 本地DNS服务器.并不严格属于分层结构.每个ISP有一台local server,当用户host发出DNS query时,query被发送到本地server(更像是代理,实现请求的转发) |
5.3 DNS解析
- Iterated query 迭代查询
前提:纽约大学计算机系主机cis.poly.edu想知道主机gaia.cs.umass.edu的IP地址,且已知NYU计算机系的本地DNS服务器dns.poly.edu | |
过程 ①cis.poly.edu首先向本地dns.poly.edu发送一个查询msg,其中包含被转换的主机名gaia.cs.umass.edu ②本地DNS服务器发送至root server ③root server发现edu前缀并把负责edu的TLD的IP地址列表返回给本地server ④本地server再次向TLD发送msg ⑤TLD注意到umass.edu前缀,返回负责的权威server IP地址给本地 ⑥本地server直接向dns.cs.umass.edu发送msg ⑦对应server用gaia.cs.umass.edu对应的IP地址响应 ⑧本地server返回IP地址给host 全程发送了4次msg,接收4次msg |
- recursive query 递归查询
对比:现在普遍采用迭代查询,因为DNS缓存技术的存在,更节约资源 | |
过程 ①用户host向本地server发送查询msg,其中包含要转换的主机名 ②本地server向root server发送msg ③root server根据edu前缀发送至负责edu的TLD ④TLD根据umass.edu前缀发送msg至负责的权威server ⑤权威server将msg中主机名对应的IP地址发送回TLD ⑥TLD返沪给root ⑦root返回给本地server ⑧本地server返回转换结果给host |
5.4 DNS缓存技术
定义 | caching技术能把任何映射缓存在本地 比如dns.poly.edu从root/TLD/authoritative得到的映射结果都会被保存 |
应用 |
|
5.5 DNS记录
- 记录
资源记录 | resource record:实现分布式DB的所有DNSserver存储的即为rr,提供了主机名到IP地址的映射,其中ttl为记录生存时间 |
Type--A |
|
Type--NS |
如(foo.com, dns.foo.com, NS) |
Type--CNAME |
比如www.ibm.com是servereast.backup2.ibm.com的别名 |
Type--MX |
|
- 插入
加入自己向创建域名,就需要将其放入DNS server,需要
- 给上级的:注册机构给TLD插入最基本的两条RR
①指明权威DNS服务器(NS记录)
②指明DNS server的IP地址(A记录)
举例:当要注册networkutopia.com时,需要插入
![]()
- 给自己的:自己给权威server插入web server的A RR和邮件MX RR
| |
{www.startwar.com.cn, dns1.startwar.com.cn, NS} {dns1.starwar.com.cn, 128.119.12.40, A}}
{www.starwar.com.cn, 128.119.12.55, A} {www.starwar.com.cn, 128.119.12.56, A} {starwar.com.cn, galaxy.starwar.com.cn, MX} {galaxy.starwar.com.cn, 128.119.12.60, A} |
|
6. 非要求内容
6.1 P2P
特点 |
| |
对比CS--1台服务器分发文件到N台客户机场景:已知文件大小F,上传速度u,下载速度d | ||
C/S |
| |
P2P | P2P具有特点:当一个peer接收到文件数据,可以使用上传能力重新把数据发给对等方,因此服务器只需上传一份文件,即可分发给所有设备
| |
6.2 比特洪流
名词 |
| |
定义 | 一个peer加入torrent,开始没有块,在其向tracket注册后,连接邻近peers获取块,在下载的同时也在上传;peers可以在任意时候离开并再次加入:拥有完整文件时依然可以大公无私留在洪流中上传文件,也可以在只有文件子集时立刻离开后续再返回 | |
拉块 | pulling chunks,peer A主动向洪流中的peer B请求,B会优先发送给其网络中最稀缺的资源--rarest first | |
防吸血 | tit-for-tat(一报还一报),peer A把chunk以最高速发送给4个peers,每10s评估,但为了避免形成小圈子导致没有新数据/垄断数据,每30s随机选择peer主动传输数据.这样peer A有可能变成该peer的top4之一,从而打破小团体,而且避免了某些peer只下载不上传,保证公平性 | |
6.3 查询洪泛 Query Flooding
场景 | centralized directory(集中式目录),P2P网络中文件传输可以非集中,但很多时候定位资源是高度集中的,peer需要先向目录服务器请求资源的地址,才能直接点对点传输.这带了的问题:
| |
洪泛 | P2P网络中,一台peer的查询msg通过已有的TCP连接传播,每个peer收到后先检索自己,有资源则和查询peer直接建立连接,没有则继续转发msg,peer在其中担任了:server/client/router,洪泛避免了设置目录server,采用广泛的转发来查询可用资源 | |
缺陷 |
解决:层次化overlay(覆盖),一些peer选出一个leader,类似于目录server,leader可动态调换,当group内peer查询,先由leader在组内定位,如果组内没有,在leader直接进行洪泛查询 |
6.4 分布式哈希表 Distributed Hash Table(DHT)
概述 | DHT是一个分布式的P2P数据库
|
DHT标识符 | 给定一个nbits标识符,可以分配给[]个peers,key需要和标识符相对应,这需要hash函数,即DHT来历,由于hash函数可以处理冲突,因此DHT可以映射的资源数目可以超 |
分配keys | P2P网络中peers不一定在线可用,因此分配key时,key对应的id也许不存在,此时采用"immediate successor"(近邻后继) |
捷径 | 在典型的循环DHT中,可能遇到命中率低的问题,查询被不断传递,此时使用cut可以提高效率 |
搅动 | peer churn:peer可随时离开,但DHT中的peer需要随时知道上任/继任者的IP,因此需要定时ping,查看是否alive |
6.5 区块链
- 了解--区块链
比特币即为POW,挖矿本质是耗费算力解题,证明自己后才能留下记录,即产生币
|
6.6 NAT
场景 | 类似skype的软件进行P2P通信时,面临问题:内网IP相同的机器在全世界同时可能在线非常多,因此不能直接通过内网IP进行通信 | |
解决 | NAT运行在router上,内网IP发送的数据被NAT替换IP后发送到外网,返回时同样"拆马甲" | |
定位 | NAT作为可变临时地址,当两个peer中一个在外网时,可由内网peer去找固定公网IP的peer,但如果两个都是内网peer,此时需要第三方在公网中的机器作为中介进行处理 |
MindMap

Ch3 传输层
原目录:计算机网络
1. 传输层服务
1.1 服务和协议
服务 |
|
协议 |
1.2 对比网络层
- 网络层
负责hosts之间的逻辑通信
- 传输层
负责程序进程之间的逻辑通信(依赖,加强了网络层服务)
2. 多路复用/多路分解

| multiplexing | demultiplexing |
定义 | 源host从不同socket中收集数据块,为它们封装head(用于以后分解),从而生成segments,再把segments投递到network层 | 接收端主机,运输层检查字段,标识出对应的接收socket,将把segments定向到对应socket |
原理 |
| 数据报报文段 |
2.1 UDP--无连接的M/DM
对于接收host来说:
特征 |
|
SP的作用 | segment中的dest port可供引导segment; 而SP是在当接收方需要回发报文时,会从中取值,加上发送方IP作为地址 |
2.3 TCP--面向连接的M/DM
对于接收host来说:
特征 |
|
个人理解 | |
所谓多路复用就是一条路可以同时传输多个来自不同links的segs,要做到这点,就需要区分segs,因此UDP中使用二元组,TCP中使用四元组,解复用自然而然就是"各回各家,各找各妈" | |
3. 无连接传输--UDP
3.1 概述
特征 |
| UDP seg中length指明了seg的字节长度(data+header) |
用于 | 适合loss tolerant以及rate sensative的程序,如:流媒体,DNS | |
改进 | 企业为了并取优点,大都自己设计应用层协议实现原有传输层TCP中的可靠性保证,在传输层采用UDP协议,保证速度 | |
3.2 checksum
目的 | 检测segs中的错误 | |
流程 | sender:
| receiver:
|
举例 | ||
4. 可靠数据传输原理,RDT⭐
**principles of reliale data transfer(不理解FSM简单浏览本节即可,从题中学习)
4.1框架
服务抽象 | 理想情况:数据可以通过可靠的信道传输,从而bits不会损坏或丢失,而且所有数据都按照发送顺序交付.如TCP连接 | |
实现协议 | 可靠数据传输协议 reliable data transfer protocol.如TCP就是传输层上的可靠传输协议 | |
问题 | 可靠协议的下层协议也许不可靠.如TCP在网络层上不可靠的IP协议上传输 | |
讨论目标 | 开发一个协议,能够考虑到底层带来的bits损坏或丢失升至丢包,注意的是可靠数据传输原理不针对某一层,在各层中都有体现 | |
约定 |
| |
4.2 rdt1.0
rdt1.0假设了完全可靠信道的可靠数据传输
接收高层数据,打包后通过信道传输
从底层接收packet,从中取数数据后传给较高层 | |
这种理想情况下,receiver无需提供任何信息给sender,因为无需担心出错 |
4.3 rdt2.0
rdt2.0针对有bit差错信道的可靠数据传输
FSM | |
分析FSM |
接收上层调用后把数据和checksum打包通过信道发送-->进入wait state:如果收到NAK,则重发packet继续当前state;如果收到ACK-->进入等待命令的下一状态 注意:当sender等待ACK/NAK时,无法接收上层调用,这种机制叫做"停等"(stop-and-wait)
收到packet后,如果pkt中有bit错误,返回NAK;如果没有错误,提取数据,传递数据,返回ACK |
理解 | 此时需要考虑到确认信息的需求--自动重传请求协议(Automatic Repeat reQuest, ARQ),协议中有三种应对bit差错的地方:
|
4.4 rdt2.1
rdt2.0缺陷 | 可能的解决和新的问题 | 实际方案 |
ACK/NAK本身出现错误 | 给Receiver返回的ACK/NAK也设置checksum.当Sender收到含糊的ACK/NAK分组,则重传pkt 困难在于receiver不知道上一次ACK/NAK是否被sender正确接收,从而无法区分自己正在接收的pkt是上次重传还是新的 | 在pkt中添加编号,即把当前pkt的序号放在字段中,结合停等机制,server会重发不确定的pkt,而receiver通过序号就知道接受的是重发pkt还是全新pkt |
FSM
S | 等待调用0状态-->打包发送pkt0--> 停等0状态: ①当收到NAK或发现ACK/NAK出错(corrupt),则重新发送pkt(ACK/NAK本身无需携带序号,由于停等机制,sender知道这次ACK/NAK出错发生在最近的pkt0),继续停等0状态 ②当收到ACK且反馈本身无误(notcorrupt)-->进入等待调用1状态 | |
Sender端的corrupt表示ACK/NAK混淆 | ||
R | 等待传入0状态: ①如果发现传递出错(corrupt),则打包返回NAK,继续等待传入0状态;(错误分组) ②如果接收到pkt1,传递无误,则返回ACK,继续等待传入0状态(失序分组) ③如果发现pkt0,传递无误-->提取数据,传递数据,返回ACK(正常分组)-->进入等待传入1状态 |
4.5 rdt2.2
优化rdt2.1得到2.2:NAK省略/冗余ACK
FSM | |
分析FSM |
等待调用0状态-->打包发送pkt0--> 停等0状态: ①当收到ACK1或ACK/NAK混淆时,重发pkt0,继续停等0状态 ②当收到ACK0且反馈本身无误(notcorrupt)-->进入等待调用1状态
等待传入0状态: ②收到pkt0且传递无误-->提取数据,传递数据,返回ACK0-->进入等待传入1 |
理解 | 冗余ACK体现在: 进入①前,Sender必定收到了ACK1,再次进入①收到ACK1,说明Receiver没有正确接收pkt0 |
4.6 rdt3.0
rdt3.0即比特交替协议(alternating-bit protocol)实现了有bit差错和丢包的可靠数据传输
问题 | 需要做什么 | 想法:时限+重传+冗余pkt |
|
| 让sender负责检测和恢复丢包,无论pkt或者receiver的ACK丢失,sender都无法收到合适的响应,设定一个时限,当超过后,就认为发生丢包,进行重传.由于时延的不确定,需要考虑到延迟过大导致误以为丢包后重复传输pkt产生的冗余pkt,为实现基于时间的重传,需要timer ①每次发送一个pkt(新pkt或重传pkt)时启动 |
FSM
FSM | |
分析FSM |
基本类似rdt2.2版本,等待调用0状态->打包发送pkt0,开始计时--> ①收到ACK1或ACK/NAK混淆,触发计数器进入②(计时一直进行) ②时间到,重发pkt0,重新计时 ③收到ACK0且反馈本身无误,停止计时-->进入等待调用1状态
等待传入0状态: ②收到pkt0且传递无误,返回ACK0-->进入等待传入1状态 |
总结rdt3.0的四种运行,分组号总在01间交替,因此叫比特交替协议
5. 停等协议改进⭐
5.1 利用率与流水线
rdt3.0只是功能上正确的协议,性能孱弱,左图说明了其在传输文件时低下的利用率(utilization),问题在于它的停等机制,让sender必须在接收到ACK后才能发出下一个pkt | 改进思路:流水线
|
5.1 GBN--滑动窗口协议
GBN即回退N步
模式 |
seq<base+N,窗口未满,可继续打包 base=seq,无待发送pkt | |
可靠性 | sender
| |
receiver
| ||
特征 |
| |
示意 | ||
5.2 SR--选择重传
SR--Selective Repeat
模式 | SR下receiver也设置了buffer,从而使得双方可以乱序发送/接收 | |
可靠性 |
只有收到窗口中最小pkt的ack后base++;当timeout后,重发当前最小未确认的pkt,重启计时器
对于在窗口中的pkt,正确接收后返回ack,不用考虑顺序;对于冗余/错误pkt,do nothing由sender的timer处理,时间到后对面自然会重发 | |
模式 | ||
- 收发不同步的衍生问题(ch3课后p22,23)
解:这道题先分析b更合适,注意在GBN下: b).接收方expseq=k,说明从pkt[k-N]~pkt[k-1]都已经确认接收返回ACK,则取值范围[k-N,k-1] a).由b),接收方返回了N个ACK,但不能保证都正确抵达:
|
SR接收方窗口大小问题--分组序号有限:0,1,2,3且receiver窗口大小为3. b)sender发送pkt3丢失,产生不同步,sender发送pkt4(seq0).receiver需要确认seq3和第二次出现的seq0==>对于receiver来说,无法辨别这时的seq0是新pkt或者重传 |
解:结合上一题,依旧设此时expseq=k,窗口大小N 考虑极端情况下,s和r"最不同步"的情况即receiver接受了N个pkt,返回的N个ACK全部丢失.此时receiver窗口最右端为k+N-1;sender的seq最坏为k-N,此时最大不同步距离为 包含2N个不同序列号,则为了避免发生序号重叠,应该保证序号空间范围k≥2N |
6. 面向连接的传输--TCP
6.1 TCP概览
组成 |
| |
特点 |
| |
流程 | 三次握手 | |
连接建立 | ||
数据封装传递 | ||
对比UDP |
| |
6.2 TCP seg结构

- TCP的seq和ACK
A:发出C,C的第一个byte为42,A期待收到79 B:发出C,C的第一个byte为79,B期待收到43 |
- TCP的RTT和timeout实现
RTT | sampleRTT是直接采样得出 |
timeout |
6.3 可靠数据传输⭐
网络层的IP服务不可靠,TCP在不可靠之上建立可靠数据传输服务:确保一个进程从其接收缓存中读出的data flow是无损,无间隙,非冗余,按序的数据流
- TCP重传:只能被timeout和duplicate acks触发
ACK丢失 | 早熟(timeout过早) | 积累ACK |
只要sender收到的ACK正确无误,则说明receiver对之前的PKT都正确接收,则sender可以放心的一次性确认,不用在乎中间ACK丢失 |
- 快速重传(Fast retransmit)
如果完全依靠timeout触发重传,效率不够高,比如窗口第一个pkt丢失,可能发出多个pkt后才能timeout.GBN因此引入快速重传,当sender收到多个冗余ACK后,判断该pkt丢失,不管timeout,立即重传 |
6.4 TCP流量控制⭐
背景 | 由于TCP在sender/receiver都具有buffer,为了避免处理速度不一致导致receiver端buffer溢出数据丢失,需要进行流控,使得两端速度相一致,流控算法即GBN/SR |
实现 | TCP让sender维护一个接收窗口(receiver window),用于提示receiver还有多少buffer可用,且全双工通信使得两端发送方各自维护一个窗口 |
场景 | A发送文件给B:B为连接分配RcvBuffer,B上进程定期从中读取数据,定义变量:
为了不溢出,必须保证(rwnd标识接收窗口) LastByteRcvd-LastByteRead≤RcvBuffer rwnd = RcvBuffer-[LastByteRcvd-LastByteRead |
6.5 TCP连接管理
- 三次握手
SYN=1,seq=client_isn
SYN=1,seq=server_isn,ACK=client_isn+1
SYN=0,seq=client_isn+1,ACK=server_isn+1
| |
WireShark抓包:
| |
- 四次挥手
client应用进程关闭socket
TCP向server端进程发送一个特殊seg,header中包含标志位FIN,设为1
server收到FIN,回复ACK然后
server发送自己的终止seg,FIN设为1
client收到FIN,回复ACK server收到ACK,连接关闭 |
- TCP状态序列
client | server |
7. 拥塞控制
拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信死锁
**拥塞控制是链路上的控制;流量控制是S/R端的控制
7.1 三个拥塞场景
2发送方,1无限缓存路由
(路径带宽R,λin单位byte/s) |
实际拥塞情况:左--troughout与发送速率关系;右--delay与发送速率关系 分析: b)当λin接近R/2时流量强度接近并超过 |
2发送方,1有限缓存路由 |
由于缓存有限,会发生丢包,该情况下引入"重传"机制:
分析 a)假设hostA只在buffer空闲时发送分组,此时λin=λin' b)假设hostA在确认一个packet丢失后才重发,当 c)假设hostA的timer设置较短,会提前重传,此时效率更为低下 |
4发送方,N有限缓存路由&多跳路径 |
考虑A->C,经过R1,R2,此时R2被共享,区分:此时可以看到每个路径的带宽R可被一个host完全占有
|
7.2 拥塞控制方法
e2e控制⭐ |
|
network-assisted |
|
7.3 TCP拥塞控制⭐
- 思想
因为TCP连接每一端保存:接收buffer+发送buffer+变量(LastByteRead,rwnd)
在sender端额外加入拥塞窗口(congestion window,cwnd),保证
\(LastByteSent-LastByteAcked ≤ min\ \{cwnd, rwnd\}\\\)
理解:此约束通过限制sender未确认的数据量间接限制了sender的发送速度:对于一个丢包和发送delay均可不计算的连接,在每个往返时间RTT的起始点,最多可以发送cwnd字节数据,该RTT结束时sender接收确认报文.因此sender发送速率大概为cwnd/RTT字节/s,通过调整cwnd可以调节发送速率 |
- TCP拥塞控制算法(DFA真的无法理解可以略过,直接看图下的过程分析)
主要有三个部分①慢启动②拥塞避免③快速恢复,①②是TCP强制部分,区别在于对收到ACK做出反应时增加cwnd长度的方式,③是推荐部分,非必需

慢启动 |
(第二次,sender发出两个seg,因此会有两个ACK,sender对cwnd加两个MSS,下次同时发出四个seg...依次类推达到cwnd每次翻倍的效果)
| |
拥塞避免 |
(当MSS=1000,cwnd=8000:假设一个RTT发送8个segs,当一个seg的ACK传达到sender,cwnd增加1000(1000/8000)=125,当RTT结束,cwnd共增加1000)
| |
快速恢复 |
| |
小结 | TCP拥塞控制称为"additive increase,multiplicative decrease"(加性增,乘性减,AIMD),因此期cwnd变化情况如右图所示 | |
- TCP吞吐量(不做要求,记住公式)
设cwnd长度为w字节,AIMD机制使得连接传输速率在w/2RTT(减半)和W/RTT(起始)之间变化(递增),因此:
\(一条连接的平均吞吐量:\ 0.75×\frac{W}{RTT}\\\)
- 经高带宽路径的TCP(long,fat pipe)(不做要求)
假设1500字节的seg和100ms的RTT,10Gbps发送速率.要求达到10Gbps的吞吐量,上述公式求得W应该达到83333个seg,此时关注seg的丢失,需要保证考虑丢失的情况下依然保证10Gbps的速率
\(一条连接的平均吞吐量(丢包率L,最大报文长度MSS):\
1.22×\frac{MSS}{RTT\sqrt{L}}\\
为了10Gbps吞吐量,今天的TCP拥塞控制算法仅容忍2×10^{-10}丢包率\)
7.4 TCP公平性
公平性 | 如果K个TCP连接共享带宽为R的瓶颈链路,每条链接应该达到R/K的平均速率 | |
TCP | 红线:实际吞吐量 蓝线:平均值
因此TCP实现了公平性 | |
并行TCP |
| |
UDP | 实时多媒体(Internet电话,视频会议)不愿意在TCP运行,因为不想被传输速率遏制.使用UDP时:即便网络拥塞,数据也要以恒定速率发送,即便丢包,不愿意把速率降至"公平",以保证不丢包 | |
MindMap

Ch3必考题
原目录:计算机网络 / Ch3 传输层
1. 拥控
cwnd与threshold变化
a) Identify the intervals of time when TCP slow start is operating. b) Identify the intervals of time when TCP congestion avoidance is operating. c) After the 5th transmission round, is segment loss detected by a triple duplicate ACK or by a timeout d) After the 11th transmission round, is segment loss detected by a triple duplicate ACK or by a timeout e) What is the value of threshold at the 14th transmission round f) What is the value of threshold at the 18th transmission round g) During what transmission round is the 70th segment sent? Assuming a pkt loss is detected after the 27th round by the receipt of a triple duplicate ACK, what will be the values of the congestion window size and of threshold? |
分析:可以画出每一时刻的情况
时间 | cwnd | th | 备注 | 时间 | cwnd | th | 备注 |
1 | 1 |
|
| 14 | 2 | 12 |
|
2 | 2 |
|
| 15 | 4 | 12 |
|
3 | 4 |
|
| 16 | 8 | 12 | timeout threshold=1/2cwnd |
4 | 8 |
|
| 17 | 1 | 4 |
|
5 | 16 |
|
| 18 | 2 | 4 |
|
6 | 32 |
| 3dup | 19 | 4 | 4 | cwnd==threshold |
7 | 19 | 16 |
| 20 | 5 | 2 |
|
8 | 20 | 16 |
| 21 | 6 | 2 |
|
9 | 21 | 16 |
| 22 | 7 | 2 |
|
10 | 22 | 16 |
| 23 | 8 | 2 | timeout threshhold=1/2cwnd |
11 | 23 | 16 |
| 24 | 1 | 4 |
|
12 | 24 | 16 | timeout threshhold=1/2cwnd | 25 | 2 | 4 |
|
13 | 1 | 12 |
| 26 | 4 | 4 | cwnd==threshold |
答案
|
2. 流控--GBN
分析如下
结果 | 分析 | ||||||||
Time | SEND | RECV | Time | SEND | RECV | time | base | nextseq | timer |
0 | 1 | 220 | 5 | 1 | 1 | ||||
10 | 2 | 230 | (8 丢失) | 0 | 1 | 2 | start | ||
20 | 3 | 240 | 9 | 10 | 1 | 3 | |||
30 | 250 | 10 | 20 | 1 | 4 | ||||
40 | 4 | 1 | 260 | 40 | 2 | 收4 | start | ||
50 | 5 | 2 | 270 | 5 | |||||
60 | 6 | 3 | 280 | 50 | 3 | 收5 | start | ||
70 | 290 | 6 | |||||||
80 | 7 | 4 | 300 | 60 | 4 | 收6 | start | ||
90 | 310 | 7 | |||||||
100 | 4 | 320 | 80 | 5 | 收7 | time out | |||
110 | 330 | 8 | |||||||
120 | 4 | 340 | 140 | 5 | 8 | time out | |||
130 | 350 | 150 | 5 | 8 | |||||
140 | 5 | 360 | 160 | 5 | 8 | ||||
150 | 6 | 370 | 190 | 7 | 收8 | start | |||
160 | 7 | 380 | 9 | ||||||
170 | 390 | 200 | 8 | 收9 | start | ||||
180 | 400 | 10 | |||||||
190 | 8 | 6 | 410 | 210 | 8 | 11 | start | ||
200 | 9 | 7 | 420 | 240 | 10 | 11 | |||
210 | 10 | 430 | 250 | 11 | 11 | stop | |||
GBN要点⭐
笔记参考: (GBN)回退N步--滑动窗口协议
- sender变化要点
- 流控无3dup处理,全靠timer
- base,标识已发送但未ack的pkt; nextseq,标识已进入窗口,待发送的pkt
- 初始化base=nextseq=1
- 每次接收正确ack,base++
- 每次新发送pkt,nextseq++
- 只有base+N>nextseq才说明窗口有空间,能发送
- 接收到任何错误/乱序/冗余ack-->do nothing,等待timer
- 当接受到ack n+1没收到ack n,说明ack n遗漏,但receiver已经接收-->累计确认,base = n+2
- timer启动/结束:
- 初始时base==nextseq-->timer启动接收正确ack后base++,若base==nextseq,说明完毕-->timer结束否则重启timer
- 收到其余任何ack,重启timer
- timeout发生后,重传不改变base和nextseq
- receiver变化要点
- 收到正确pkt n,返回ack n:
- 其余任何情况,返回当前正确接收的最大n
3. 流控--SR
题目同2
分析如下
结果 | 分析 | ||||||||
Time | SEND | RECV | Time | SEND | RECV | time | base | nextseq | timer |
0 | 1 | 220 | 1 | 1 | |||||
10 | 2 | 230 | 0 | 1 | 2 | start1 | |||
20 | 3 | 240 | 9 | 10 | 1 | 3 | start2 | ||
30 | 250 | 8 | 10 | 20 | 1 | 4 | start3 | ||
40 | 4 | 1 | 260 | 40 | 2 | 收4 | stop1 start4 | ||
50 | 5 | 2 | 270 | 5 | |||||
60 | 6 | 3 | 280 | 50 | 3 | 收5 | stop2 start5 | ||
70 | 290 | 8 | 6 | ||||||
80 | 7 | 4 | 300 | 60 | 4 | 收6 | stop3 start6 | ||
90 | 310 | 7 | |||||||
100 | 无(5+3<9) | 4 | 320 | 80 | 5 | 收7 | stop4 start7 | ||
110 | 5 | 330 | 8 | ||||||
120 | 7 | 340 | 100 | 5 | 8 | stop6 | |||
130 | 350 | 110 | 5 | 8 | timeout5 | ||||
140 | 360 | start5 | |||||||
150 | 370 | 120 | 5 | 收8 | stop7 | ||||
160 | 380 | 9 | |||||||
170 | 5 | 390 | 190 | 8 | 9 | stop5 | |||
180 | 400 | start8 | |||||||
190 | 8 | 5 | 410 | 200 | 8 | 9 | start9 | ||
200 | 9 | 420 | 210 | 8 | 9 | start10 | |||
210 | 10 | 5 | 430 | 240 | 8 | 收9 | stop9 | ||
10 | |||||||||
250 | 8 | 收10 | stop10 | ||||||
11 | timeout8 | ||||||||
290 | 11 | 11 | stop8 | ||||||
SR要点⭐
笔记参考: SR--Selective Repeat
- sender变化要点
- base,标识已发送但未ack的pkt
- nextseq,标识已进入窗口,待发送的pkt
- 初始化base=nextseq=1
- 只有接收到窗口最小pkt的ack,base++(区别)
- 每次新发送pkt,nextseq++
- 只有base+N>nextseq才说明窗口有空间,能发送
- 接收到乱序ack,do nothing,等待timer
- timer启动/结束:
- 每次发出一个pkt n-->启动timer n
- 接收正确ack n时-->timer n结束
- timeout n发生后,重传pkt n需重设timer n
- receiver变化要点
- 序号[rcv_base, rcv_base+N-1]收到正确pkt n,返回ack n:
- 当pkt未被缓存:缓存,且如果pkt序号==rcv_base,则已经连续的已缓存pkt可提交上层:rcv_base==2时,已经缓存3,5,6,此时2,3可被提交
- 当pkt已经缓存,返回ack n即可
- 序号[rcv-N, rcv_base-1]收到正确pkt n,此时是上一个窗口,必须也返回ack n告知sender
- 其余任何情况,忽略
解题思路 |
|
4. RDT综合(1)
可靠性+流控+拥塞控制
分析:由题意可得到
①采用慢启动 ②起始threshhold=4KB,cwnd=MSS=1KB,rwnd=recB=4KB ③第2个seg的ACK返回时出现延后 ④第4个seg丢失 ⑤第8个seg后recB缩减为2KB ⑥sender的每个seg发送间隔10ms 首先可以确定的是receiver没有个sender发送data,因此ack一列始终为100 |
时间 | sender | receiver |
0 | seq=0,ack=100(后续省略ack,恒定) |
|
30 |
| seg0抵达,返回: |
60 | 接收ack=1k,cwnd=2MSS, |
|
70 | 发出seq=2k |
|
90 |
| seg1抵达,返回ack=2K |
100 |
| seg2抵达,返回ack=3K |
130 | 先接收ack=3k,cwnd=3MSS, 发出seq=3k(丢失) |
|
140 | ack=2k抵达,cwnd=4MSS 发出seq=4k |
|
150 | 发出seq=5k |
|
160 | 发出seq=6k |
|
170 /180 /190 |
| seg3丢失,seg4,5,6抵达 seg4,5,6-->Buffer |
200 /210 /220 | 接收3k,3k,3k,根据GBN中dup处理,220+100=320,但220时dup3触发快速重传 快速恢复:cwnd=1/2cwnd+3=5MSS |
|
250 |
| seg3抵达,从buffer读出4,5,6,积累ack,返回ack=7k |
280 | 拥塞避免:接收ack=7k,cwnd=6MSS 发出seq=7k |
|
290 | 发出seq=8k |
|
300 | 发出seq=9k |
|
310 | 发出seq=10k
| seg7抵达,返回ack=8k,此时rwnd=2k |
320 | min{cwnd,rwnd}=2k,受到流控限制,暂停 | seg8抵达, |
330 |
| seg9抵达, |
340 | 接收ack=8k | seg10抵达, |
350 | 接收ack=9k |
|
360 | 接收ack=10k,解除限制,发送seq=11k | |
370 | 接收ack=11k |
|
390 |
| seg11抵达,接收完成 |
5. RDT综合(2)
对比4,5中接收了乱序ACK
分析:由题意可得到
①采用慢启动 ②起始threshhold=4KB,cwnd=MSS=1KB,rwnd=recB=4KB ③第2个seg的发送时延后 ④第4个seg丢失 ⑤receiver接收第7个seg后recB缩减为2KB ⑥sender的每个seg发送间隔10ms 首先可以确定的是receiver没有个sender发送data,因此ack一列始终为100 |
时间 | sender | receiver |
0 | seq=0,ack=100(后续省略ack,恒定) |
|
30 |
| seg0抵达,返回: |
60 | 接收ack=1k,cwnd=2MSS, |
|
70 | 发出seq=2k |
|
100 |
| seg2抵达,返回ack=1K |
110 |
| seg1抵达,返回ack=3K(累计确认) |
130 | 先接收ack=1k,重启timer,不发送 |
|
140 | ack=3k抵达,cwnd=4MSS 发出seq=3k |
|
150 | 发出seq=4k |
|
160 | 发出seq=5k |
|
170 | 发出seq=6k |
|
180 /190 /200 |
| seg3丢失,seg4,5,6抵达 seg4,5,6-->Buffer |
210 /220 /230 | 接收3k,3k,3k,根据GBN中dup处理,230+100=330,但230时dup3触发快速重传 快速恢复:cwnd=1/2cwnd+3=5MSS |
|
260 |
| seg3抵达,从buffer读出4,5,6,积累ack,返回ack=7k同时rwnd变为2K |
290 | 累计确认,拥塞避免 接收ack=7k,cwnd=6MSS 发出seq=7k |
|
300 | 发出seq=8k ,此时min{cwnd,rwnd}=2k,流控限制 |
|
320 |
| seg7抵达, |
330 |
| seg8抵达, |
350 | 接收ack=8k,可发送seq=9k |
|
360 | 接收ack=9k |
|
380 |
| seg9抵达,接收完成 |
- 一些常用结论
cwnd和threshold |
进入慢启动
进入拥塞避免 |
关于timer |
|
流控和拥控 |
|
Ch4 网络层
原目录:计算机网络
1. 转发和路由⭐
网络层主要有两个功能:转发和路由
forwarding 转发 | pkt到达router后,router为其选择合适的输出链路 |
routing 路由 | pkt从发送方流向接收方,网络层决定pkt路径.计算路径的算法即路由选择算法 |
对比 |
|
⭐网络层服务 | 简单灵活的、无连接的、尽最大努力交付的数据报服务 |
⭐区分网络层&传输层 |
|
2. 分组交换网络
分组交换网络分为两种,对应Ch1中的电路交换&分组交换
数据报网络 datagram networks | 使用目的地地址转发pkt, |
虚拟连接网络 (VC) virtual connection networks | 使用VC号码转发pkt; 只有VC网络需要在IP数据报传输前建立virtual connection,即连接setup过程 |
2.1 VC网络
|
2.2 Datagram网络
|
对比

- 最长匹配
在DG交换中,一个IP地址为了避免重复匹配,选择"最长匹配"策略:选择可匹配目的地址中最长的一个
例题,已知路由表 和两个IP |
DA1:只能匹配0 DA2:可匹配1,2,选更长的1 *最长匹配的前提是匹配完整,不是说地址一和0,1,2前21位都一致,从里面选最长的,DA1甚至没有完整匹配 |
3. 路由器
3.1 构造&功能
| 整体 | ||
输入 | |||
| |||
交换结构 | |||
由cpu控制,pkt复制到系统内存,速度被内存带宽限制 | 通过共享总线交换,但会被总线带宽限制 | 通过互联网络交换 | |
输出 | |||
| |||
联系"封装"过程 | |||
pkt进出router时链路层header与网络层header变化原因:
| |||
功 能 | 运行算法 | ||
运行路由算法 | |||
转发 | |||
转发数据报到输出link | |||
4. IP--因特网协议
4.1 数据报--分片&重组
IP数据报结构

第二行 | id:标识相同数据报 一个数据报中的protocol overhead(协议开销):传输层TCP header+网络层IP header 转发后-1,为0时被丢弃,由于TTL每次变换,每次转发到新的router后checksum要重新计算 offset: 从小到大标识分片顺序 见👇例题 flag:默认为1,当为0,说明该片为所在数据报最后一片 | |
TTL | ||
协议开销 | ||
分片 & 重组 | 分片:链路层frame的最大传输数据量(MTU)是协议相关,网络层的IP数据报大小被链路层MTU限制,sender可发出的原始数据报对于router可能无法一次发送,需要分片,因为分片发生在路径的router上 | |
重组:重组无法发生在router,因为不同pkt无法保证路径相同,只能在dest上重组 | ||
header⭐:为保证重组顺序,需要给每个分片pkt复制一遍原始数据报的header,加上传输层TCP的header,故每个分片pkt的开销:传输层TCP header+网络层IP header | ||
例题
1. receiver接收分片后网络层->传输层投递分片的顺序如何 3. sender上的应用层共传输了多少字节 | |
(注意1000-1003不标识任何数据报投递的顺序,因此分片的投递不能写成DABJHEIGCF)
分片后的header不属于sender原始数据,但4个数据报的header来自sender
sender发出数据-4个IP header-4个 TCP header | |
| 分片1: |
4.2 IPV4
IPV4记法 | 32bits,分四组,八位一组,化为十进制后可从0-255 | |
子网 | 使用主机和路由器不同接口产生的隔离网络(左图6个子网) | |
子网掩码 (mask) | 如223.1.1.0/24其中/24为mask 32bits中最左侧24位定义了所在子网(现实中会表示为255.255.255.0说明左3*8为网络号) | |
特殊IP | 0.0.0.0:本主机源地址 255.255.255.255:广播目的地址
|
- Classless Interdomain Routing--CIDR(无类别域间路由选择)
这是一种区别于过时的分类编址的方式,形式a,b,c,d/x,地址高x位是网络号,确定子网,低32-x区分子网内设备
4.3 DHCP
定义 | Dynamic Host Configuration Protocol--DHCP(动态主机配置协议): 当某组织获取一块地址后,通过DHCP可为组织内host自动分配IP地址,其把主机连进组织网络的能力让其也被称为"plug-and-plug"或者"zeroconf"协议 | |
过程 | 该过程的四次广播
| |
例题
例题:DHCP分配地址块,已知ISP有如下地址块
|
|
4.4 NAT
定义 | Network Address Translation(网络地址转换): 如果给internet中每台设备一个唯一IP地址,那么IPV4资源无法满足,因此产生了NAT,一个NAT路由器有单一IP地址,假设为138.76.29.7,由其连接的组织网络中的设备都使用10.0.0.0/24编址(private network--专用网络),这些地址只对组织内其他设备有意义 |
区分 | 概念区分:NAT和子网划分🎭
|
路由聚合 | 路由聚合--route aggregation: 使用单个网络前缀告知多个网络的能力 ISP告知外界所有前缀200.23.16.0/20的数据给它即可,而无需知道ISP内部信息 |
内->外 | 组织内设备给外网的pkt经过NAT路由器统一使用138.76.29.7 |
外->内 | 外界pkt通过NAT路由器,路由器查询NAT转换表,查找接收pkt的组内host |
示意 | WAN口:Wide Area Network连接外网; LAN口:local area network连接内网 |
通过router后封装在frame中datagram的header改变⭐
|
4.5 ICMP
定义 | ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息 |
应用 |
|
4.6 IPV6
Dual Stack 典型不同:
不再存在的IPv4属性:
| |
一个真实的IPv6地址 | |
128bits,分为8组,每组16bits,用4个16进制数表示:
| |
IPv4->IPv6:建隧道(Tunneling) | |
区分隧道和双栈: CD类似一段隧道,过程中pkt在IPv4隧道中,与IPv6暂时切断联系,区分Tunneling和Dual Stack,前者是转换,后者是通用 | |
5. 路由选择算法⭐
一般根据算法是集中式/分散式划分
- 集中式(centralized):路由时已经知道全局信息(每个链路的状态)
- 分散式(decentrailzed):路由时路由器只知道相邻链路信息,必须迭代,分布式的计算出开销最小的路径
5.1 Link State 算法
LS算法是集中式算法,实际上为Dijkstra算法,给定图后求出单源最短路径,其核心为

例题: 见LS算法例题
复杂度:对于n个节点,复杂度在O(n2)(可以优化到nlogn)
5.2 Distance Vector算法
DV算法是分散式算法, 核心为Bellman-Ford方程:dx(y)=minc{c(x,v)+dv(y)}
特点⭐:异步(Asynchronous ),迭代,自终结,分布式
例题: 见DV算法例题
5.3 毒性逆转
链路开销改变时可能产生路由环路问题(开销变大时),需要使用毒性逆转来避免
6. Internet路由⭐
6.1 路由器自治系统
|
6.2 AS内: RIP算法
RIP(routing information protocol)路由信息算法基于DV算法,但其中的链路开销变成到下一路由器的跳数hops
一些特点:
|
6.3 AS内: OSPF算法
OSPF(open shortest path first)最短路径优先算法,是一种LS算法,有以下特点:
|
6.4 AS间:BGP
BGP(Broder Gateway Protocol),边界网关协议,为保证连接可靠性因此基于TCP
- 通过BGP路由信息
BGP实际上为某个AS中的路由想办法告知其余AS自己的存在,让他们自己斟酌怎么到这

- eBGP:外部BGP,连接横跨不同AS的BGP连接
- iBGP:内部BGP,在一个AS内部中两台routers之间的BGP会话
- 最优路由确定
BGP路由 | route=prefix+attribute |
prefix | 目的地前缀,通常为子网或子网集合 |
attribute | attribute:当进入BGP的输入产生的路由不唯一,顺序调用以下规则直到剩下唯一一条
|
热土豆路由:路由器收到pkt后要尽快的把其送出自己的AS,即避免在自己AS中开销过大,但它不会关心在其余AS中的开销,总之是一个自私算法 |
例题: 见路由选择例题
- 小结:关于不同协议运行基础⭐:
用途 | 协议/算法 | 底层支持 | 类型 |
AS内 | RIP | UDP | DV |
OSPF | IP | LS | |
AS间 | BGP | TCP | / |
7. 广播和组播
了解内容
- 广播
广播(Broadcast):把pkt路由至所有节点,但此方法很低效,可能重复路由,需要优化
记录轨迹 | 直接在每个节点中做标记,只路由之前没有接收的pkt |
reverse path forwarding | 在节点中存放S-D的最短路径,只有pkt通过最短路径来时才路由,否则多半是重复pkt |
spanning tree | 构建扫描树后再路由 |
- 组播
组播(multicast)和广播的不同在于组播技术的初衷是在IP网络中,以"尽力而为"的形式发送信息到某个目标组(subnet),这个目标组称为组播组,源主机发送一份数据,数据的目的地址是组播组地址,常见实现:
shortest tree | 直接通过Dijkstra构建最短路径树后剪枝 |
RPF | 同上 |
MindMap

链路开销改变 & 毒性逆转☣
原目录:计算机网络 / Ch4 网络层
1. 链路开销减少

原本如上图所示👆(只关注y,z),t时刻x->y的开销变为1
| t | x | y | z |
| y | 4 | 0 | 1 |
| z | 5 | 1 | 0 |
t0时刻y检测到变化
| t0 | x | y | z |
| y | 1 | 0 | 1 |
| z | 5 | 1 | 0 |
t1时刻,z接收到y的更新信息
| t1 | x | y | z |
| y | 2 | 1 | 0 |
| z | 1 | 0 | 1 |
当开销减小,总共只需要t->t1->t2,两次迭代即可变为静止状态--"好消息传得快"
2. 链路开销变大
2.1 三个节点

原本如上图所示👆(只关注y,z),t时刻x->y的开销变为60
| t | x | y | z |
| y | 4 | 0 | 1 |
| z | 5 | 1 | 0 |
t0时刻y检测到变化:min{60+0,1+5}=6,(y,x)=>6
| t0 | x | y | z |
| y | 6 | 0 | 1 |
| z | 5 | 1 | 0 |
t1时刻y更新数据给z:min{50+0,1+6}=7,(z,x)=>7
| t1 | x | y | z |
| y | 7 | 1 | 0 |
| z | 6 | 0 | 1 |
... ...
t44时刻
y: min{60+0,1+49}=50,(z,x)=>50 | z: min{50+0,1+50}=50,(z,x)=>50,此时对于z终于直接选路z->x而非不切实际的z->y->x | ||||||
| t45 | x | y | z | t44 | x | y | z |
| y | 51 | 1 | 0 | y | 50 | 1 | 0 |
| z | 50 | 1 | 0 | z | 49 | 1 | 0 |
t45时刻
y: min{60+0,1+50}=51,(z,x)=>51,此后确定最小开销为51,不再改变 | z不变 | ||||||
| t44 | x | y | z | t44 | x | y | z |
| y | 50 | 1 | 0 | y | 50 | 1 | 0 |
| z | 49 | 1 | 0 | z | 49 | 1 | 0 |
之后进入静止状态
分析⭐:当开销变大,总共需要44次迭代才能到达静止状态,这种"震荡"即路由环路,由于pkt的TTL每次减一,震荡极易产生丢包,而问题原因在一:自于x-y的开销增大后,z-y-x的开销没有及时更新,y误以为z-x的开销仍然很小从而选择y-z-x,从而开销加一;反过来z-x时发现y-x开销加一啊,因此z-y-x的开销也加一...如此反复
解决:毒性逆转
由于z的路径本身就是是z-y-x,因此z要告知y,z-x=∞,才能避免由于y-x变化产生的不可数问题
修改:
t0时刻y检测到变化,毒性反转限制:此时z->x是z-y-x,因此z给y的信息为z-x=∞
min{60+0,1+∞}=60,(y,x)=>60,路径直接y-x
| t0 | x | y | z |
| y | 60 | 0 | 1 |
| z | ∞ | 1 | 0 |
t1时刻y更新数据给z,且y-x,无z为中间节点,传递真实数据
min{50+0,1+60}=50,(z,x)=>50
| t0 | x | y | z |
| y | 50 | 1 | 0 |
| z | 60 | 1 | 0 |
此后进入静止状态,问题看似解决,但重点在于应用毒性逆转后,对于节点个数>3的情况,会出现问题
2.2 大于三个节点

如图所示(AB等效),t时刻c-d变化,但由于C作为必经之路,使得A(B)->D始终受毒性逆转
| t | A | B | C | D |
| C | 1 | 1 | 0 | 1 |
| A | 0 | 1 | 1 | ∞ |
B | 1 | 0 | 1 | ∞ |
t0时刻c更新,受毒性逆转限制,A(B)->D调整为∞
| t | A | B | C | D |
| C | 1 | 1 | 0 | 100 |
| A | 0 | 1 | 1 | ∞ |
B | 1 | 0 | 1 | ∞ |
t1时刻A(B)更新,min{∞,1+2,1+100}=3
| t | A | B | C | D |
A | 0 | 1 | 1 | 3 |
B | 1 | 0 | 1 | 2 |
C | 1 | 1 | 0 | 100 |
t2,C更新
| t | A | B | C | D |
C | 1 | 1 | 0 | 100 |
A(B) | 0 | 1 | 1 | ∞ |
t3时刻A(B)更新,min{∞,1+3,1+100}=4
| t | A | B | C | D |
A | 0 | 1 | 1 | 4 |
B | 1 | 0 | 1 | 3 |
C | 1 | 1 | 0 | 100 |
...不可数问题再次出现,因为B-D始终不经过A,普通毒性逆转无法觉察
解决:毒性逆转plus版本
当来自邻居节点的开销上升,且通过其选路时才逆转
修改:
初始C
| t | A | B | C | D |
| C | 1 | 1 | 0 | 1 |
| A | 0 | 1 | 1 | 2 |
B | 1 | 0 | 1 | 2 |
t0时刻开销改变,min{100+3,1+2,1+2}=3
| t | A | B | C | D |
| C | 1 | 1 | 0 | 3 |
| A | 0 | 1 | 1 | 2 |
B | 1 | 0 | 1 | 2 |
⭐t1时刻A(B)更新,min{∞,1+2,1+3}=3,此时:
①邻居C的C-D开销变大
②A-D更新后依据A-C-D选路,满足毒性逆转
则A->C发送开销为{0,1,1,∞}
| t | A | B | C | D |
A | 0 | 1 | 1 | 3 |
B | 1 | 0 | 1 | 2 |
C | 1 | 1 | 0 | 3 |
B同理发送给C{1,0,1,∞}
| t | A | B | C | D |
B | 1 | 0 | 1 | 3 |
A | 0 | 1 | 1 | 2 |
C | 1 | 1 | 0 | 3 |
t2,C更新,min{100+0,1+∞,1+∞}=100
| t | A | B | C | D |
| C | 1 | 1 | 0 | 100 |
| A | 0 | 1 | 1 | ∞ |
B | 1 | 0 | 1 | ∞ |
t3,A更新,min{∞,1+∞,1+100}=101
| t | A | B | C | D |
A | 0 | 1 | 1 | 101 |
B | 1 | 0 | 1 | ∞ |
C | 1 | 1 | 0 | 100 |
毒性逆转plus版本相当于先不管毒性逆转,直到出现节点A上发现两个指征时,自己的信息依旧按照+1更新,但在给其余任何相邻节点的消息中都把变化的开销谎报为∞
Ch4必考题
原目录:计算机网络 / Ch4 网络层
1. LS算法例题
例题:已知链路状态,从U开始,使用LS算法,选择最优路径 | |
画出邻接矩阵:D(i)到i的当前最短累计距离,p(i)到i的最后一条路径(节点) | |
得到的节点u的最低开销路径和转发表如下 | 注意转发表的含义(不同于选择output link的转发):
只对u来说,当目的地为v时,下一步路由至v路由器;当目的地为 |
2. DV算法例题

例题:如图链路状态,每个节点只知道自己邻接链路情况,只用叙述A节点路由选择表的变化
初始化 | 更新 | 更新 | 静止状态 | |
A | ||||
B | ||||
C | ||||
D |
3. 路由选择例题
例题:关于路由选择AS内协议,已知
| |
| |
a. 分析如下
| b. 此时对于1d存在两条路由AS3 x和AS2 x,但AS-PATH都为1,此时考虑规则2的NEXT-HOP
1d距离AS2的NEXT-HOP更近,因此选择l2接口从AS2学习x (BGP路由的表示法有点类似入栈,但注意x本身AS4和当前AS1都不用标识) |
c. 此时路由表示:
自然选择AS-PATH更短的 | |
Ch5 链路层 & 局域网
原目录:计算机网络
1. 链路层概述
1.1 结构
节点 | 任何运行链路层协议的设备 |
链路 | 相邻节点之间的通信信道 |
frame | 节点把datagram封装为frame后传输到link上 |
1.2 服务
组帧 | frame封装链路层协议,每一个frame=data+若干header,其中网络层数据报就在data中 |
链路接入 | MAC(Medium Access Control)协议规定了frame在link的传输规则 |
可靠交付 | 类似传输层TCP的确认和重传 |
差错检测和纠正 | 见👇错误检测和纠正 |
1.3 实现位置
每一个host都有链路层,主体部分在网络适配器(network adapter),即网卡(NIC),连接着host的系统总线

2. 错误检测和纠正
奇偶校验 | 对于d位数据,增加一个校验位,使得d+1位中的1总数是偶数,当数据接收方计算出的校验位和传输的结果不一致,说明出错 |
二维奇偶校验 | 一维奇偶校验只能检测,无法纠正,而二维校验可具体定位错误bit,从而改正 |
CRC检测 | 编码过程: |
求R过程: | |
校验过程: | |
对于其余层 |
|
3. 多路访问协议
定义 | Multiple access protocols--多路访问协议: 用于规范多节点在共享的广播信道传输frame时的行为 |
分类 |
|
3.1 信道划分协议
TDMA--时分复用 | FDMA--频分复用 |
| 把时间划分为时间帧,分为N个slot(时隙),每个节点分得特定slot 优点: 避免了碰撞 缺点: ①速度限定R/N ②利用率低下 | 根据频率分配frame,缺点和优点同TDMA一样 |
3.2 随机接入协议
传输节点以全速率R发送,有碰撞时再进行处理
- 纯ALOHA
示意 | |
说明 | 只关注独立节点,随时都可以发送frame,问题是当前frame占用信道时前后frame都会被影响 |
效率 | 1/2e=0.18 |
- 时隙ALOHA, slotted ALOHA
示意 | |
说明 | 当节点发送frame,等到下一slot即全速发送,如果没有collision无需重传,如果碰撞,则以随机概率p决定在下一slot重传 |
效率 | 最大为1/e=0.37 |
- CSMA(Carrier Sense Multiple Access,载波侦听多路访问)
模式 | 在传输frame前监听信道,空闲时才传输,当其余host传输占用信道时也不会去打断 | |
CSMA |
| |
CSMA中冲突发生后传输不会停止,因此会生成受损的frame,为了避免这种情况需要保证B的比特在D传输就抵达,提示D信道忙: | ||
- CSMA/CD(Collosion Detection,带碰撞检测的CSMA)
模式 | 先听后发 边听边发, 冲突停发 随机重发 | |
CSMA |
| |
在冲突发生时,为了使两个站点都能及时正确接受到冲突发生的信号,要满足最小帧长: | ||
* 最小帧长Lmin的确定
参考链接: CSMA/CD协议(载波侦听多路访问/碰撞检测) 最小帧长理解
前提:
- 边听边传,当前frame传输未结束时监听到碰撞才有意义
- 传输时延:将一个完整pkt传输到信道上的时间,因此在0时刻frame的第一个bit传到信道后,L/R时刻时frame最后一个bit传到信道上
- 碰撞信息传回host也需要时间(传播时延)

3.3 轮流协议
轮询--polling | 描述:主节点以轮询方式给其余节点发送msg,告知子节点可发送的frame最大数量 | |
| 缺点:轮询也有时延,且主节点故障时传输不可进行 | ||
| 令牌--token | 描述:没有主节点,有一个令牌在需要传输frame的节点间传递,持有令牌的节点以最大速率发送 | |
| 缺点:当一个节点要加入/退出时,为了形成环路,必须进行节点的更新维护 |
4. MAC地址 & ARP
4.1 MAC地址
定义 | 网络接口的链路层地址,有48bits,也叫LAN地址,物理地址 |
位置 | 链路层 |
意义 | ⭐src的适配器(网卡)向dest发送frame时,把dest的MAC地址插入frame,从而dest可实现在网卡处就过滤网络中不相关的pkt |
为什么不使用32bits的IP地址? IP协议实现在网络层,需要接收pkt后拆封由OS判断,而每次判断会触发OS的中断,效率低下,浪费资源 🦈关于抓包过滤: 网卡分为混杂/正常工作模式,使用wireshark抓包时会切换为混杂模式,此时网卡就会接受所有MAC不对应的pkt | |
结构 | 扁平,即无层次,且不可变.目的就是免去配置的过程,直接写死在网卡上 |
4.2 ARP--地址解析协议
定义 | ARP, Address Resolution Protocol(地址解析协议),负责进行网络层IP和链路层MAC地址映射,跨越链路层和网络层 |
过程 | 每一个IP节点(包括host)都有ARP table,存有IP-MAC映射
|
4.3 局域网寻址场景
场景 | ||
背景知识 | 背景知识
| |
当问"节点如何知道该使用什么链路层地址"? 答案:节点通过IP地址判断:
| ||
过程 | A封装:
| |
R接收:
| ||
B收到: B最终收到来自A的pkt | ||
5. 以太网
5.1 概述
- 定义:
以CSMA / CD作为MAC算法的一类LAN称为以太网(来自: 以太网原理)
- 发展
同轴电缆 |
| |
集线器 hub | hub是物理层设备,作用于bit而非frame,二进制信号(0/1)到达时hub只是重新生成并发送给其他接口,见6.1 交换机&集线器 | |
交换机 swtich | ||
5.2 以太网帧

前导码 | 共8bytes,前7字节为10101010用于同步,最后1字节10101011预示数据到来 |
地址 | 都为6字节 |
Type | 指示高层协议(大部分为IP,但还有其他) |
CRC | 校验 |
5.3 服务
Unreliable, connectionless
- 无连接:数据传输前没有握手
- 不可靠:NIC之间不传输ack
- MAC协议: 无分片带碰撞检测的CSMA--unslotted CSMA/CD
5.4 以太网传输算法⭐
|
*Jam signal:特殊信号,48bits,用于告知其他传输者冲突 ** bit time:传输1bit数据的时间--1/R |
例题: 局域网内A和B在t=0时刻进行数据相互传输,传播时延为500 bit
times,则 |
|
6. 交换机
6.1 交换机&集线器
hub | 集线器只是单纯的物理层设备
| |
switch | 更主动的链路层设备
|
6.2 转发&过滤
| filtering | 决定frame应当转发或丢弃的switch功能 |
| forwarding | 决定frame的导出接口 |
| switch table | 是转发&过滤的基础,基于"MAC-接口"的对应关系 |
| 场景 | 对于一个"来自x接口且dest MAC为DD-DD-DD-DD-DD-DD的frame",swtich使用该MAC索引table,可能情况:
|
6.3 自学习
初始table为空,而且交换机可以自学习并动态更新table
| 初始 | table为空 |
| 学习 | 对于一个frame,在table中存入:
|
| 老化 | 一段时间无来自该src的frame则删除item |
6.4 路由器&交换机
共同点 | 二者都为存储转发分组交换机 | ||
不同点 | 路由器 | 拥有网络层,因此有IP地址, 也可以使用MAC | |
交换机 | 只能使用MAC | ||
交换机 | 优点 |
参考例题: 不同设备聚合带宽
| |
缺点 | 一旦host出错不断输出frame流,switch无法识别,只能转发直到崩溃--"广播风暴" | ||
路由器 | 优点 | IP寻址分层,非MAC扁平,因此能够隔离流量,防止"广播风暴",且使用算法可以"优化路由" | |
缺点 | 需要配置,且对pkt处理时间更长 | ||
- 小结三种网络设备

MindMap

Ch5必考题
原目录:计算机网络 / Ch5 链路层 & 局域网
1. 不同设备聚合带宽
|
2. DHCP四次交互的MAC和IP变化
如图new host为了从DHCP获取IP192.168.1.4,其中pkt的IP和MAC情况如何?(ARP为空)

src MAC | dest MAC | src IP | dest IP | yiaddr |
66-66-66-66-66-66 | FF-FF-FF-FF-FF-FF | 0.0.0.0 | 255.255.255.255 | 0.0.0.0 |
33-33-33-33-33-33 | FF-FF-FF-FF-FF-FF | 192.168.1.1 | 255.255.255.255 | 192.168.1.4 |
66-66-66-66-66-66 | FF-FF-FF-FF-FF-FF | 0.0.0.0 | 255.255.255.255 | 192.168.1.4 |
33-33-33-33-33-33 | FF-FF-FF-FF-FF-FF | 192.168.1.1 | 255.255.255.255 | 192.168.1.4 |
**注意IP广播时,即IP中主机位都是1时,MAC一定广播,即FF-FF…; 反向不成立,MAC广播时,IP可指定
3. MAC&IP综合⭐
如图网络结构,其中A-F为hosts,H,S,R分别代表hub,switch,router,则: ①为了确保A-F可以连入Internet,则R1上运行什么服务 假设E->A发送IP datagram pkt,且网络中所有节点的ARP cache都是空的,按该格式给出E->A所有frame信息 ④假设C->A发送IP datagram pkt,则C发出的frame与A接收的frame情况如何? |
- NAT服务(注意网络号明显不同,说明处于私有子网,尤其是注意192.168.1.0或者10.xx这类地址,且题中标出了以太网1,2,3,但注意1,3在虽然非同一子网内,但是划分自一个共有地址块无需NAT)
- S1查询交换表,frame中的dest MAC对应接口一定指向F,指向对F的转发
- 如下

- 如下(忽略ARP),C->A需要在R2进行NAT,因此R2处发出的pkt中src IP变成了R2#1
| src MAC | dest MAC | src IP | dest IP |
C发 | C | R2#2 | C | A |
A收 | R2#1 | A | R2#1 | A |
**NAT才会使得路由器出口的frame中IP改变
4. Cache,DHCP.DNS,MAC综合⭐
After getting the IP address 192.168.1.4, the local DNS server and the web proxy of the new host is set as 192.168.1.2 and 192.168.1.3, respectively. Now, the user of the new host wants to access an url on the web server www.scu.edu.cn. Luckily the DNS cache of local DNS server has cached the RR of www.scu.edu.cn. On the other hand, ARP table of all the nodes in fig 3 are empty. Please list the sequence of all the packets sent/received by the new host as well as any other packets sent/received by as other nodes. Please indicate the source and destination MAC address as well as the source and destination IP address of each packets |
共22步
pkt | src MAC | dest MAC | src IP | dest IP |
New host->Web cache(ARP广播) | 66 | FF | 192.168.1.4 | 192.168.1.3 |
Web cache->New host(返回Mac) | 55 | 66 | 192.168.1.3 | 192.168.1.4 |
TCP SYN | 66 | 55 | 1.4 | 1.3 |
SYN ACK | 55 | 66 | 1.3 | 1.4 |
New host-> cache(Http request) | 66 | 55 | 1.4 | 1.3 |
cache->DNS server (cache空,改作server解析DNS,ARP广播) | 55 | FF | 1.3 | 1.2 |
DNS server -> Cache (返回MAC) | 44 | 55 | 1.2 | 1.3 |
Cache->DNS server(DNS请求) | 55 | 44 | 1.3 | 1.2 |
DNS server ->Cache(DNS响应) | 44 | 55 | 1.2 | 1.3 |
Cache->Router (ARP广播) | 55 | FF | 1.3 | 1.1 |
Router->Cache (返回Mac) | 33 | 55 | 1.1 | 1.3 |
Cache->Router (SYN)* | 55 | 33 | 1.3 | 1.8** |
Router-> Dest (ARP广播) | 22 | FF | 1 | 18 |
destination -> Router(返回Mac) | 11 | 22 | 18 (NAT,非1.3) | 1 |
Router-> Dest (SYN) | 22 | 11 | 1 | 18 |
Dest->Router(SYN ACK) | 11 | 22 | 18 | 1 |
Router->Cache(SYN ACK) | 33 | 55 | 1.1 | 1.3 |
Cache->Router (HTTP request) | 55 | 33 | 1.3 | 1.1 |
Router-> Dest (HTTP request) | 22 | 11 | 1 | 18 |
Dest->Router(HTTP reponse) | 11 | 22 | 18 | 1 |
Router->Cache(HTTP reponse) | 33 | 55 | 1.1 | 1.3 |
Cache->New host(HTTP response) | 55 | 66 | 1.3 | 1.4 |
实际流程如下:

