[Lecture Notes] CMU 14-740 Fundamentals of Telecommunication Networks
Lec 1. Intro
Network Protocols: Define the format (of a message), order of messages sent and received among network entities, and actions taken on message transmission or receipt.
所有Internet的通信活动都由protocol管。
Reliable: 发送到的和接收到的数据一致,顺序一致。要reliable就会有overhead,需要trade-off.
- circuit switching
- 每一个connection都有一个channel, connection-oriented
- 在没有connection/call/user使用的时候会导致资源浪费
- 每一个信号都有time和frequency,同一时刻有不同频率的信号频段都可以传输。如何切分?
- FDM (Frequency Division Multiplexing) 频分复用
- TDM (Time Division Multiplexing) 时分复用
- packet switching
- Connectionless, 没有channel,用多个paths
- 数据切分成小块,称为packets
- 所有用户都可以使用完整的带宽,没有FDM、TDM等,statistical sharing
- Store and forward model: 一条link上有好多个节点,节点必须接收到完整packet才会继续发送给下一个节点
- 缺点是会有congestion,数据包太多会导致竞争
Lec 2. Architecture
packet switching: 每一个packet都能占用全部的bandwidth,需要queue
如果queue满了,新的packet会被drop(aka lost, 丢包)
4 Sources of packet delay
- processing delay (nodal processing)
- Router接收到packet时需要:①检查bit errors ②决定转发给谁
- 与router的处理速度有关
- queueing delay
- router一次只能发一个packet,需要排队等待
- 与router的congestion level (拥堵情况)、buffer size都有关
- 范围可以从0到无穷(无穷代表丢包)
- Traffic intensity (=输入除以输出)
- L = Packet Length (bits/pkt)
- R = Link Speed / Data Rate (bps)
- = Average Packet Arrival Rate (pkt/s)
- transmission delay
- = = Packet Length / Link Bandwidth
- propagation delay
- 第一个bit发送需要的延迟时间。取决于光速(或物理介质速度)
- = Length of physical link / Propagation speed in physical medium
Traceroute:发送给第i个node来回的时间
Layered Network Architecture
Layer的优点
- 每个layer里面的protocol可以分开设计,互不干扰,简化设计、实现和测试流程
Layer的缺点
- duplication:每个layer都做了一些reliability的设计,导致重复
- 每层layer之间隐藏了信息,可能影响性能(完成某些操作可能需要底层layer的信息)
ISO OSI reference model / TCP/IP
1970s的时候不同的网络架构互不兼容,无法互相通信,所以ISO搞出了OSI来实现 interoperability
ISO: International Standard Organization
OSI: Open Systems Interconnection
然后 TCP/IP 把OSI protocol给取代了
OSI有7层layer,TCP/IP有5层layer。顶上两个是end-to-end,底下的是hop-by-hop.
Lec 3. Design Principles
Virtual connections
每层layer都有自己的header。
Encapsulation: Sending host, 从更高层layer获取信息,在payload前加一个自己的header
Decapsulation: Receiving host, 从更底层layer获取信息,从自己的header提取信息然后去掉

TCP/IP

