Ch1 计算机网络和因特网

原目录:计算机网络

查看语雀原文

1. 因特网

即世界范围的计算机网络

构成与名词解释

主机/端系统

几十亿台连接因特网的设备

通信链路(links)

包括fiber, copper(铜线), radio, satellite,其传播速度即为带宽(bandwidth),单位为bit/sbps

分组(packet)

端系统间发送数据,发送端把数据分段加上首部字节,由此形成的信息包为packet

路由器(routers)

在不同端系统之间转发分组(forward packets)

因特网服务提供商(ISP)

自身即为多台分组交换机和多段通信链路组成的网络,ISP端系统提供不同类型的网络接入

协议(protocol)

定义了两个或多个通信实体之间交换报文(message)的格式和顺序,以及报文传输和其他事件所采取的动作

  • 协议的作用:定义格式,定义顺序,定义行为



2. 网络结构

image.png

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)方式,使用有线电视线缆,系统中:
光缆连接电缆头端->地区枢纽->同轴电缆连接到各家,因此称为混合光纤同轴系统(hybrid fiber coax, HFC),不对等网络(asymmetric)

信号转换: digital  <-> analogue signal

速度: 上行: 2Mbps 下行: 30Mbps

线路: shared(无论光缆和电缆)

光纤到户

使用光纤连接中心局和家庭,速度快,时可携带电话,电视信号,分为主/被动两类

  • 典型的PON👇

信号转换: 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 光纤

  • 可引导光脉冲,一个脉冲为1bit
  • 支持比特速率极高,不受电磁干扰,100Km的衰减也很小

radio 广播

常见类型

  • terrestrial microwave 地表微波
  • LAN (wifi)
  • wide-area (cellular)
  • satelite

twisted pair 双绞线

  • 普遍使用于局域网
  • 绞合减少了临近双绞线的电器干扰
  • 现代双绞线可达到10Gbps的速率和100m,是高速LAN的主要解决


2.4 网络核心⭐

构成

大量连接的路由器

数据传播方式

  • 分组交换
  • 电路交换

参考链接:

Difference between Circuit Switching and Packet Switching

  • 电路交换

网络在host间创建专用的端到端连接(e2e),路径中的routers都为连接维持状态,连接期间也预留恒定的传输速率(带宽,bandwidth),如传统电话网络



特点总结: 

  • 建立并维持实际连接
  • 连接专用(dedicated)
  • 预留固定带宽
  • 速率恒定

  • 电路交换中的复用(multiplexing)

链路中对于不同连接建立不同线路的方式为以下两种multiplexing

频分复用
(Frequency-Division Multiplexing, FDM)

时分复用
(Time-Division Division Multiplexing, TDM)

链路为不同连接分配特定频段,该频段的宽度即为带宽

时间划分为固定间隔的帧,帧又分为固定数量的时隙(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)

交换机(包括routerswitch)在开始向链路传输分组的第一个bit,必须接收整个的分组(缓存)

如图链路,源发送一个大小L的packet,链路传输速率Rbps,则传输到目的地的时延为多少?

:由于S&F机制,开始源需要L/R才能将packet完整传输到router,此时router才能开始forwardpacket,又需要L/R才能完整到达目的地,共需2L/R的时间

结论:对于N条速率R的链路组成的路径(N-1router),源发送一个packet抵达目的地的e2e时延为:

  • 排队时延(queuing delay)和分组丢失(packet loss)

packet需要传输到某个链路时发现其正传输其他packet,此时就需要进入交换机的输出缓存(output buffer)中等待,因此产生了排队时延,buffer有限,当到达的packet发现buffer已经被填满,此时packet被丢弃,发生丢包(packet loss)

如图,35个用户共享链路进行分组交换,带宽1Mbps,每个用户活跃时只能使用100kbps带宽,且活跃时间占其传输时间的1/10,求分组交换,电路交换下最多用户数?

  • 电路交换: 最多支持1Mbps/100kbps=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都可以多宿

  • 多宿(multi-home): 选择多个ISP连接
  • IXP:Internet Exchange Point: 第三方创建的多个对等ISP的汇合点

关于内容提供商网络:Google为例

image.png



3. 分组交换深入

3.1 时延(Delay)


image.png

时延分为多种类型

处理

pkt从到达节点到进入输出队列的间隔,包括检查packet首部决定去向,检查bit级别错误

排队

当link在传输别的packet,则当前packet等待

传输(transmission)

即L/R,将完整packet传输(推出)的时间

传播(propagation)

受限于Link的物理媒介传播速度,d为router间距,s为物理速率,则时延为d/s

区别传输&传播时延

  • 传输时延:router推出完整packet的时间,与距离无关
  • 传播时延:packet在link上传输的时间,与距离有关

e2e时延

之前都在讨论节点间的时延,但两台设备传输数据时的真正时延为e2e时延

假设两台端系统间的Link要通过N-1台router,N次转发,且无阻塞(无排队时延),设每台router和源host的传输速率都为R,则e2e时延为(对比S&F下的e2e时延):

image.png

image.png



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的压力

 

image.png



3.3 吞吐量(Throughout)

吞吐量用于描述传输速率,有两种情况的定义:

  • 瞬时(instaneous):主机A到B在瞬间传输的bps
  • 平均:比如下载Fbits的文件用去Ts,则平均吞吐量为F/Tbps


  • 瓶颈链路(bottleneck link)

image.png

  • 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太小,此时网络核心也会成为限制吞吐量的因素

image.png



4. 协议层次及其服务模型

网络以分层方式组织协议和实现协议的软硬件,即协议层次

  • 层间关系

某层向其上一层提供服务,服务模型(service model);

而每层通过在该层中执行动作和直接使用下层的服务来提供服务;

  • 协议层的实现

一个协议层可用软//结合实现:

  • 如HTTP这类应用层协议总在端系统中软件实现;运输层类似;
  • 物理层与链路层中协议通常在网卡中实现;
  • 网络层作为软硬件混合体通常结合实现;

第n层协议分布在网络的不同组件中,其不同部分通常在网络组件各部分中

4.1 协议栈

所有各层协议合称协议栈,因特网协议栈有5层,ISO/OSI模型有7层

  • PDU(Protocol Data Unit):协议数据单元,是指对等层次之间传递的数据单位





应用层

支持网络程序,是网络程序及其应用层协议存留处

  • PDU: message
  • FTP, SMTP, HTTP




运输层

在程序端点间传输应用层message

  • PDU:  segment
  • TCP, UDP

网络层

将称为数据报(datagram)的网络层分组从一台主机移动到另一台

  • PDU: datagram
  • IP

链路层

在相邻网络节点间转递数据,其上的分组为帧(frame)

  • PDU: frame
  • Ethernet, 802.111, PPP

物理层

负责将frame中的bit运输到相邻网络元素

  • PDU: bits

I
S

O

表示层

使通信的app可解释交换数据的含义

会话层

提供数据交换和定界与同步功能,包括建立check point和恢复


4.2 封装

image.png

  • 封装(Encapsulation)

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

image.png

每一层,一个packet通常由两部分:首部字段+有效载荷字段(payload field),后者通常来自上一层的packet

  • 拆封

如图,源主机首先传输数据给switch,后者只实现了两层:先通过physical接收bits,再通过link接受为完整的frame,再由link重设首部,确定下一个相邻的网络元素;下一个router中发生了类似的过程,因此进出routerpacket,其hl,hn肯定不同



MindMap

SCU林峰老师(my计网老师)制作

image.jpeg


Ch2 应用层

原目录:计算机网络

查看语雀原文

1. 网络应用

1.1 网络应用架构

  • client-server, CS

server

  • 主机持续在线
  • 永久IP
  • 用于拓展(scale)的服务器场(server farms)

clients

  • 间歇连接
  • 可变IP
  • Client之间不会直接交流
  • peer-to-peer, P2P

pure p2p

  • 服务器非持续在线
  • 任意(arbitrary)端系统直接通信
  • 节点间歇连接,IP可变

特点

  • 高可扩展(highly scalable),难以管理
  • 对等方IP动态化,如何发现
  • CS & P2P混合

比如QQ,当登录后获取联系人列表,为CS模式,单人用户之间聊天,为P2P模式


1.2 进程通信

  • socket

进程通过套接字这个网络接口向网络发送/接收message

image.png


  • 进程寻址

在因特网中使用"IP地址+端口号port number"来唯一标识网络上的进程,可以类比Linux中的pid

为何不采用PID区分网络唯一进程
  • PID特定于系统,当host系统不一,PID对应进程也不同,无法统一
  • 一个进程可建立多个连接,此时一个PID不足以区分多个连接

关于port

port分为三类

  • 0-1023: well-known ports/system ports,其中很多端口固定分配给系统某种服务使用
  • 1024-49151: registered ports,分配给用户或应用程序进程
  • 49152-65535:dynamic ports,一般不固定分配某种服务


  • 应用程序对传输服务的需求

Data loss:丢包,如视频,通话可掉帧,但游戏需要实时性

②Timing:延迟,一些apps需要低延迟

③Throught:吞吐量,一些apps可能需要最小吞吐量来保证效率,其余可能需要弹性的按需分配

④安全性:加密(encryption),数据完整性


  • 因特网传输协议服务(TCP/UDP是传输层协议)⭐

 

TCP 服务

UDP 服务

意义

由于分组交换中没有建立连接,packet传到哪里完全由网络核心的routers们决定,可能出现问题:
1. packet走不同的link到达
2. 由于link不同,packet可能乱序或丢包 因此,端系统上的传输层必须进行控制=>TCP传输控制协议

