计网复习
Application layer
HTTP概况
- HTTP uses TCP
- HTTP is stateless
Persistent/Non-persistent
- 分别对应1.1和1.0
- non-persistent: n* (2RTT+transmission time)
- persistent: 一个TCP发送多个对象
- persistent + non-pipeline: n* (RTT+transmission time)
- persistent + pipeline: RTT + n* transmission time
HTTP请求报文
- body(实体行)请求报文通常没有,也可以用来放参数
HTTP响应报文
- body可以为空
cookies
含义:用户-服务器状态——4个组成部分
- HTTP响应报文有一个cookie的首部行-服务器状态;
- HTTP请求报文有一个cookie的首部行-客户端状态;
- 用户端系统存储cookie文件,用于浏览器管理;
- 在Web站点维护一个后端数据库存各客户cookie。
Web caches
目标:不访问原始服务器,就满足客户的请求。
代理服务器将内容缓存下来,客户之间请求代理服务器。命中直接返回——客户端快,服务器端负载轻,网络负担也减弱。未命中继续请求原始服务器。
FTP
端口21,stateful
SMTP
- 命令/响应报文:ASCII码,包含状态码和状态解释。报文必须为7位ASCII码
- 持久连接
- 与HTTP比较:
- 相同:都是ASCII形式的命令
- 区别:HTTP拉,SMTP推;HTTP一次响应报文至多一个对象,SMTP同时把所有对象打包;HTTP有非持久连接模式。
DNS
- 树状结构,域名用.分隔
- 域与物理网络无关:(域的划分是逻辑的)
- 一个域的主机可以不在一个网络
- 一个网络的主机不一定在一个域
- Local Name Server有缓存直接返回
- 递归查询:根服务器负担太重。
- 迭代查询:根(及各级域名)服务器返回是下一个Name server的地址。学到以后可以缓存下来。
- 查询和响应报文格式相同
- 缓存:学到就缓存,TTL
- 使用UDP
P2P
- 节点可以selfish/altruistic
- 服务越多性能越好
Transport layer
多路复用与解复用
- TCP socket一个整数包含四元组、UDP socket一个整数包含二元组。
- TCP往下交两个东西:socket、数据内容。
- UDP要多交一个东西:目标端口+IP。
- connectionless demultiplexing: UDP
UDP
header:两个端口,长度(bytes,包括header),checksum
reliable data transfer
-
Rdt1.0
在可靠信道上的可靠数据传输
下层的信道完全可靠:
- 发送方:接收上层、封装、发送下层。
- 接收方:接收下层、解封装、交给上层。
-
Rdt2.0
下层信道可能会产生反转出错:
- 确认(ACK)、否定确认( NAK):发送方收到NAK后,发送方重传分组。
- 采用差错控制编码进行差错检测(EDC的用处):差错控制编码、缓存->检错->反馈->相应的动作。
状态有所增加:
- 发送方:接收上层、封装、发送下层->等待对方反馈(NAK始终发旧的,ACK返回初始状态)
- 接收方:接收下层、没出错、解封装、交给上层、发送ACK;接收下层、出错了、发送NAK。
-
Rdt2.1
ACK/NAK可能出错、丢失。
发送方在每个分组中加入序号
仅需要0和1两个序号
丢掉重复
-
Rdt2.2
无NAK,使用ACK0代替了NAK1,ACK1代替了NAK0
-
Rdt3.0
动机:分组可能丢失,接收方没有收到,互相等待陷入死锁
超时重传
-
pipelining:
-
GBN go back N
接收方窗口大小为1
-
SR selective repeat
接收方也有buffer
-
分组编号比特数为n时(序号空间大小),GBN协议最大窗口大小为2n-1,SR协议最大窗口大小为2(n-1)
-
TCP
-
header:
- 以字节为单位的序号(PDU第一个字节在整个字节流中的偏移量,32bit)初始序号不是从0开始的(防止冲突)
- 确认号:此处ACK表示对当前号及以后的分组的期待(例ACK 555表示收到了554及以前的-累积确认)
-
receiver ACK最新的序号,sender从收到最新的ACK开始发
-
快速重传:未超时就收到这个段的三个冗余请求——在定时器过时之前重发报文段
-
两次握手挑战:请求可能丢失、超时、乱序。
- 服务器响应重发的连接请求(维护了很多虚假的半连接)
- 重发的连接请求和连接数据都在响应完毕后到达,服务器又响应一整个虚假会话。
三次握手:分别给初始序号,给对方确认(其中两步可以复用),至少三次握手。第三次交互往往和第一次数据传递放在一起。
三次握手可以避免虚假半连接(发送请求方主动关闭)、避免重复响应(没有连接直接扔掉数据、新连接同时开启——初始序号的作用,可以筛选掉老的数据)
-
flow control
通过接收窗口告诉发送方空闲尺寸,用于让发送方控制
receiver controls sender, so sender won't overflow receiver's buffer by transmitting too much, too fast\
RcvWindow= RcvBuffer-[LastByteRcvd - LastByteRead]
-
由于大多数防火墙配置为阻止UDP通信,因此将TCP用于视频和语音通信可以使通信通过防火墙
Congestion control
-
wasted capacity due to retransmissions
-
参照图片:
- CongWin<Threshold——指数增长
- CongWin>Threshold——线性增加
- 三个重复的ACKs——Threshold=CongWin/2,CongWin=Threshold(减一半),之后线性增加
- 超时事件——Threshold=CongWin/2,CongWin=1 (砍到1),进入慢启动阶段
-
Tahoe:每次都砍到1
Reno:3ACK砍到一半
-
W:发生丢失事件时的窗口尺寸,平均窗口尺寸3/4W,平均吞吐量3/4(W/RTT)
header大小
IP/TCP:20
IPv6:40
UDP:8
Network layer
关键功能
- 转发:输入接口转发到输出接口(局部功能)
- 路由:选择路径到达目标主机(全局功能)——算法、协议
数据平面、控制平面
- 数据平面:转发(依靠路由表)——本地。传统:地址+转发表;SDN:多个字段+流表。
- 控制平面:路由(生成路由表)——全局。传统:路由器中实现;SDN:远程的服务器实现。
- 传统方式分布式计算路由表,SDN两个平面分开
网络层和传输层连接服务区别
- 网络层: 在2个主机之间,涉及到路径上的一些路由器
- 传输层: 在2个进程之间,很可能只体现在端系统上
IP全部指标都无法保证,无法建立连接,ATM有连接
路由器
- 路由:路由处理器(运行路由实体软件)产生路由表
- 转发:输入端口、输出端口、交换机(根据路由表局部转发)——真实路由器端口既可以输入也可以输出
- 每个路由器设备涉及三层的数据:物理层、数据链路层、网络层。最多拆分到网络层。
- 不存在基于起点的转发,只存在基于目的的转发
输入端口
- 网络层实体排队,根据路由表,排到队头根据目标IP转发到对应主机。(SDN则查流表,执行对应操作)
- 为转发地址空间进行划分,不同地址空间转发到不同的端口。采用最长地址前缀匹配的目标地址表项。
switch fabric(交换结构)
-
存在队列缓冲的原因:存在头部阻塞(Head-of-the-Line (HOL) blocking)如多入一出,匹配输入输出速率瞬时不一致性。
-
局部交换速率要n倍于发送速率(n为输入输出端口个数)
-
三种结构:memory/bus/crossbar(纵横)
输出端口
- 网络层:排队,排到队头转发,交给链路层网卡。
- 存在buffer原因:交换结构速度和输出端口瞬时速度不一致。溢出则会被抛弃掉。
- 存在调度规则,不一定先来的先发(保证对某些应用服务质量的支持)。
- 建议buffer大小:rtt*c/sqrt(n)
IP
- 大的IP数据报在网络上被分片,需要在接收端重新拼接起来,不同片可能经过不同的路径。有某一片(Fragment)没到,所有片全部丢弃。
- 相同的ID,表示属于同一个分组,不同的偏移量,表明这一片在分组中的位置
- offset计算方式:8字节一个偏移量,注意去掉header计算
- 最后一个fragment,flag = 0,否则=1
- 路由器IP地址一般有两个或两个以上IP地址
- 子网:通过交换机物理连接,不经过路由
- CIDR:a.b.c.d/x 某一范围的ip
- 子网掩码:32位,1代表网络号,0代表主机号
- 内网:永远不会被当做公用地址来分配,路由器也不会转发这些IP的分组。
- Class A 10.0.0.0-10.255.255.255 MASK 255.0.0.0
- Class B 172.16.0.0-172.31.255.255 MASK 255.255.0.0
- Class C 192.168.0.0-192.168.255.255 MASK 255.255.255.0
DHCP
- 允许主机在加入网络的时候,动态地从服务器那里获得IP地址等信息
- 刚开始源地址0.0.0.0表示本机,目标地址255.255.255.255广播。可能有多个DHCP所以还需要第二次握手确认
- 运行在UDP之上
- 两次交互:
- 主机广播寻找DHCP服务器
- DHCP 服务器响应
- 主机请求IP地址
- DHCP服务器发送分配的IP地址、子网掩码、DNS服务器IP地址、默认网关(first-hop)服务器IP地址的四项信息
路由聚集
- 子网路由器向主网路由器发布通告,表明该路由器就是该子网前缀的下一条。
- 主网路由器向自己的ISP发布路由通告,综合多个路由信息向外发布
- 最长前缀匹配
- 聚集可以有效减少路由通告的数量,节约资源与计算代价。
- 不同子网掩码也可以使用同一个路由器进行聚集,如公司收购的情况,通告加入不同表项即可。
NAT
——内部有内网地址,在互联网共享一个外网地址,记录每台设备的分组对应于外网的端口即可。
动机:1.省钱(IP不够用),2.可以方便更改内部IP,3.可以更改ISP,而不用改内网IP,4.外部看不到内网情况。
IPv6
-
IPv6不允许分片,128位地址,40 字节头部。分组太大了发送错误报告让源主机自己切分。
-
迁移:逐步升级,不能设置flag day。
-
Tunneling:在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
IPv6 datagram carried as payload in IPv4 datagram among IPv4 routers
Openflow
- 流: 由分组(帧)头部字段所定义(广义的分组)
- 流表的表项结构:
- Rule(规则、模式):十几个字段
- Action(行动):各种操作
- Stats(状态、计数):基于包、基于字节
LS
- 可能会造成震荡(ocsillations)。最快路径都去选择,下一周期就会拥塞
- 时间复杂度O(n^2)(nlogn)
- message complexity:O(n^2)
DV
- 好消息传的快:好消息的传播以每一个交换周期前进一个路由器 的速度进行
- 坏消息传的慢:断线会形成环路,每次迭代代价+1,无限次之后, 到A的距离变成INF,不可达
- LS 和 DV 算法的比较
- 消息复杂度:DV传输的少,更优
- 收敛时间:LS更短,更优
- 健壮性:路由器故障时LS更健壮——错误信息影响较小
RIP
使用UDP
AS
层次路由:“autonomous systems” (AS)
-
将互联网分成一个个AS(路由器区域)
-
- 一个AS用AS Number (ASN)唯一标示
- 一个ISP可能包括1个 或者多个AS
-
每个区域内采用自己的路由协议算法
-
自治区域之间运行AS间路由协议
BGP
互联网AS间路由:BGP
——BGP (Border Gateway Protocol):边界网关协议-将互联网各个AS粘在一起的胶水
-
两种方法:
a. eBGP(相邻的ASes那里获得子网可达信息
b. iBGP(将可达信息传遍到AS内部的所有路由器)
-
BGP 会话:两个BGP路由器(peers)开机就建立半永久TCP连接,交换BGP报文,通告向不同目标子网前缀的“路径”——“路径矢量”协议,包含每一步到达子网X的跳数序列。
-
路由表项是由AS内和AS间的路由共同决定的。
-
hot potato:尽快送出去,不操心域间代价
-
由于 BGP 路由中包含AS-PATH属性, 所以如果 BGP 对等体收到一条在 AS 路径中包含其自己的 AS 编号的路由,则使用该路由将导致环路,可以检测环路
ICMP: 因特网控制报文协议
- 由主机、路由器、网关用于传达网络层控制信息:错误报告、Echo 请求和回复(ping)
SNMP
——自治系统(autonomous systems AS)的管理
Link Layer
terminology
hosts, routers: nodes
connect adjacent nodes along communication path: links
-
wired , wireless
-
LANs
layer-2 packet: frame
网络适配器
NIC,链路层大部分功能在硬件(Network Interface Controller)中实现,小部分在CPU上的软件中实现,因此链路层是硬件和软件交接的地方
services
- framing(成帧)
- link access(链路接入)
- reliable delivery between adjacent nodes
- error detection/correction
error detection, correction
-
奇偶校验:校验位
-
二维奇偶校验:多加一行和一列
-
Internet checksum:加起来,进位加到末尾,取反
-
Cyclic Redundancy Check:
发送D,计算\(R = \frac{D*2^r}G\), 接收者检验<D,R>是否能被G整除
multiple access protocols
TDMA/FDMA
时分多路/频分多路
TDM/FDM缺陷:unused的时间帧/带宽被浪费了
Random access protocols
碰撞时等待一个随机时延,然后重发
-
Slotted ALOHA
每个时隙以p的概率重发
efficiency定义为:有大量的活跃节点,长期运行成功时隙的份额
Slotted ALOHA效率为\(Np(1-p)^{N-1}\)
N趋近正无穷时,且取极值点p*,效率为\(1/e\) = 0.37
decentralized, poor efficiency
-
ALOHA
非时隙,效率为1/2e = 0.18
-
CSMA
载波侦听Carrier Sense Mutiple Access
listen before transmit
-
CSMA/CD
检测到碰撞后,等待一个随机时间,然后停止传输
以太网等待K*512比特时间,K~(0,2^n-1),越来越长
efficiency:\(\frac{1}{1+5d_{prop}/d_{trans}}\)
“Taking turns” MAC protocols
- polling protocol(轮询协议):主节点依次 poll 每个节点,告诉每个节点最多传多少帧(蓝牙协议使用这个)
- token-passing protocol(令牌传递协议):没有主节点,令牌交换,持有令牌才能传输
DOCSIS
电缆因特网接入,使用很多的协议
MAC Address
也称为LAN address,physical address
MAC地址有48位(6字节)
MAC地址是对应适配器(网络接口),因此一个主机可以有多个MAC地址,没有两个适配器具有相同的地址
一个接口对应一个MAC地址和一个IP地址
广播地址(所有适配器都接收):48个1,即FF-FF-FF-FF-FF-FF
移动时IP地址改变,MAC地址不变
Address Resolution Protocol
地址解析协议,ARP,为同一个子网上的主机和路由器接口解析IP为MAC
ARP表包含三列,IP地址,对应的MAC地址,TTL(寿命值)
ARP查询用广播地址(全1)查询子网所有接口,然后响应报文用标准帧发回
发给子网外,先用ARP查子网内路由器地址,然后路由器转发给子网外的适配器,再在目的子网中ARP查询目的MAC地址
Ethernet
以太网帧结构:
- preamble(前同步码,8 byte,用于区分噪音和数据进行同步,确认clockrate
- dest address(6 byte)
- source address(6 byte)
- type(2 byte,网络层协议类型)
- data(46~1500 byte)
- CRC效验码(4 byte)
特点:
-
connectionless、unreliable(无回复)
-
MAC protocol: 使用CSMA/CD来共享广播信道
由于速度很快,几乎没有碰撞
switch
交换机,进行过滤和转发
交换机表,查询MAC地址对应的端口,也有TTL寿命
自学习功能,学习地址对应的端口,如果不知道对应端口就flood
路由器可以优化路由,交换机即插即用
Virtual LAN 虚拟局域网
motivation: 流量(广播)隔离,管理用户
- port-based: 某几个端口归入VLAN,只有这些端口之间可以互相访问,不同VLAN之间通过路由器访问
- VLAN trunking:用trunk(干线)连接的特殊端口互联不同VLAN
- 802.1Q frame:在dest address后新加2个2字节的VLAN标识符(一共4字节)
MPLS 多协议标签交换
- MPLS在IP header前插入MPLS header
- 只能在两个支持MPLS的路由器之间转发
- MPLS table:用入标签(线路号)来查询端口,快速转发
Others
802.11 帧
四个地址,地址1 receiver;地址2 sender;地址3 路由器接口MAC地址
RSA
- 两个大质数p,q,n = pq
- e与 (p-1)(q-1) 互质,选择d使得 ed-1 = k(p-1)(q-1)
- 公钥(n,e),加密m,得c = (m^e) mod n
- 私钥(n,d),解密(c^d) mod n = m
security
- Confidentiality 保密:消息内容不可知
- Authentication 认证:消息来源身份可信
- integrity 完整:消息是否被篡改
- Access and availability 可用性:消息服务是否可用
信道分配
- 两跳之间时间不同/颜色不同
- 同一个点连出去的边时间不同