“Hourglass” design, IP 是最中间的glue,IP的上层和下层都有很多东西
缺点:IP至关重要,并且改IP很困难,像IPv4到IPv6的迁移非常复杂。
No Strict layering: 应用程序也可以绕过layer直接用底层。
协议需要 standardized.
- Internet Engineering Task Force (IETF). 每个IETF标准都公开发布了Request for Comments (RFC).
- 但不是所有RFC都成为了标准。RFC包含实验性的协议
Goals of TCP/IP design
Clark88论文
- Fundamental goal: 把现有的网络给interconnect起来。使用 store-and-forward packet-switching 方法,用 gateways 连接起来.
- Second level goals:
- continue despite failures 失败了也要继续(失败了要重建连接)
- 需要保存state(状态信息),这样连接中断了才能重新建立连接
- state是存在intermediate nodes还是存在end-hosts? 存在end-hosts里。stateless nodes.
- 支持多种服务
- TCP: Connection-oriented; UDP: connectionless
- 最初TCP的目标是connection-oriented and reliable。Reliability是主要的延迟来源。所以TCP和IP分离了,搞了个UDP。
- 支持多种网络技术(有线网、无线电等)
- distributed management 自己需要能管理自己的网络
- networks can be administered separately
- cost-effective 效率
- account for resources used
- 早期设计的时候没有人在意(现在很多人在意网速)。
- 上述后两个目标并没有获得太多attention甚至完全没有被考虑过
- continue despite failures 失败了也要继续(失败了要重建连接)
Lec 4. Internet ISP’s Architecture
The Internet is a Network of Networks.
ISP: Internet Service Provider
A backbone network ISP: 能够让所有customers连接到全球网络
- 最早的时候只有一个backbone ISP叫做
NSFNET
- 但是这样做不好,比如有两个中国电脑通信,仍然需要经过位于美国的全球唯一backbone
- 所以出现了多个 commercial backbone ISP 互相interconnect来实现全球互联网连接
Transit & Peering
Transit interface: 一个backbone ISP将网络传输服务售卖给客户(“客户”指更小的ISP或别的大企业)
Peering interface: ISP之间互相直接访问
- peering通常是免费的,互惠互利,数据直接传输,不经过transit provider
- peering的关系通常是商业机密
Different types of ISP
Tier-1:
- Tier-1的定义已经被滥用,每个ISP都自称自己是Tier-1。通常Tier-1指的是:
- ① 和一大堆customer有 transit link
- ② 和一大堆别的Tier-1 backbone ISP有 peering (business) interconnections. (通常有 full-mesh architecture)
- Tier-1网速快,延迟低,全球都有,与很多Tier-2 ISP相连(Tier-2 ISP是Tier-1 ISP的transit customers)
- Tier-1不需要从别的ISP购买transit就可以访问到全球互联网
- Tier-1 ISP通常有一种 restrictive peering policy
- 不要轻易跟别的非Tier-1 ISP去peer,因为它们是潜在的客户,要向它们收钱
Tier-2:
- 通常来说,不是 Tier-1 的ISP就叫做 Tier-2.
- Tier-2需要从Tier-1 ISP购买transit access
- Tier-2向更下层的客户提供付费transit服务
- Tier-2和Tier-2之间也会peer。通常有一种 open-peering policy
- Tier-2要和尽可能多的ISP去peer
- 需要权衡一下成本:Peer会产生 management cost 和 maintenance cost