用户数据报协议,实现简单,发送速度快

支持

  • connection-oriented:面向连接
  • reliable transport:可靠传输
  • flow control: 流控,为了避免receiverbuffer满导致丢包,需要进行流控
  • congestion control:拥塞控制
  • unreliable transport

不支持

  • timing
  • minimum throughtput guarantee
  • security
  • connection setup
  • reliability
  • flow control
  • congestion control
  • timing
  • minimum throughtput guarantee
  • security

应用

邮件,远程连接,web

流媒体,DNS,网管协议

对比

UDP实现简单速度快;TCP为了可靠性需要大量约束
企业为了并取优点,大都自己设计应用层协议实现原有传输层TCP中的可靠性保证,在传输层采用UDP协议,这样又能保证速度



2. Web和HTTP

2.1 HTTP概述

名称

超文本传输协议 hypertext transfer protocol

位置

应用层

架构

CS

特点

  • 基于TCP协议,需建立TCP连接再传递HTTP request/response(三次握手),传输结束需要关闭TCP连接(四次挥手)
  • 无状态, stateless:S无法保存过往的C任何requests

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请求,实践困难,虽然服务器端默认开启,但现代浏览器默认关闭)

例题⭐

  1. 用户请求一个web页面,它由一些文本和3幅图像构成,忽略transmit时间,求分别采用上述四种传输方式后的response time
  • np:2RTT+3*2RTT=6RTT
  • np+cTCP:2RTT+2RTT=4RTT
  • p: 2RTT+3*RTT=5RTT
  • p+p: 2RTT + RTT=3RTT

清楚流程:
1.
先请求页面=>2RTT(3次握手+HTTP RR)

2. 对html中的三幅图片:

当为np,每个图片也需要2RTT=>3*2RTT;

当为cTCP,相当于只有一幅图片=>2RTT;

当为p,无需重建TCP,每个图片需要RTT=>3*RTT

当为PP时,相当于一幅图片且无需重建TCP=>RTT

(设传播时延为ds)

  1. 非持续并行

深入分析以上非持续并行的2RTT构成

  1. 持续非流水线

深入分析以上非持续非流水线的2RTT+10RTT'构成

  1. 扩展:当是持续且带流水线

2RTT+RTT'+9*100k/R

  • 流水线可以认为host只有一个RTT',但无法忽略server发送时的queuing delay

2.3 HTTP请求报文

HTTP协议有request和response两类报文,下图为报文形式,无需死记硬背

request

response

GET/POST/HEAD区别

  • GET在page传参数是将参数直接放在地址最后
  • POST将参数放在request body,不明文表示
  • HEAD类似GET但常用于开发测试,不返回请求对象

Connection控制是否为持久连接

2.4 Cookies

构成

流程


2.5 Web cache

构成

web cache既是client也是server:在本地存储副本传输给客户;又向原始server发出request

作用

  • web cache大大减少client的response time,尤其是当客户和原始server间有bottleneck link
  • web cache可以减少机构的接入链路到internet的通信量



3. FTP

  • FTP协议是一种不安全的文件传输协议,明文保存数据
  • FTP使用一种"(控制信息)带外传输"技术(out of band):使用双TCP连接,control con建立在21端口用于控制连接,浏览目录等;当需要传递数据,20端口建立data con

3.1 对比HTTP

  • 相同点:

都是app层协议

②都以TCP作为支持的运输层协议

③都是client-server架构,区分服务器端和客户端

  • 不同点

 

HTTP

FTP

面向对象

超文本传输,面向网页

文件传输协议,面向文件

端口

默认80

默认20,21

传输

TCP连接,控制信息带内传输

双TCP连接,控制信息带外传输

状态

无状态

会话期间保留用户state

持久性

默认持久且带流水线,可转换

控制连接persistent,数据non-persistent



4. 电子邮件

一个典型的电子邮件系统如右图,主要由三部分构成:

  • user agents:用户代理,负责向服务器中上传/收取信息,负责编辑阅读消息,比如outlook,iPhone mail
  • mail servers:存放用户接收到的消息
  • SMTP:在mail servers之间发送/接收邮件信息的协议(接收不包括user agentserver中接收信息,这一过程由别的协议负责)

4.1 发送协议

simple mail transfer protocol是一种发送协议

构成

使用TCP进行可靠传输,占用端口25,有状态

过程

  • direct transfer:
  • 从sending server -> receiving server
  • 三个阶段(类比HTTP传输)
  • handshaking
  • transfer of messages
  • close

举例

①②③A打开Outlook写信->Outlook发送给A.server (SMTP)

④---->A.server和B.server建立TCP连接----> (SMTP)

⑤⑥B.server中信息被Gmail读取->BGmail上查看邮件 (POP3/IMAP...)

  • 对比HTTP

SMTP

HTTP

共同点

  • SMTP是一个push()的协
  • SMTP使用persistent连接
  • 每个对象被封转在自己的response msg
  • HTTP是一个pull()的协
  • HTTP的连接方式分p/nonp
  • 大量的对象被封装在一个multipart msg

都有基于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 nameIP的转换

用户host上的浏览器/邮件阅读器需要把host name转换为IP地址时:

  1. 首先调用DNS客户端,指明被转换的主机名;
  2. DNS收到主机名,向网络发送msg

(所有请求和回答msgs都使用传输层UDP数据报通过53端口发送);

  1. 经过时延后,host上的DNS接收到回答msg,再传递给调用的应用程序.
  • 主机别名 host aliasing: 比如baidu.com实际上为一个别名
  • 邮件服务器别名
  • 负载均衡 load distribution

热门站点的Web服务器被冗余的分布在多台服务器,每台服务器所在端系统有不同IP,但所有IP的集合对应着一个规范host name,为了防止客户只对排在最前面的IP访问导致服务器负载不均,DNS会循环地址的次序,分配负载

  • 非集中式(centralized)DNS的原因
  • single point of failure:单个DNS server崩溃internet瘫痪
  • traffic volume:通信容量,单个server会处理所有查询
  • distant centralized database:单个server无法邻近查询所有客户
  • maintenance:单个server为所有host维护记录不切实际,数据库庞大且会频繁更新

5.2 DNS分级

image.png

Root name servers

世界上400多个根域名服务器遍布世界,13个组织管理.根域名服务器提供TLD服务器的IP地址

TLD, Top-level domain servers

顶级域名服务器.对于如com,org,net,edu,gov等顶级域和国家域都有TLD服务器,提供authoritative serversIP地址

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.eduIP地址,且已知NYU计算机系的本地DNS服务器dns.poly.edu

过程

①cis.poly.edu首先向本地dns.poly.edu发送一个查询msg,其中包含被转换的主机名gaia.cs.umass.edu

②本地DNS服务器发送至root server

③root server发现edu前缀并把负责eduTLDIP地址列表返回给本地server

④本地server再次向TLD发送msg

⑤TLD注意到umass.edu前缀,返回负责的权威server IP地址给本地

⑥本地server直接向dns.cs.umass.edu发送msg

⑦对应servergaia.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得到的映射结果都会被保存

应用

  • 一台host查询不同dns:采用iterated query,第一次要转换a.edu完成后;第二次查询b.eduIP地址,负责edu的TLD IP地址结果已经在本地,可直接从中查询下级权威server IP
  • 两台host查询相同dns:内网第一台host查询a.edu后本地server缓存其IP,第二台host查询a.edu,可直接返回结果

5.5 DNS记录

  • 记录

资源记录

resource record:实现分布式DB的所有DNSserver存储的即为rr,提供了主机名到IP地址的映射,其中ttl为记录生存时间

Type--A

  • name:主机名;
  • value:IP地址
  • 类型为A的RR提供了标准主机名到IP地址的映射:(relay1.bar.foo.com,145.37.93.126,A)

Type--NS

  • name:个域(xxx.com);
  • value:可解析域名IP的权威server主机名
  • 该RR用于沿着查询链路由DNS查询

(foo.com, dns.foo.com, NS)

Type--CNAME

  • name:规范名(canonical name)对应的别名(alias name);
  • value:规范名
  • 该记录可向查询的host提供一个主机名对应的规范名

比如www.ibm.comservereast.backup2.ibm.com的别名

Type--MX

  • name:个别名(邮箱后缀)
  • value:个别名为name的mailserver的规范名
  • MX记录允许邮件服务器主机名有简单别名
  • 插入

加入自己向创建域名,就需要将其放入DNS server,需要

  1. 给上级的:注册机构给TLD插入最基本的两条RR

①指明权威DNS服务器(NS记录)

②指明DNS server的IP地址(A记录)

举例:当要注册networkutopia.com,需要插入

image.png

  1. 给自己的:自己给权威server插入web server的A RR和邮件MX RR
  • 例题:域名注册

  1. 一个NS记录,一个A记录

{www.startwar.com.cn, dns1.startwar.com.cn, NS}

{dns1.starwar.com.cn, 128.119.12.40, A}}

  1. 两个web server的A记录,一个mailserverA记录,一个邮件地址的MX记录

{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}

  1. (com,cn都属于TLD域名)


6. 非要求内容

6.1 P2P

特点

  • 非always-on服务器
  • 任意端系统直接通信
  • 节点间歇连接且IP可更改

对比CS--1台服务器分发文件到N台客户机场景:已知文件大小F,上传速度u,下载速度d

C/S

  • 服务器需要上传N份拷贝,
  • 客户机i下载耗时
  • 则文件分发总耗时
  • 结论:CS架构下,文件分发耗时和N成线性关系(假设下载速度稳定)

P2P

P2P具有特点:当一个peer接收到文件数据,可以使用上传能力重新把数据发给对等方,因此服务器只需上传一份文件,即可分发给所有设备

  • 服务器上载耗时:
  • 客户机i下载耗时
  • 总共有NFbits必须被下载,而系统整体总上载能力等于服务器加上每个peer的上载速率,不可能超过
  • 则分发文件总耗时最小为

6.2 比特洪流

名词

  • torrent: 洪流,参与文件分发的所有peers
  • tacker: 追踪器,每个torrent对应的一台server,当一个peer加入torrent,会向tacker注册,告知自己的地址,资源等
  • chunk: ,torrent中peers彼此下载等长的文件块

定义

一个peer加入torrent,开始没有块,在其向tracket注册后,连接邻近peers获取块,在下载的同时也在上传;peers可以在任意时候离开并再次加入:拥有完整文件时依然可以大公无私留在洪流中上传文件,也可以在只有文件子集时立刻离开后续再返回

拉块

pulling chunks,peer A主动向洪流中的peer B请求,B会优先发送给其网络中最稀缺的资源--rarest first

防吸血

tit-for-tat(一报还一报),peer Achunk以最高速发送给4peers,10s评估,但为了避免形成小圈子导致没有新数据/垄断数据,30s随机选择peer主动传输数据.这样peer A有可能变成该peertop4之一,从而打破小团体,而且避免了某些peer只下载不上传,保证公平性

6.3 查询洪泛 Query Flooding

场景

centralized directory(集中式目录),P2P网络中文件传输可以非集中,但很多时候定位资源是高度集中的,peer需要先向目录服务器请求资源的地址,才能直接点对点传输.这带了的问题:

  • 单点故障:目录服务器崩溃,P2P应用崩溃
  • 性能瓶颈:大型P2P系统中,集中式服务器要维护庞大数据库,每秒可能处理大量查询
  • 版权问题:法律系统更容易关闭目录服务器

洪泛

P2P网络中,一台peer的查询msg通过已有的TCP连接传播,每个peer收到后先检索自己,有资源则和查询peer直接建立连接,没有则继续转发msg,peer在其中担任了:server/client/router,洪泛避免了设置目录server,采用广泛的转发来查询可用资源

缺陷

  1. P2P洪泛网络中peer隐藏自己;
  2. flooding范围无法确定,当查询到后其余msg还在传播,浪费资源

解决:层次化overlay(覆盖),一些peer选出一个leader,类似于目录server,leader可动态调换,group内peer查询,先由leader在组内定位,如果组内没有,leader直接进行洪泛查询


6.4 分布式哈希表 Distributed Hash Table(DHT)

概述

DHT是一个分布式的P2P数据库

  • 数据库存放(key,value)键值对
  • key是内容类型,value是IP地址
  • peer使用key查询DB,DB返回对应value
  • peer也能插入键值对

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 区块链

  1. 了解--区块链
  • 区块链实际上为分布式账本
  • 任何改动被按时间次序的记录下来
  • consensus共识:如何证明peer的好坏,需要达成共识,有以下几种方式
  • POW: proof of work,付出足够的工作证明自己

比特币即为POW,挖矿本质是耗费算力解题,证明自己后才能留下记录,即产生币

  • POS: proof of stake,有足够的利益证明自己
  • smart contact


6.6 NAT

场景

类似skype的软件进行P2P通信时,面临问题:内网IP相同的机器在全世界同时可能在线非常多,因此不能直接通过内网IP进行通信

解决

NAT运行在router,内网IP发送的数据被NAT替换IP后发送到外网,返回时同样"拆马甲"

定位

NAT作为可变临时地址,当两个peer中一个在外网时,可由内网peer去找固定公网IPpeer,但如果两个都是内网peer,此时需要第三方在公网中的机器作为中介进行处理



MindMap

image.png


Ch3 传输层

原目录:计算机网络

查看语雀原文

1. 传输层服务

1.1 服务和协议

服务

  • 供运行在不同host上的程序进程逻辑通信
  • 端系统中的传输层协议:
  • 发送方:app层msg-->分割为segments-->传递给network层
  • 接收方:把segment重组为msgs

协议

见: Ch2 因特网传输协议服务(TCP/UDP是传输层协议)⭐

1.2 对比网络层

  • 网络层

负责hosts之间的逻辑通信

  • 传输层

负责程序进程之间的逻辑通信(依赖,加强了网络层服务)


2. 多路复用/多路分解

image.png

 

multiplexing

demultiplexing

定义

源host从不同socket中收集数据块,为它们封装head(用于以后分解),从而生成segments,再把segments投递到network层

接收端主机,运输层检查字段,标识出对应的接收socket,将把segments定向到对应socket
多路复用/分解原理解释了为什么多个socket可使用一个port通信

原理

  • 主机接收IP数据报
  • 每个数据报有S_IP,D_IP
  • 每个数据报携带一个报文段
  • 每个报文段有一个S_Port number,D_Port number
  • 主机使用IP&Port numbers就能直接找到对应的socket
  • 参考: 关于port

数据报报文段

2.1 UDP--无连接的M/DM

对于接收host来说:

特征

  • 创建指定端口的socket
  • 一个UDP socket是由一个二元组<dest IP,dest port number>全面标识的
  • 接收UDP数据报时:
  • 检查报文段中dest port number
  • 通过port number直接引导到对应socket
  • 当s IP不同时,只要d IP和port一样,报文段就会引导至一样的socket

SP的作用

segment中的dest port可供引导segment;

SP在当接收方需要回发报文时,会从中取值,加上发送方IP作为地址

2.3 TCP--面向连接的M/DM

对于接收host来说:

特征

  • CP socket四元组标识<sIP,sP,dIP,dP >,接收方使用四个值直接引导报文段到指定socket
  • server host可支持同时多个TCP sockets,下图
  • 因为四元组的区分,web服务器对一个client可以有不同的socket(不同端口),见下图

个人理解

所谓多路复用就是一条路可以同时传输多个来自不同links的segs,要做到这点,就需要区分segs,因此UDP中使用二元组,TCP中使用四元组,解复用自然而然就是"各回各家,各找各妈"



3. 无连接传输--UDP

3.1 概述

特征

  • 无连接
  • 没有s/r之间的握手;
  • 每个UDP上的seg都独立于其他segs被处理
  • 尽力而为的传输
  • 丢包,乱序
  • 简单
  • seg的header更小
  • 无拥塞控制

UDP seglength指明了seg的字节长度(data+header)

用于

适合loss tolerant以及rate sensative的程序,:流媒体,DNS

改进

企业为了并取优点,大都自己设计应用层协议实现原有传输层TCP中的可靠性保证,在传输层采用UDP协议,保证速度

3.2 checksum

目的

检测segs中的错误

流程

sender:

  • 把seg内容视为16bits序列
  • 对所有16bits字求和,并回卷溢出,结果取反码作为checksum
  • 把checksum放在UDP seg中

receiver:

  • 根据收到seg内容计算checksum
  • 对比计算结果和checksum域中的值
  • 相等:no error
  • 不相等: error

举例



4. 可靠数据传输原理,RDT⭐

**principles of reliale data transfer(不理解FSM简单浏览本节即可,从题中学习)

4.1框架

服务抽象

理想情况:数据可以通过可靠的信道传输,从而bits不会损坏或丢失,而且所有数据都按照发送顺序交付.如TCP连接

实现协议

可靠数据传输协议 reliable data transfer protocol.TCP就是传输层上的可靠传输协议

问题

可靠协议的下层协议也许不可靠.如TCP在网络层上不可靠的IP协议上传输

讨论目标

开发一个协议,能够考虑到底层带来的bits损坏或丢失升至丢包,注意的是可靠数据传输原理不针对某一层,在各层中都有体现

约定

  • rdt/udt: 可靠/不可靠数据
  • rdt_send():上层调用(app),传输可靠数据
  • udt_send():由rdt调用,通过不可靠信道传输数据给receiver
  • deliver_data():rdt调用,传递数据给上层
  • rdt_rcv():packets抵达信道的rcv端时调用
    目前只考虑
    单向(unidirectional)数据传输,以下过程设计到FSM,有限状态机

4.2 rdt1.0

rdt1.0假设了完全可靠信道的可靠数据传输

  • sender

接收高层数据,打包后通过信道传输

  • receiver

从底层接收packet,从中取数数据后传给较高层

这种理想情况下,receiver无需提供任何信息给sender,因为无需担心出错

4.3 rdt2.0

rdt2.0针对有bit差错信道的可靠数据传输

FSM

分析FSM

  • sender

接收上层调用后把数据和checksum打包通过信道发送-->进入wait state:如果收到NAK,则重发packet继续当前state;如果收到ACK-->进入等待命令的下一状态

注意:sender等待ACK/NAK,无法接收上层调用,这种机制叫做"停等"(stop-and-wait)

  • receiver

收到packet后,如果pkt中有bit错误,返回NAK;如果没有错误,提取数据,传递数据,返回ACK

理解

此时需要考虑到确认信息的需求--自动重传请求协议(Automatic Repeat reQuest, ARQ),协议中有三种应对bit差错的地方:

  • 差错检测
  • 接收方反馈:
  • ACK, acknowledge:肯定确认,理论上只要一个bit:1
  • NAK, negative ~:否定确定,同样一个bit:0

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混淆
receiver端的corrupt表示pkt有误