这几年有个新东西进入了ISP体系结构:Content Providers (Large Enterprise Companies)
Content Providers
- Do not sell transit.
- 可分为以下两类
- Category A: Focus on content creation
- 不peering,不运作网络
- Category B: Sophisticated, large-scale players
- open peering policy
- Category A: Focus on content creation
Lec 5. Application Layer & HTTP
Application Layer User Application
Application Layer provides Services (e.g. SMTP, HTTP, FTP, SSH)
许多Application Layer Services需要先创建一个Transport Layer (TL) connection (channel).
HTTP
HTTP-message 由 request 或 response 组成
Request或Response由 start line, header, empty line 和 message body 组成
Start line:
Request-line
或Status-line
Request-line
=Method
spRequest-URI
spHTTP-Version
CRLFe.g.
GET /images/logos.html HTTP/1.1
Method包含
GET
,POST
,HEAD
,PUT
,DELETE
Method中的
GET
:- conditional
GET
:If-Modified-Since
,If-Match
- partial
GET
: 只获取一个object的指定byte范围。header中包含RANGE
field。
Method中的
HEAD
: 获取metadata(与GET相同,但不包含message body)Method中的
OPTIONS
: 获取服务器或资源的能力,不获取资源本身- conditional
Status-line
=HTTP-version
spStatus-Code
spReason-Phrase
CRLFe.g.
HTTP/1.1 200 OK\r\n Connection: close...
Status code 是三位数字:
1xx
: informational: 请求已收到,正在处理2xx
: success 成功3xx
: redirection 重定向/完成请求需要更多操作4xx
: client error 因为client的错误导致请求格式错误或无法满足请求5xx
: server error 请求完全正确,但服务器原因导致无法满足请求 (e.g.505 HTTP Version Not Supported
)
0个或多个headers (General, Request, or Entity headers)
- e.g.
User-agent: mozilla/5.0... \r\n Connection: close
- Header包含HTTP request/response的 metadata
- 日期,时间,Application或服务器信息,缓存控制,46个有定义的header
- HTTP Request 需要
HOST
这一项(Response不需要)
- e.g.
空行 (CRLF)
空行是为了把header和body区分开
message body (optional)
Persistent & Non-persistent Connections
HTTP用TCP作为Transport Layer Protocol
(TCP在Transport层,HTTP在Application层)
建立一个HTTP连接需要先建立TCP连接
Round Trip Time (RTT): 发送一条消息并得到回复的所需时间
Non-persistent HTTP
需要1个RTT建立TCP连接,1个RTT建立HTTP连接,然后传数据,最后1个RTT关闭连接
Total Transmission Time = 2RTT + file transmit time
Total Time (包括关闭连接) = 3RTT + file transmit time
Persistent HTTP
① Reuse existing TCP connection
传数据之后不要关闭TCP connection,省去下一次建立TCP连接的时间
② Pipelining at the Application Layer level
不等到上一个(HTTP)请求收到回复,就发送下一个request。服务器按照顺序发送数据包。这样所有object最少只需要占用1个RTT
HTTP/1.1默认使用这样的 Persistent HTTP + Pipelining
Server Push in HTTP 2.0
服务器提前把client会用到的objects主动发过来,不需要client去请求
Caching
Web Proxy Caching
建立一个中转代理 Local Cache (aka Local Web Proxy)
File Validation in HTTP Caching
HTTP会想办法确保cache是否valid(cache的文件有没有过期)
有两种 Cache Expiration Model
Origin Server-specified expiration
服务器使用
Expires
或max-age
header 直接告诉文件多久后过期Heuristic expiration
服务器不给定过期时间,client请求资源时用
If-modified-since
header,问服务器“我手里的资源是否fresh有没有过期?”如果资源过期则发送,资源没过期则用 304 Not Modified 避免重新传输。
Lec 6. DNS
DNS services (DNS作用)
- Domain 与 IP address 的转换
- Host aliasing (alias 和 canonical domain names 的转换)
- Mail Server aliasing (MX - Mail Exchange)
- Load distribution across Name Servers (一个域名轮换指向多个服务器)
DNS Protocol
Query and Reply (和HTTP类似)
- query和reply用同样的消息格式:Resource Record (RR)
- 每个**Resource Record (RR)**由五部分组成:
(Name, Value, Type, Class, TTL)
Name
: 由RR中的Type
决定Value
: e.g. 对于A解析,value是IP地址;对于CNAME解析,value是另一个域名Type
: e.g.A
,CNAME
等A
: Address 指向IPv4地址,AAAA
指向IPv6地址NS
: Nameserver: 指向Authoritative (organization) Name Server,例如cmu有自己的DNS,Name=cmu.edu, Value=dns.cmu.eduCNAME
: Canonical NameMX
: Mail Exchange 指向邮件服务器的hostname
Class
: 通常全都是IN
意为InternetTTL
: Time to live 代表这一条RR能被缓存多久,0代表不能缓存
DNS queries 在53号端口上用UDP运行
- Exception:在①Zone transfer②大于512字节的response 时会使用TCP
- 为什么用UDP?因为TCP的overhead通常比整个DNS query都要大
Navigation
Client可能需要问多个Name Servers (NS)
每个Name Server返回指向下一个NS的指针(不止返回NS record,也另外返回一个指向另一个NS的A record)
- Non-recursive (右上图片) 有时也叫 Iterative
- Recursive (右下图片)

DNS caching
- Name Server (NS) 会缓存DNS mapping
- 由TTL决定cache多久
- Local Name Servers (Resolves) 通常缓存Top Level Domain (TLD) servers的IP地址
DNS Name Server Hierarchy
1 Root (root name servers)
2 Top-Level Domain (TLD Name servers)
3 Authoritative (e.g. cmu name servers)
delegated administrative structure:
delegated指域名是反着来的 e.g. library.cmu.edu
administrative authority 不一定和 namespace hierarchy相符
e.g. cs.cmu.edu有自己的name server, drama.cmu.edu没有
Zones
namespace hierarchy被分成一个一个zones
每一个zone有一个name server
zone owner必须:maintain zone data; run redundant name servers (for backup)
Root Name Server 知道所有TLD nameserver和它们的地址
- 一共只有13个root server,标记为a到m
TLD (e.g. .com, .org, .net)
- 由 IANA (Internet Assigned Number Authority) 管理
- TLD NS知道它自己所有域名的所有authoritative (or intermediate) name server的地址
Authoritative NS
Local Name Server (DNS Resolver) 也叫 Default Name Server or Resolver
- 并不严格属于DNS结构
- 每个organization(公司、学校等)都有一个
- Act as a proxy

Lec 7. P2P
P2P: Peer-to-peer
Napster (Centralized P2P)
Napster曾经是第一个p2p music-sharing应用
Centralized: clients存储文件, 中央server只存储peer信息:
<file name, ip address, port number>
虽然传文件是decentralized,但是定位文件是highly centralized
==> 导致的问题: 中央服务器稳定性、中央服务器性能瓶颈
Gnutella (Distributed P2P)
Fully decentralized (distributed)
不需要中心的服务器,用户们自己安排自己
Not scalable
- fully distributed scalable
Bootstraping
Find peers的方法:每个节点relay ping/pong messages
这样每个节点都能得到所有bootstrap nodes的列表
Locate content: query flooding
节点从现有的TCP连接发出
Query
消息,相连的Node会relayQueryHit
消息会沿着反向路径发出为什么reverse path发送而不是直接发?
因为requester只和它的direct peers有TCP connection,和目标节点可能没有connection
但是会带来更高的延迟
QueryHit
之后使用HTTP传输文件。Not scalable (因为find peer / find content所需的工作量指数级增长)
Limited scope query flooding: 在query message中添加
peer-count
属性,每经过一个hop减小1,从而限制hop的次数。但是仍然会有peer数量太多的问题,并且不能保证一定能找到目标 (no guarantee)
KaZaA (Hybrid/Hierarchical P2P)
KaZaA使用 Hierarchical (Hybrid) Design
每个节点是 Super Node (SN) 或 Ordinary Node (ON)
- SN是leader,ON和SN有TCP连接,部分SN和SN之间有TCP连接
- SN存储了children的信息
- 某一个ON要找文件时,会询问它的parent (SN) 有没有,如果SN和SN的children都找不到所需信息,会问别的SN (SN-to-SN connections)
- 优点: 与Gnutella相比能够支持明显更多的peers,且没有scalability问题
- KaZaA query: client发送query,SN返回 meta data, hash, IP address (of the peer)
- KaZaA实现细节不公开,有人做Reverse engineering
- ON-SN, SN-SN的连接很短,因为node会不断寻找其余workload更小的节点
Lec 8. Transport Layer UDP
Transport Layer
Mission: Offers Peer-to-peer and end-to-end (virtual or logical) connections between two processes (applications) running on remote hosts.
Network Layer provides Internet Protocol (IP)
IP - packet switching 不提供reliability
(第一节课内容:circuit switching: connection-oriented, FDM/TDM; packet switching: connectionless)
Transport Layer protocols 主要有TCP和UDP
Transport Layer 主要功能
Multiplex & De-multiplex: process的信息在发送方TL multiplex,接收方TL de-multiplex
- 有multiplex一定需要addressing, Transport Layer用port numbers来addressing
- Port Assignment: 端口一共有三种类型:well-known (0-1023), registered (1024-49151), dynamic or ephemeral (49152-65535)
- Port numbers are bound to an application
Breaking data into segments and reassemble at receiver
发送方的Application Layer提供任意长度的信息,Transport Layer会将其切成segments,一个一个发送
TL会往每个segments前添加header
后续会被封装成packets(aka datagrams),然后封装成frames
接收方的Transport Layer接收到segments,重新组装,传给Application layer
connection setup, state management, connection teardown (if necessary)
TCP: reliability guarantees.
UDP
缺点:segments可能丢失,可能顺序乱
优点:
- connectionless (不需要handshake/agreement,不需要预先建立连接)
- simple: no state to maintain
- UDP header is smaller
- No congestion or flow control (less processing overhead)
- reliability可以在Application Layer添加,开销更低
UDP常用于
- loss tolerant & rate sensitive (timeliness): 多媒体应用,例如直播
- big overhead compared to transmitted data: payload很小的应用,例如DNS
UDP segment format:
UDP的header一共8bytes/64bits
source port, destination port, length, checksum各占16bits
Notes:
- length是整个segment包含header的长度,单位为bytes
- 为什么需要包含source port number?因为另一边回复时需要用到(需要反转source port#和dest port#)
- checksum: end-to-end detection
- 发送方:把segments中的所有16-bit words加起来,如果加法过程中产生进位1,则给结果加上进位1。最后反转所有bit。
- 接收方:把所有segment连带着checksum一起加起来,同样如果产生进位则加上进位。结果必须全1.
- 如果UDP发现有错误,则会丢弃,如果没错误则上传给application layer
Quiz 1
Lec 9. Reliable Data Transport (RDT)
RDT: Error-free + Bits received in the same order
Network Layer may have faults (bit errors, missing segments, out-of-order of segments)
==> guarantee RDT at Transport Layer (因为Network Layer可能出错,所以在Transport Layer中保证reliability)
RDT Tools
ACK
: positive acknowledgement,NAK
: negative acknowledgement- checksum
- Time expiration
- Retransmission
- Sequence number
Stop-and-wait RDT protocol
每次只发送一个segment
S&W version 1: Checksum, ACK, NAK
- 发送一个segment和checksum之后,等待收到ACK/NAK回复,再发送下一个
S&W version 2: Checksum, ACK, NAK, 1-bit sequence number
sequence number 是0或1,下一个segment的sequence number是上一个的比特反转
能解决duplicate
S&W version 3: Checksum, ACK, NAK, 1-bit sequence number, timers
解决超时一直收不到ACK/NAK回复,发送方会一直等待的问题
sequence number可以解决premature timeout(过早超时)导致的duplicate
Sliding Window Protocols
上面的Stop-and-wait Utilization很低,可以使用pipeline提高利用率
Sender and Receiver agrees on N (N = size of the sliding window)
GBN和SR
- Go-Back-N (GBN)
- Sender维护一个滑动窗口 (只有发送方维护窗口,接收方没有窗口,只能顺序接收)
- ACK(n)代表所有<=n sequence number的segment都已经收到,大于n的可能未收到
- e.g. 如果发送1,2,3…10,第6个未收到,则6,7,8,9,10都需要重传
- Receiver没有buffering, 不支持接收out-of-order的segment,如果接收到的segment未按照顺序则会被丢弃
- minimal state at the ends, especially receiver end: Receiver只需要维护last Seq# ACKed
- 但是一个segment error可能导致很多segment需要重发,因为乱序发送的packet即使正确也已经被丢弃
- Selective Repeat (SR)
- 两个window,发送方和接收方各一个
- 每一个segment各需要一个ACK,ACK不一定连续,可以out-of-order
- 发送方对每个segment设置timeout,如果超时则重新发送这个segment
- 发送方收到ACK(n)后,如果n是尚未收到ACK的最小元素,则可以向右移动窗口(移动send_base指针)
- 接收方接收到Seg(n)会发送ACK(n),如果乱序则buffer/store,如果顺序正确则移动窗口 (deliver all buffered, in-order segments and advance window to not-yet-received segment)
- SR的问题: 发送方和接收方对window的看法不同
- Solution: 避免接收方的最大Seq #和发送方最小Seq #产生overlap
- Seq # space至少要有两倍window size
Lec 10. TCP
Overview
TCP: Transmission Control Protocol
- Point-to-point: 点对点,一个发送者一个接收者
- Reliable (RDT): 数据顺序正确,没有segment loss或duplicates。使用pipeline和滑动窗口。
- Full duplex data transfer: client和server可以双向传输
- Connection-oriented: 在发送任何数据之前需要handshake建立连接
TCP用两种方法限制同时能发送的segment数量
- Flow control: 至于接收方的资源(window size N)有关,发送方要确保不要发太多了让接收方吃不消
- Congestion control: 与网络有关,发送方要尽量不让network产生congestion阻塞
TCP Segment

TCP Header 包含至少5个 32-bit words,如果有header中有options
则长度会大于5x32-bit.
Source Port #, Destination Port # 各占 16-bit
Sequence # 和 Acknowledgement # 各占 32-bit,以 Bytes of Data 编号,而不是按 segment 数量编号
Seq #: number of the first byte in the segment to be sent
Ack #: number of the next expected byte by the receiver. (隐性告诉发送方所有之前的bytes都已成功收到)
In TCP, ACKs are cumulative
hdr len: 共4-bit,代表header的长度,以32-bit为单位,通常值为5,如果有options则大于5
Flags:
- ACK: 确认收到,与ACK #有关
- SYN:
Receive window: 单位为bytes,代表接收方期望每次能接收到多少数据不用发送ACK,由接收方的window size决定。会被用作TCP Flow Control
checksum: 纠错
Options包括 Maximum Segment Size (MSS): 同一个TCP segment最大能够包含的application layer data大小
TCP Connection Management
TCP 三次握手
- Step 1: Client发送SYN (包含SYN的TCP segment),指定Client使用的最初的Seq # (client_isn)
- Step 2: Server SYN, ACK, 创建buffer space,指定Server使用的最初的 Seq # (server_isn), 并acknowledge client_isn+1 (代表已经收到截止client_isn字节的segments,期望下次接收到client_isn+1字节)
- Step 3: Client回复 ACK, 并 acknowledge server_isn+1
TCP 关闭连接
Step 1: Client发送 FIN
Step 2: Server回复ACK,并发送FIN
Step 3: Client收到FIN,并回复ACK,进入 timed wait state
为什么client已经收到Server的FIN还需要timed wait才会关闭连接?
因为client回复的ACK可能未成功发送给Server,Server因为无法收到回复会重新发送FIN。如果下次client在相同的端口重新开启连接会收到server重发的FIN,导致刚建立连接就被关闭
Timed wait state lets TCP resend the final ACK in case this ACK is lost. Any segment that arrives during this time is discarded.
Step 4: Server收到ACK

TODO: Lec 10 remaining…
Lec 11. TCP Flow & Congestion Control
TCP用两种方法限制同时能发送的segment数量
Flow control 取决于接收方,Congestion control 取决于network
Flow Control
Receiver allocates a Receive buffer of size RcvBuffer, and a Receive Window of size RcvWindow.
RcvWindow 会告诉sender(在TCP segment header里)
RcvWindow = RcvBuffer - | LastByteReceived - LastByteRead |
Congestion Control
Network Congestion (Definition): Too many sources (nodes) sending too much data too fast for a network (e.g. intermediate routers) to handle.
想要: large throughput AND small delay.
Two options for feedback: network assisted, end-to-end
- network assisted 中, routers会把congestion情况的feedback给sender,告知sender explicit max send rate
- end-to-end中,只从终端获取losses和delays
- TCP选择end-to-end
TCP Congestion Control
CongWin
(发送方维护的一个变量)
LastByteSend - LastByteAcked <= CongWin
Roughly, TCP Send rate = CongWin/RTT
End-to-end loss segment events
- Segment timeout
- Three duplicate ACKs
发现loss segment event时江都send rate (CongWin
),未发现时增加send rate
TCP is self-clocking (does not receive explicit feedback from other nodes)
有多个TCP Congestion Control的算法,今天讲 TCP Tahoe 和 TCP Reno (most widely used)
TCP Congestion Control Phases/States
slow start
- 开始时,
CongWin
= 1MSS (Max Segment Size) - exponentially fast 每次乘2,指数级增长
- 直到发生loss event,或超过
ssthresh
(ssthresh
= Slow Start Threshold)
- 开始时,
congestion avoidance
- Additive Increase, Multiplicative Decrease (AIMD)
- Additive Increase: 每次RTT 加1MSS直到发生loss event
- Multiplicative Decrease:
CongWin
减半 - Tahoe不区分timeout和3 dup ack,直接降低到
CongWin=1
然后slow start - Reno 对于timeout同上,对于3 dup ack让
CongWin
减半然后线性增长
RTT estimation
timeout的值需要准确设定: 不是常数(与网络拥堵情况有关); 必须比RTT长
如果timeout太长:slow reaction to segment loss
如果timeout太短:premature timeout, unnecessary retransmissions 过早超时
取多个Sample RTT取平均。
必须忽略retransmissions(retransmitted segments的回复不计入RTT,因为无法分清是原包回复还是重发包回复)
Exponential Weighted Moving Average (EWMA):
EstimatedRTT_t = (1-alpha) * EstimatedRTT_t-1 + alpha * SampleRTT
Timeout = EstimatedRTT + safety margin
safety margin也会变,与SampleRTT的方差有关