R

等待传入0状态:

①如果发现传递出错(corrupt),则打包返回NAK,继续等待传入0状态;(错误分组)

②如果接收到pkt1,传递无误,则返回ACK,继续等待传入0状态(失序分组)

如果发现pkt0,传递无误-->提取数据,传递数据,返回ACK(正常分组)-->进入等待传入1状态

4.5 rdt2.2

优化rdt2.1得到2.2:NAK省略/冗余ACK

FSM

分析FSM

  • Sender

等待调用0状态-->打包发送pkt0-->

停等0状态:

①当收到ACK1或ACK/NAK混淆时,重发pkt0,继续停等0状态

②当收到ACK0且反馈本身无误(notcorrupt)-->进入等待调用1状态

  • Receiver

等待传入0状态:
收到pkt1或传递出错,发送ACK1

②收到pkt0且传递无误-->提取数据,传递数据,返回ACK0-->进入等待传入1

理解

冗余ACK体现在:

进入①前,Sender必定收到了ACK1,再次进入①收到ACK1,说明Receiver没有正确接收pkt0

4.6 rdt3.0

rdt3.0即比特交替协议(alternating-bit protocol)实现了有bit差错和丢包的可靠数据传输

问题

需要做什么

想法:时限+重传+冗余pkt

  • bit受损/丢失
  • 丢包

  • bit检测/应对
  • 丢包检测/应对

让sender负责检测和恢复丢包,无论pkt或者receiver的ACK丢失,sender都无法收到合适的响应,设定一个时限,当超过后,就认为发生丢包,进行重传.由于时延的不确定,需要考虑到延迟过大导致误以为丢包后重复传输pkt产生的冗余pkt,为实现基于时间的重传,需要timer

①每次发送一个pkt(pkt或重传pkt)时启动
可以响应特定动作从而中断
③终止

FSM

FSM

分析FSM

  • Sender

基本类似rdt2.2版本,等待调用0状态->打包发送pkt0,开始计时-->
停等0状态:

①收到ACK1或ACK/NAK混淆,触发计数器进入②(计时一直进行)

②时间到,重发pkt0,重新计时

③收到ACK0且反馈本身无误,停止计时-->进入等待调用1状态

  • Receiver

等待传入0状态:
①收到pkt1
或传递出错,返回ACK1,保持等待0

②收到pkt0且传递无误,返回ACK0-->进入等待传入1状态

总结rdt3.0的四种运行,分组号总在01间交替,因此叫比特交替协议



5. 停等协议改进⭐

5.1 利用率与流水线

rdt3.0只是功能上正确的协议,性能孱弱,左图说明了其在传输文件时低下的利用率(utilization),问题在于它的停等机制,sender必须在接收到ACK后才能发出下一个pkt

改进思路:流水线

  • 必须增加序号:流水线使得同时在link上的未确定pkt有多个,不能只是用0,1
  • sender/receiver都必须缓存多个pkt,因此sender必须缓冲那些已经发送但是没有确认的pkt

5.1 GBN--滑动窗口协议

GBN即回退N步

模式

  • base:标识已发送但还未ack的pkt
  • nextseq:标识待发送的pkt
  • N:窗口尺寸,缓冲大小,

seq<base+N,窗口未满,可继续打包

base=seq,无待发送pkt

可靠性

sender

  1. 初始base=(next)seq=1,此后只要seq<base+Nbuffer未满,就可接收数据打包发送,然后seq++;
  2. 如果收到正确返回,base++.当base==seq说明buffer里没有pkt等待确认,停止计时,否则重启计时;
  3. 收到任何ACK重置timer
  4. 当时间到,重发当前窗口从[base]~[seq-1]的所有pkt

receiver

  1. 初始化(expect)seq=1;
  2. 接收到正确且合序的pkt,提取数据,返回对应pkt,seq++;
  3. 其余默认情况下返回当前最大正确顺序seq的pkt;

特征

  1. 顺序性:对于sender,必须收到base的ack才能窗口右移,否则do nothing;对于receiver,必须接收expectseqpkt才能返回pktseq++
  2. 按窗口重发:当timeout时,无论处于sender的[base]~[seq-1]的pkt是否能正确到达,重发所有(回退)
  3. 积累确认,对序号为n的分组确认时,表明接收方对n和n之前所有的pkt都正确接收

示意

5.2 SR--选择重传

SR--Selective Repeat

模式

SR下receiver也设置了buffer,从而使得双方可以乱序发送/接收

可靠性

  • sender

只有收到窗口中最小pkt的ack后base++;当timeout后,重发当前最小未确认的pkt,重启计时器

  • receiver

对于在窗口中的pkt,正确接收后返回ack,不用考虑顺序;对于冗余/错误pkt,do nothingsendertimer处理,时间到后对面自然会重发

模式

  • 收发不同步的衍生问题(ch3课后p22,23)

:这道题先分析b更合适,注意GBN:

b).接收方expseq=k,说明从pkt[k-N]~pkt[k-1]都已经确认接收返回ACK,则取值范围[k-N,k-1]

a).由b),接收方返回了N个ACK,但不能保证都正确抵达:

  • 最坏:N个ACK都出问题,sender的base还是k-N,seq取值范围[k-N,k-1]
  • 最好:N个ACK都正确接收,窗口已经移动N,base=k,此时seq的变化范围[k,k+N-1]

SR接收方窗口大小问题--分组序号有限:0,1,2,3receiver窗口大小为3.
a)receiver的三个ACK全部丢失,因此sender需要重传第一次的seq为012的pkt012

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概览

组成

  • 一台host上的(发送)buffer,变量和进程socket
  • 另一台host上的(接收)buffer,变量,进程socket
    注意
    :两台host之间的网络元素(routers,switchers)都没有为连接分配cache和变量

特点

  • 面向连接的:两个进程在数据传输之前,必须相互"握手"--相互发送预备报文段以确保数据传输的参数
  • 一一对应:一个sender,一个receiver
  • 可靠的有序字节流
  • send/receive buffer
  • full duplex data(全双工数据):在一条链接中的双向数据流;
  • MSS:maxmium segment size最大报文段长度,TCP可从buffer中提取放入segment中数据数量的最大限制
  • 流控

流程

三次握手

连接建立

数据封装传递

对比UDP

  • TCP提供:可靠有序传输,流控,拥塞控制,
  • UDP仅提供:process2process投递, 数据校验(checking)

6.2 TCP seg结构

image.png

  • TCP的seq和ACK
  • seq:字节流,指示seg中第一个byte的数据
  • ACK:期待从对方接收的下一个byte数据



右图👉

A:发出C,C的第一个byte42,A期待收到79

B:发出C,C的第一个byte为79,B期待收到43

  • TCP的RTT和timeout实现

RTT

sampleRTT是直接采样得出

timeout

6.3 可靠数据传输⭐

网络层的IP服务不可靠,TCP在不可靠之上建立可靠数据传输服务:确保一个进程从其接收缓存中读出的data flow是无损,无间隙,非冗余,按序的数据流


  • TCP重传:只能被timeoutduplicate 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上进程定期从中读取数据,定义变量:

  • LastByteRead:Bbuffer中读出data flow最后一个byte编号
  • LastByteRcvd:从网络到达且放入B接收缓存中数据流的最后一个Byte编号

为了不溢出,必须保证(rwnd标识接收窗口)

LastByteRcvd-LastByteRead≤RcvBuffer

rwnd = RcvBuffer-[LastByteRcvd-LastByteRead


6.5 TCP连接管理

  • 三次握手

  • 第一步: client发送一个特殊的TCP报文段,其中不含app层数据,header中包含一个标志位SYN,被设为1

SYN=1,seq=client_isn

  • 第二步: server收到特殊seg,从中提取SYN,TCP连接分配buffer和变量,client发送允许连接报文段SYNACK,不含数据

SYN=1,seq=server_isn,ACK=client_isn+1

  • 第三步: client收到SYNACK,也为连接分配buffer和变,同时发送另一个seg给server,对server的seg进行确认,此时连接已经建立,SYN置为0,可以携带数据

SYN=0,seq=client_isn+1,ACK=server_isn+1

  • 之后: 此后可以互相发送seg,在每个seg中SYN都被置为0

WireShark抓包:

  • 阶段一:Seq=0,ACK=0,SYN=1
  • 阶段二:Seq=0,ACK=1,SYN=1
  • 阶段三:Seq=1,ACK=1,SYN=0

  • 四次挥手

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与发送速率关系

分析:
a)
两条路径同时发送,每条路径带宽最大R/2,因此左图在小于R/2时吞吐量与速率成线性关系,当到达R/2,无法超出带宽,保持R/2

b)λin接近R/2时流量强度接近并超过,不可避免的开始排队并发展成无限期排队(参考:Ch1:流量强度)

2发送方,1有限缓存路由

由于缓存有限,会发生丢包,该情况下引入"重传"机制:

  • λin表示sender应用层->传输层传递初始msg速率
  • λin'表示sender传输层->网络层传输初始seg或重传seg速率,也叫网络的供给载荷(offered load)
  • λout表示receiver把报文段从传输层->应用层速率

分析

a)假设hostA只在buffer空闲时发送分组,此时λin=λin'

b)假设hostA在确认一个packet丢失后才重发,(初始数据+重发数据)等价于网络中每发送0.5R数据,其中有0.333Rbyte/s是初始数据,0.166Rbytes/s是重发数据

c)假设hostA的timer设置较短,提前重传,此时效率更为低下

4发送方,N有限缓存路由&多跳路径

考虑A->C,经过R1,R2,此时R2被共享,区分:此时可以看到每个路径的带宽R可被一个host完全占有

  • λin'较小时,对吞吐量的影响类似上一情况
  • λin'较大时:
  • 理论通过R2A-C流量最多为R(R1到R2)
  • 但此时如果B-D的供给载荷增大,二者会竞争,甚至死锁,A-C的吞吐量可能趋于0,即如图所示情况
  • 此外,当分组仅丢失在第二跳时,第一条的传输也完全无意义

7.2 拥塞控制方法

e2e控制⭐

  • 网络层未给运输层拥塞控制提供显式支持
  • 端系统通过观察网络行为(丢包,时延)推断
  • TCP拥塞控制采用此方法

network-assisted

  • router向sender提供显式的反馈,比如一个bit来只是链路的拥塞情况

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长度的方式,③是推荐部分,非必需


image.png


慢启动

  • 初始:给cwnd起始设置为1MSS(最大报文段长度)的较小值,使得初始速率为MSS/RTT
  • 传输:之后每次sender确认一个seg后,cwnd增加一个MSS

(第二次,sender发出两个seg,因此会有两个ACK,sendercwnd加两个MSS,下次同时发出四个seg...依次类推达到cwnd每次翻倍的效果)

  • 结束:发生拥塞后,有三种结束慢启动增长cwnd的方式
  1. 当发生timeout标识的拥塞sender把cwnd重置为1-->重启慢启动过程;同时设置ssthresh为cwnd/2
  2. 当cwnd==ssthresh(慢启动阈值)时结束慢启动且sstresh=cwnd/2-->拥塞避免
  3. 如果发生快速重传(Fast retransmit)-->快速恢复

拥塞避免

  • 传输:如果进入拥塞避免,此时如果cwnd继续翻倍,很容易又进入拥塞,因此采用每次cwnd增长一个MSS,通用实现一般是接收到ACK后对cwnd增加MSS*(MSS/cwnd)

(当MSS=1000,cwnd=8000:假设一个RTT发送8segs,当一个segACK传达到sender,cwnd增加1000(1000/8000)=125,RTT结束,cwnd共增加1000)

  • 结束:丢包事件发生
  1. 当由超时引发(说明拥塞):同上cwnd=1,sstresh=cwnd/2-->慢启动
  2. 当被3冗余ACK触发(说明只是出错,不一定拥塞),反应不应剧烈-->快速恢复:cwnd减半,每个冗余ACK使cwnd++,最终产生的效果为cwnd=1/2cwnd+3,sstresh=1/2cwnd-->拥塞避免

快速恢复

  • 进入快速恢复后,立刻重传丢失的seg,重传完毕-->cwnd减半,每个冗余ACK使cwnd++,最终产生的效果为cwnd=1/2cwnd+3,sstresh=1/2cwnd-->拥塞避免
  • 如果重传未抵达就发生timeout,cwnd=1,sstresh=cwnd/2-->慢启动

小结

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

红线:实际吞吐量

蓝线:平均值

  • A->B:起始,此时连接1,2共同进入慢启动,带宽和<R,因此cwnd同步增加,吞吐量同理
  • B->C:到达B,二者吞吐量之和大于R,发生减半,骤降到C
  • C->D:与A->B类似

因此TCP实现了公平性

并行TCP

  • 因为无法阻止TCP应用创建多个并行连接,公平性无法解决
  • 一个app可以创建多个TCP连接传输一个对象,从而抢占大部分带宽

UDP

实时多媒体(Internet电话,视频会议)不愿意在TCP运行,因为不想被传输速率遏制.使用UDP时:即便网络拥塞,数据也要以恒定速率发送,即便丢包,不愿意把速率降至"公平",以保证不丢包



MindMap

image.png


Ch3必考题

原目录:计算机网络 / Ch3 传输层

查看语雀原文

1. 拥控

cwndthreshold变化

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
threshhold=1/2cwnd

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
慢启动->避免

答案

  1. [1,6],[13,16],[17,19],[24,26]
  2. [7,12],[19,23]
  3. 3dup
  4. timeout
  5. 12
  6. 4
  7. 1+2+4+8+16+32+19=82,在第7round



2. 流控--GBN


分析如下

结果

分析

Time

SEND

RECV

Time

SEND

RECV

time

base
(N=3)

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变化要点
  1. 流控无3dup处理,全靠timer
  2. base,标识已发送但未ack的pkt; nextseq,标识已进入窗口,待发送的pkt
  3. 初始化base=nextseq=1
  4. 每次接收正确ack,base++
  5. 每次新发送pkt,nextseq++
  6. 只有base+N>nextseq才说明窗口有空间,能发送
  7. 接收到任何错误/乱序/冗余ack-->do nothing,等待timer
  8. 当接受到ack n+1没收到ack n,说明ack n遗漏,但receiver已经接收-->累计确认,base = n+2
  9. timer启动/结束:
  1. 初始时base==nextseq-->timer启动接收正确ack后base++,若base==nextseq,说明完毕-->timer结束否则重启timer
  2. 收到其余任何ack,重启timer
  1. timeout发生后,重传不改变base和nextseq
  • receiver变化要点
  1. 收到正确pkt n,返回ack n:
  2. 其余任何情况,返回当前正确接收的最大n



3. 流控--SR

题目同2

分析如下

结果

分析

Time

SEND

RECV

Time

SEND

RECV

time

base
(N=3)

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变化要点
  1. base,标识已发送但未ack的pkt
  2. nextseq,标识已进入窗口,待发送的pkt
  3. 初始化base=nextseq=1
  4. 只有接收到窗口最小pkt的ack,base++(区别)
  5. 每次新发送pkt,nextseq++
  6. 只有base+N>nextseq才说明窗口有空间,能发送
  7. 接收到乱序ack,do nothing,等待timer
  8. timer启动/结束:
  1. 每次发出一个pkt n-->启动timer n
  2. 接收正确ack n时-->timer n结束
  1. timeout n发生后,重传pkt n需重设timer n
  • receiver变化要点
  1. 序号[rcv_base, rcv_base+N-1]收到正确pkt n,返回ack n:
  1. 当pkt未被缓存:缓存,且如果pkt序号==rcv_base,则已经连续的已缓存pkt可提交上层:rcv_base==2时,已经缓存3,5,6,此时2,3可被提交
  2. 当pkt已经缓存,返回ack n即可
  1. 序号[rcv-N, rcv_base-1]收到正确pkt n,此时是上一个窗口,必须也返回ack n告知sender
  2. 其余任何情况,忽略

解题思路

  1. 读题,确定GBN/SR
  2. 确定所给条件:发送间隔,RTT,timeout,延后,丢包,buffer容量
  3. 分析时不用列出base,nextseq,时刻关注此时有几个pkt未确定即可判断是否可以继续发送:
  • 3GBN下,始终出现ack4,此时已经发出的pkt5,6,7无法确定,因此不能再发
  • 4SR,出现了ack4,6,7,但此时ack5缺失,sender端窗口依旧5,6,7(base在收到窗口最小pkt的ack时才能base++),因此无法再发
  1. 时刻关注Timer
  • GBN下,初始时启动一次,此后接收任何ACK时,(re)start-->全程一个timer
  • SR,每发出一个pkt n,start一个timer n-->收到ack n,stop-->全程n个timer

4. RDT综合(1)

可靠性+流控+拥塞控制

分析:由题意可得到

  • TCP与GBN的关系:
  • TCP具有单timer和累计确认的特性
  • TCP接收非最小未确认ACK时只重启timer,不发出pkt
  • cwnd等说明拥控,3dup
  • recvbuffer
  • ACKs for 8th实际指对sender发出的seg7的确认,同时是receiver发出ack8


①采用慢启动

②起始threshhold=4KB,cwnd=MSS=1KB,rwnd=recB=4KB

③第2segACK返回时出现延后

④第4seg丢失

⑤第8个seg后recB缩减为2KB

⑥sender的每个seg发送间隔10ms 首先可以确定的是receiver没有个sender发送data,因此ack一列始终为100


时间

sender

receiver

0

seq=0,ack=100(后续省略ack,恒定)
初始cwnd=1MSS=1KB,因此只能发送一个seg,大小1K,设置timer(每次接收ack,timer重置,后续省略)

 

30

 

seg0抵达,返回:
ack=1k

(实际抵达0-1023,请求1k)

60

接收ack=1k,cwnd=2MSS,
发出seq=1k

 

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抵达
返回ack=3k,3k,3k

seg4,5,6-->Buffer

200

/210

/220

接收3k,3k,3k,根据GBN中dup处理,220+100=320,220dup3触发快速重传
重发seq=3k

快速恢复:cwnd=1/2cwnd+3=5MSS
thresh=2

 

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抵达,
返回ack=9k

330

 

seg9抵达,
返回ack=10k

340

接收ack=8k

seg10抵达,
返回ack=11k

350

接收ack=9k

 

360

接收ack=10k,解除限制,发送seq=11k

370

接收ack=11k

 

390

 

seg11抵达,接收完成



5. RDT综合(2)

对比4,5中接收了乱序ACK

分析:由题意可得到

  • ACKs for 7th实际指对sender发出的seg6的确认,同时是receiver发出ack7

①采用慢启动

②起始threshhold=4KB,cwnd=MSS=1KB,rwnd=recB=4KB

③第2seg发送时延后

④第4seg丢失

receiver接收第7个seg后recB缩减为2KB

⑥sender的每个seg发送间隔10ms 首先可以确定的是receiver没有个sender发送data,因此ack一列始终为100


时间

sender

receiver

0

seq=0,ack=100(后续省略ack,恒定)
初始cwnd=1MSS=1KB,因此只能发送一个seg,大小1K,设置timer(每次接收ack,timer重置,后续省略)

 

30

 

seg0抵达,返回:
ack=1k

(实际抵达0-1023,请求1k)

60

接收ack=1k,cwnd=2MSS,
发出seq=1k

 

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抵达
返回ack=3k,3k,3k

seg4,5,6-->Buffer

210

/220

/230

接收3k,3k,3k,根据GBN中dup处理,230+100=330,230dup3触发快速重传
重发seq=3k

快速恢复:cwnd=1/2cwnd+3=5MSS
thresh=2

 

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抵达,
返回ack=8k

330

 

seg8抵达,
返回ack=9k

350

接收ack=8k,可发送seq=9k

 

360

接收ack=9k

 

380

 

seg9抵达,接收完成

  • 一些常用结论

cwnd和threshold

  • Timeout:
  • threshold=1/2cwnd
  • cwnd=1

进入慢启动  

  • 3dup:
  • threshold=1/2cwnd
  • cwnd=1/2cwnd+3

进入拥塞避免

关于timer

  • pkt发出,设置timer直到对应ack返回
  • dupACK,sender do nothing,等待timer

流控和拥控

  • 流控针对末端receiver的buffer
  • 拥控针对路径link
  • 是否能够继续发送seg,需要同时考虑
  1. 非dupACK
  2. min{cwnd,rwnd}
  3. threshold本身无特别影响,只是在慢启动中当cwnd==threshold,告知连接进入拥塞避免

Ch4 网络层

原目录:计算机网络

查看语雀原文

1. 转发和路由

网络层主要有两个功能:转发和路由

forwarding 转发

pkt到达router后,router为其选择合适的输出链路

routing 路由

pkt从发送方流向接收方,网络层决定pkt路径.计算路径的算法即路由选择算法

对比

  • forwarding:
  • 发生在路由器
  • 时间很短(纳秒),通常由硬件实现
  • routing:
  • 发生位置不一定
  • 时间长的多(几秒),通常由软件(算法)实现

⭐网络层服务

简单灵活的、无连接的、尽最大努力交付的数据报服务

⭐区分网络层&传输层

  • 网络层:两台hosts之间的连接(VC网络中包括中间的routers)
  • 传输层:两个process之间的连接



2. 分组交换网络

分组交换网络分为两种,对应Ch1中的电路交换&分组交换

数据报网络 

datagram networks

使用目的地地址转发pkt,

虚拟连接网络 (VC)

virtual connection networks

使用VC号码转发pkt; 只有VC网络需要在IP数据报传输前建立virtual connection,即连接setup过程


2.1 VC网络

  • VC网络传输数据报前需要建立连接,使用VC号码转发pkt,不依赖destination
  • 使用在ATM, frame-relay, X.25,今天的Internet不再使用
  • 路由器维持着连接状态(路由表)


2.2 Datagram网络

  • 无需setup
  • 路由器没有保存e2e连接状态
  • pkt转发依赖目标地址,非VC号,如下图,限定IP范围和输出链路的对应

对比

image.png

  •  最长匹配

在DG交换中,一个IP地址为了避免重复匹配,选择"最长匹配"策略:选择可匹配目的地址中最长的一个

例题,已知路由表

和两个IP

DA1:只能匹配0

DA2:可匹配1,2,选更长的1

*最长匹配的前提是匹配完整,不是说地址一和0,1,2前21位都一致,从里面选最长的,DA1甚至没有完整匹配



3. 路由器

3.1 构造&功能














整体

输入

  • line termination:物理层
  • link layer:链路层
  • lookup:通过datagram的dest查询转发表,确定output

交换结构

cpu控制,pkt复制到系统内存,速度被内存带宽限制

通过共享总线交换,但会被总线带宽限制

通过互联网络交换

输出

  • 输出端有buffer:当流入速度快于流出速度,进行buffer,当溢出时会产生排队时延和丢包(路由器中未实现流控)

联系"封装"过程

pkt进出router时链路层header与网络层header变化原因:

  • 输入时:经过link层-->经过network层,进行lookup查询转发表,确定输出端口
  • 输出时:经过network层,重设首部-->经过link层,重设首部



运行算法

运行路由算法

转发

转发数据报到输出link


4. IP--因特网协议

4.1 数据报--分片&重组

IP数据报结构

image.png


第二行

id:标识相同数据报

一个数据报中的protocol overhead(协议开销):输层TCP header+网络层IP header

转发后-1,0时被丢弃,由于TTL每次变换,每次转发到新的routerchecksum要重新计算

offset: 从小到大标识分片顺序
计算方法:当前分片前应抵达数据大小/8
(因此需剔除之前每片的ip hearder)

见👇例题

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. 例题:图示分片后的pkt信息,已知TCP和IP的header都是20bytes:

1. receiver接收分片后网络层->传输层投递分片的顺序如何
2. sender一共传输了多少字节(忽略链路层header)

3. sender上的应用层共传输了多少字节

  1. 根据id,一共有4个数据包,对于每个数据包根据offset判断先后,flag==0,说明为末尾

(注意1000-1003不标识任何数据报投递的顺序,因此分片的投递不能写成DABJHEIGCF)

  1. (500+500+...+150+200)-20×10+4×20=4090

分片后的header不属于sender原始数据,4个数据报的header来自sender

  1. 4090-8×20=3970

sender发出数据-4IP header-4个 TCP header

  1. 例题:计算offset

分片1:
offset=0/8=0
分片2:
offset=(1500-20)/8=185
分片3:
offset=(3000-40)/8=370

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:广播目的地址

  • 特定子网广播地址:网络号不变,主机位全为1
  • 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"协议

过程

该过程的四次广播

  • dicover:客户把数据报广播至所有与子网连接的节点
  • offer:DHCP server(不一定一台),广播回复
  • request:客户选取最优地址,继续广播,告知其余serverIP已被使用
  • ACK:server确认

 

例题

例题:DHCP分配地址块,已知ISP有如下地址块

  1. 分给8个组织网,host个数相等
  2. 当要求分给三个组织网络,1st120台host,2nd250台host,3rd120台host
  1. 8=2^3,为网络号延长3bits用来区分8个组织即可,

  1. 组织0,2:120<2^7,保证7bits留给子网内设备;组织1:250<2^8,保证8bits留给子网


4.4 NAT

定义

Network Address Translation(网络地址转换):

如果给internet中每台设备一个唯一IP地址,那么IPV4资源无法满足,因此产生了NAT,一个NAT路由器有单一IP地址,假设为138.76.29.7,由其连接的组织网络中的设备都使用10.0.0.0/24编址(private network--专用网络),这些地址只对组织内其他设备有意义

区分

概念区分:NAT和子网划分🎭

  • 子网划分是ISP把地址块分给不同的组织(子网),依旧使外网可识别的IP
  • NAT是转换网络地址使用,可以把公网IP转换为私网IP,私网IP无法被外网设备辨识

路由聚合

路由聚合--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后封装在framedatagramheader改变⭐

  • TTL: 每次-1
  • checksum: 因为TTL变化
  • 可能有IP: 当使用NAT技术时
  • 出子网:改变src IP
  • 入子网:改变dest IP

4.5 ICMP

定义

ICMPInternet Control Message ProtocolInternet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息

应用

  • 错误报告--不可达的host,网络,端口,协议等
  • echo request/response--ping的实现
  • tracert/traceroute--host依次发生TTL1/2/3...pkt,路径router每次减一,0丢弃,丢弃后发送ICMP消息回source,由此可以判断路径中router个数
    (tracert重复上述过程三次)

4.6 IPV6

Dual Stack
双协议栈技术就是指在一台设备上同时启用IPv4协议栈和IPv6协议栈

典型不同:

  • flow:IPv6具有流,类似一项要求进行实时传输的服务,如音频视频(流媒体),但文件电邮传输不算流,因为非实时的
  • 40字节header
  • 地址长度从32bits->128bits

不再存在的IPv4属性:

  • 分片, checksum, option

一个真实的IPv6地址

128bits,分为8,每组16bits,416进制数表示:

  • ::是使用零压缩算法,表明该分组为0000
  • %18是说明该地址仅针对标号为18的网络接口(网卡)

IPv4->IPv6:建隧道(Tunneling)

  1. B->C时把IPv6数据报封转为IPv4格式
  2. CD完全无视其中的IPv6数据报
  3. 到达E,E识别出其中的IPv6数据报,提取后恢复IPv6转发


区分隧道和双栈:

CD类似一段隧道,过程中pktIPv4隧道中,IPv6暂时切断联系,区分Tunneling和Dual Stack,前者是转换,后者是通用



5. 路由选择算法⭐

一般根据算法是集中式/分散式划分

  • 集中式(centralized):路由时已经知道全局信息(每个链路的状态)
  • 分散式(decentrailzed):路由时路由器只知道相邻链路信息,必须迭代,分布式的计算出开销最小的路径

5.1 Link State 算法

LS算法是集中式算法,实际上为Dijkstra算法,给定图后求出单源最短路径,其核心为

image.png

例题: 见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 路由器自治系统

  • 如左图所示即为一个路由器组织自治系统(Autonomous System, AS),每个AS由一组相同管理下的路由器组成,不同ISP又可划分多个AS;
  • 转发表通过intra-AS (自治系统内部路由选择协议)and inter-AS (自治系统路由选择协议)路由算法解决AS内以及AS间的路由选择问题;
  • 网络所有AS间的选择协议相同,BGP(Broder Gateway Protocol),边界网关协议
  • 无论是否为网关路由器都会同时运行intra/inter协议

6.2 AS内: RIP算法

RIP(routing information protocol)路由信息算法基于DV算法,但其中的链路开销变成到下一路由器的跳数hops

一些特点:

  • 路由器每30s给邻居发送公告交换距离信息,180s后没有回复,则认为其无效
  • 公告通过UDP pkt发送
  • 使用毒性反转防止路由环路
  • 最大允许15,因此使用16跳标识∞

6.3 AS内: OSPF算法

OSPF(open shortest path first)最短路径优先算法,是一种LS算法,有以下特点:

  • 公告会通过flooding发给整个AS
  • OSPF msg直接通过网络层IP携带,而非TCP或IP
  • 安全性:OSPF授权
  • 当多条同样开销路径并存,不同于RIP的一般LS从相同开销中选一个,OSPF会一起保存
  • 目前的大型网络基本都使用OSPF,因为其可以分级

6.4 AS间:BGP

BGP(Broder Gateway Protocol),边界网关协议,为保证连接可靠性因此基于TCP

  • 通过BGP路由信息

BGP实际上为某个AS中的路由想办法告知其余AS自己的存在,让他们自己斟酌怎么到这

image.png

  • eBGP:外部BGP,连接横跨不同AS的BGP连接
  • iBGP:内部BGP,在一个AS内部中两台routers之间的BGP会话


  • 最优路由确定

BGP路由

route=prefix+attribute

prefix

目的地前缀,通常为子网或子网集合

attribute

attribute:当进入BGP的输入产生的路由不唯一,顺序调用以下规则直到剩下唯一一条

  • local preference:本地偏好,由网管设置,直接选择最高偏好的AS
  • shortest AS-PATH:AS-PATH包含了通告已经通知过的AS;如果偏好相同,选择最短AS-PATH
  • closest NEXT-HOP router:NEXT-HOPAS-PATH起始路由器接口的IP;当偏好和AS-PATH都一样,从余下路由中进行热土豆选择,即最靠近NEXT-HOP的路由使pkt尽早离开当前AS

热土豆路由:路由器收到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

image.png


链路开销改变 & 毒性逆转☣

原目录:计算机网络 / Ch4 网络层

查看语雀原文

1. 链路开销减少

image.png

原本如上图所示👆(只关注y,z),t时刻x->y的开销变为1

txyz
y401
z510

t0时刻y检测到变化

t0xyz
y101
z510

t1时刻,z接收到y的更新信息

t1xyz
y

2

1

0

z

1

0

1

当开销减小,总共只需要t->t1->t2,两次迭代即可变为静止状态--"好消息传得快"


2. 链路开销变大

2.1 三个节点

image.png

原本如上图所示👆(只关注y,z),t时刻x->y的开销变为60

txyz
y401
z510

t0时刻y检测到变化:min{60+0,1+5}=6,(y,x)=>6

t0xyz
y

6

01
z510

t1时刻y更新数据给z:min{50+0,1+6}=7,(z,x)=>7

t1xyz
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

t45xyzt44xyz
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不变

t44xyzt44xyz
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->xz-y-x,因此zy的信息为z-x=∞

min{60+0,1+∞}=60,(y,x)=>60,路径直接y-x

t0xyz
y

60

01
z

10

t1时刻y更新数据给z,y-x,z为中间节点,传递真实数据

min{50+0,1+60}=50,(z,x)=>50

t0xyz
y

50

1

0

z

60

10

此后进入静止状态,问题看似解决,但重点在于应用毒性逆转后,对于节点个数>3的情况,会出现问题


2.2 大于三个节点

image.png

如图所示(AB等效),t时刻c-d变化,但由于C作为必经之路,使得A(B)->D始终受毒性逆转

tABCD
C1101
A011

B

1

0

1

t0时刻c更新,受毒性逆转限制,A(B)->D调整为

tABCD
C110100
A011

B

1

0

1

t1时刻A(B)更新,min{,1+2,1+100}=3

tABCD

A

0

1

1

3

B

1

0

1

2

C

1

1

0

100

t2,C更新

tABCD

C

1

1

0

100

A(B)

0

1

1

t3时刻A(B)更新,min{∞,1+3,1+100}=4

tABCD

A

0

1

1

4

B

1

0

1

3

C

1

1

0

100

...不可数问题再次出现,因为B-D始终不经过A,普通毒性逆转无法觉察


解决:毒性逆转plus版本

来自邻居节点的开销上升,且通过其选路时才逆转

修改:

初始C

tABCD
C1101
A011

2

B

1

0

1

2

t0时刻开销改变,min{100+3,1+2,1+2}=3

tABCD
C110

3

A011

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,∞}

tABCD

A

0

1

1

3

B

1

0

1

2

C

1

1

0

3

B同理发送给C{1,0,1,∞}

tABCD

B

1

0

1

3

A

0

1

1

2

C

1

1

0

3

t2,C更新,min{100+0,1+∞,1+∞}=100

tABCD
C110

100

A011

B

1

0

1

t3,A更新,min{∞,1+∞,1+100}=101

tABCD

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路由器;当目的地为
x,y,w,z下一步路由至x,转发通过路径图可直观看出



2. DV算法例题

image.png

例题:如图链路状态,每个节点只知道自己邻接链路情况,只用叙述A节点路由选择表的变化

初始化

更新

更新

静止状态

A

B

C

D



3. 路由选择例题

例题:关于路由选择AS内协议,已知

  • AS3AS2运行OSPF;
  • AS1AS4运行RIP;
  • AS间协议: eBGP和iBGP
  • 初始: AS2和AS4无连接(虚线),

  1. 3c/3a/1c/1d分别通过OSPF,RIP,eBGP,iBGP中哪一个协议学习到x
  2. AS2和AS4之间产生物理连接,此时1d通过AS2还是AS3学习x,接口是l1还是l2
  3. 当AS4AS2之间有一个AS5,此时1d通过AS2还是AS3学习x

a. 分析如下

  • 3c: 对于3c,只有通过4c的eBGP学习x
  • 3a: 对于3a,只有通过3c的iBGP学习x
  • 1c: 对于1c,只有通过3a的eBGP学习x
  • 1d: 对于1d,只有通过1c的iBGP学习x

b. 此时对于1d存在两条路由AS3 xAS2 x,但AS-PATH都为1,此时考虑规则2NEXT-HOP

  • 3c右上接口IP AS3 x  
  • 2c左上接口IP AS2 x

1d距离AS2的NEXT-HOP更近,因此选择l2接口从AS2学习x

(BGP路由的表示法有点类似入栈,但注意x本身AS4和当前AS1都不用标识)

c. 此时路由表示:

  • AS3 x
  • AS5 AS2 x

自然选择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的系统总线

image.png



2. 错误检测和纠正

奇偶校验

对于d位数据,增加一个校验位,使得d+1位中的1总数是偶数,当数据接收方计算出的校验位和传输的结果不一致,说明出错

二维奇偶校验

一维奇偶校验只能检测,无法纠正,而二维校验可具体定位错误bit,从而改正

CRC检测

编码过程:
CRC把发送的01串视为多项式进行操作:发送d位数据,发送方和接收方需要协定一个G,用于验证数据,对于d≤2r,需要保证有r个附加比特R连接到原始数据D,生成d+r比特模式

R过程:
对d位原始数据先补r0,直接进行模二运算(异或),得到R,如下👇原始数据101110,因为6<23,则需要要3位附加比特使用101110000和1001模二运算,得到余数为011,因此发送的比特模式应该为101110011

 

校验过程:
接收方使用G去除(模二除法)接收的d+r,当余数为0说明正确接收,否则说明传输出错,接上👆,接收方收到101110011后和1001模二运算,当余数为0,说明结果正确

对于其余层

  • 在第二层(链路层)使用CRC检验;
  • 在第三层(网络层)使用checksum



3. 多路访问协议

定义

Multiple access protocols--多路访问协议:

用于规范多节点在共享的广播信道传输frame时的行为

分类

  • channel parititioning--信道划分
  • random access--随机接入
  • taking turns--轮流

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
冲突


  • t0时刻:信道空闲,B开始传输,沿着两个方向随时间向下传播
  • t1时刻:此时D监听信道空闲,实际上B的比特只是还未抵达
  • 一段时间后:B抵达D开始在D干扰D的传输

CSMA中冲突发生后传输不会停止,因此会生成受损的frame,为了避免这种情况需要保证B的比特在D传输就抵达,提示D信道忙:

  • CSMA/CD(Collosion Detection,带碰撞检测的CSMA)

模式

先听后发 边听边发, 

冲突停发 随机重发
停发机制避免浪费带宽去传输受损
frame

CSMA
冲突

  • t0时刻:信道空闲,B开始双向传输
  • t1时刻:此时D监听信道空闲,实际上B的比特只是还未抵达,D开始双向传输
  • 一段时间后:B抵达D开始在D干扰D的传输,而之后D的比特也到B,B时探测到干扰
  • CSMA/CD无法用于WLAN,因为信道监听困难,无线使用CSMA/CA

在冲突发生时,为了使两个站点都能及时正确接受到冲突发生的信号,要满足最小帧长:

* 最小帧长Lmin的确定

参考链接: CSMA/CD协议(载波侦听多路访问/碰撞检测) 最小帧长理解

前提:

  1. 边听边传,前frame传输未结束时监听到碰撞才有意义
  2. 传输时延:将一个完整pkt传输到信道上的时间,因此在0时刻frame的第一个bit传到信道后,L/R时刻时frame最后一个bit传到信道上
  3. 碰撞信息传回host也需要时间(传播时延)

image.png

3.3 轮流协议

轮询--polling

描述:主节点以轮询方式给其余节点发送msg,告知子节点可发送的frame最大数量
缺点:轮询也有时延,且主节点故障时传输不可进行
令牌--token

描述:没有主节点,有一个令牌在需要传输frame的节点间传递,持有令牌的节点以最大速率发送
缺点:当一个节点要加入/退出时,为了形成环路,必须进行节点的更新维护



4. MAC地址 & ARP

4.1 MAC地址

定义

网络接口的链路层地址,有48bits,也叫LAN地址,物理地址

位置

链路层

意义

⭐src的适配器(网卡)向dest发送frame,destMAC地址插入frame,从而dest可实现在网卡处就过滤网络中不相关的pkt

为什么不使用32bitsIP地址?

IP协议实现在网络层,需要接收pkt后拆封由OS判断,而每次判断会触发OS的中断,效率低下,浪费资源

🦈关于抓包过滤:

网卡分为混杂/正常工作模式,使用wireshark抓包时会切换为混杂模式,此时网卡就会接受所有MAC不对应的pkt

结构

扁平,即无层次,且不可变.目的就是免去配置的过程,直接写死在网卡上

4.2 ARP--地址解析协议

定义

ARP, Address Resolution Protocol(地址解析协议),负责进行网络层IP和链路层MAC地址映射,跨越链路层和网络层

过程

每一个IP节点(包括host)都有ARP table,存有IP-MAC映射

  • 当有记录时:直接查表
  • 无记录时:
  • 广播查询--A广播ARP查询pkt(dest MAC设为FF-FF-FF-FF-FF-FF),其中含有B的IP
  • 单播返回--当B收到查询,单播返回给A自己的MAC

4.3 局域网寻址场景

场景

背景知识

背景知识

  • 直接投递:同一子网内host,MAC直接为目标hostMAC
  • 间接投递:当非同一网络组内host,数据报无法直接抵达,需要先发给网关,因此是网关的MAC

当问"节点如何知道该使用什么链路层地址"?

答案:节点通过IP地址判断:

  • 如果网络号相同说明在同一子网,直接使用目标MAC为link层地址
  • 当网络号不同说明非同一子网,采用间接投递,使用网关MAC

过程

A封装:

  • A网络层datagram:IP src111.111.111.111,IP dest:222.222.222.222(B)
  • A链路层frame:MAC src:74… MAC dest:E6 ...(路由器R的接口,非B)

R接收:

  • 数据报没有任何改动
  • 链路层frame的MAC src变为自己发送接口的MAC,MAC dest变为同一网络内B的MAC

B收到:

B最终收到来自A的pkt
上述过程中A->R即为间接投递,R->B为直接投递,省略了ARP解析
注意:frame中封装的datagram不会改变(忽略NAT),srcdest MAC每一hop都改变,对应着Ch1中链路层作用:在相邻网络节点间转递数据



5. 以太网

5.1 概述

  • 定义:

以CSMA / CD作为MAC算法的一类LAN称为以太网(来自: 以太网原理)

  • 发展

同轴电缆

  • 拓扑:使用bus topology
  • 广播局域网:所有frame传送到与bus连接的所有适配器(NIC/网卡)进行处理

集线器 hub

hub是物理层设备,作用于bit而非frame,二进制信号(0/1)到达时hub只是重新生成并发送给其他接口,6.1 交换机&集线器

交换机 swtich

链路层交换机--switch

5.2 以太网帧

image.png

前导码

8bytes,7字节为10101010用于同步,最后1字节10101011预示数据到来

地址

都为6字节

Type

指示高层协议(大部分为IP,但还有其他)

CRC

校验

5.3 服务

Unreliable, connectionless

  • 无连接:数据传输前没有握手
  • 不可靠:NIC之间不传输ack
  • MAC协议: 无分片带碰撞检测的CSMA--unslotted CSMA/CD

5.4 以太网传输算法⭐

  • NIC从网络层接收datagrams,组成frame
  • 当NIC检测到信道占用,等待直到空闲;
  • 当NIC检测的信道空闲(96bit time中没有被占用),开始传输;
  • 当NIC完成传输且无冲突,传输完成;
  • 当探测到冲突,终止当前传输,发生以下一系列动作
  • 发送48bitsjam signal,告知其他传输者发生冲突
  • NIC进行指数回退(exponential backoff):当前为第m次冲突,则选择k∈{0,1,2...2m-1},NIC等待K*512bit times后回到状态2--即随机等待时间

*Jam signal:特殊信号,48bits,用于告知其他传输者冲突

** bit time:传输1bit数据的时间--1/R

例题:

局域网内A和B在t=0时刻进行数据相互传输,传播时延500 bit times,
①AB分别何时检测到冲突 ②发生第一次冲突后A,B的K为0,1则分别在何时重新传输

  1. 500bit time时AB同时各自检测到冲突
  2. AB如下



6. 交换机

6.1 交换机&集线器

hub

集线器只是单纯的物理层设备

  • 一条link的bits会以相同速率发送给所有links,因此,集线器以太网是bus topology
  • 所有nodes之间都会冲突
  • 没有frame缓存
  • hub自身没有CSMA/CD,只能通过host检测

switch

更主动的链路层设备

  • 检测到达frame的MAC,有选择的转发给一或多个links,交换机以太网是star topology
  • 允许多路同时传输,不会冲突
  • 存储-转发以太网frame
  • 使用CSMA/CD
  • 透明:switch没有网络层,因此没有IP地址(基于vlan等技术分配的为虚拟IP),故host无法意识到switch存在
  • plug-and-play & Dual: 自学习,无需手动配置table;双工,任一接口同时收发

6.2 转发&过滤

filtering

决定frame应当转发或丢弃的switch功能

forwarding

决定frame的导出接口

switch table

是转发&过滤的基础,基于"MAC-接口"的对应关系

场景

对于一个"来自x接口且dest MACDD-DD-DD-DD-DD-DDframe",swtich使用该MAC索引table,可能情况:

  • 失配:此时交换机广播该frame的副本给x接口外所有接口
  • 丢弃:有一个item,DD-DD-DD-DD-DD-DD连接到接口X,说明该frame的dest和src在一个LAN中,无需转发,直接丢弃
  • 转发:有一个item,DD-DD-DD-DD-DD-DD连接到接口Y,则通过Y转发frame即可,和别的接口无关

6.3 自学习

初始table为空,而且交换机可以自学习并动态更新table

初始

table为空

学习

对于一个frame,在table中存入:

  1. src MAC
  1. 到达接口
  2. 当前时间
老化

一段时间无来自该src的frame则删除item

6.4 路由器&交换机

共同点

二者都为存储转发分组交换机

不同点

路由器

拥有网络层,因此有IP地址, 也可以使用MAC

交换机

只能使用MAC

交换机

优点

  • 即插即用,无需配置,无需处理高层次数据报
  • 设有输出缓存,没有因为碰撞浪费带宽,交换机最大聚合带宽是所有接口速率之和

参考例题: 不同设备聚合带宽

  • 全双工,任意接口同时收发

缺点

一旦host出错不断输出frame流,switch无法识别,只能转发直到崩溃--"广播风暴"

路由器

优点

IP寻址分层,非MAC扁平,因此能够隔离流量,防止"广播风暴",且使用算法可以"优化路由"

缺点

需要配置,且对pkt处理时间更长

  • 小结三种网络设备

image.png



MindMap

image.png


Ch5必考题

原目录:计算机网络 / Ch5 链路层 & 局域网

查看语雀原文

1. 不同设备聚合带宽

  1. 由交换机聚合带宽性质得到9*100=900M
  2. 集线器是一个单冲突域,每个系内设备都会冲突,最大吞吐量100,因此100*3+200=500M
  3. 同二,最大只有100M,系内设备和三个系与两台服务器间都会冲突

2. DHCP四次交互的MAC和IP变化

如图new host为了从DHCP获取IP192.168.1.4,其中pkt的IP和MAC情况如何?(ARP为空)

image.png

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如果要发送IP
datagram pkt给F,则E怎样直接发给F而不会被传递给R2
给定如下格式

假设E->A发送IP datagram pkt,且网络中所有节点的ARP cache都是空的,按该格式给出E->A所有frame信息

④假设C->A发送IP datagram pkt,则C发出的frame与A接收的frame情况如何?

  1. NAT服务(注意网络号明显不同,说明处于私有子网,尤其是注意192.168.1.0或者10.xx这类地址,且题中标出了以太网1,2,3,但注意1,3在虽然非同一子网内,但是划分自一个共有地址块无需NAT)
  2. S1查询交换表,frame中的dest MAC对应接口一定指向F,指向对F的转发
  3. 如下

image.png

  1. 如下(忽略ARP),C->A需要在R2进行NAT,因此R2处发出的pktsrc 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

实际流程如下:

image.png