第一章
因特网
“网络的网络”
协议
Protocols define format, order of messages sent and received among network entities, and actions taken on message transmission, receipt
协议是为进行网络中的数据交换而建立的规则、标准或约定。
组成要素:
- 数据与控制信息的结构或格式。
- 需要发出何种控制信息,完成何种动作以及作出何种响应。
- 时间实现顺序的详细说明。
Routers and link-layer switches
它们两个都是拿来把数据包发送到它们的目的地去的。但是,数据链路层交换机是用在接入网内的,而路由器是经常被用在网络核心中的。
ISP
一个ISP就是一个提供互联网入口的组织。Internet service provider.
Circuit Switching & Packet Switching
电路交换
电路交换是一种实现电子通信网络的方法,在电路转换中两个网络节点可以在通信之前通过网络建立专用信道。这样的电路在工作时就好象节点两端之间连接着实际的电路。
资源被分割成许多份。如果资源片没有被使用,就是空闲的,并不会分享给其他有需求的。也就是说资源是配额的。
分组交换
分组交换是一种数字网络的通信方法。这个方法并不考虑数据的内容,类型,或者结构,只是简单地整合所有需要传输的数据,然后把它们变成大小适合的块,也就是所谓的数据包。
每个端到端的数据流都被划分成很多数据包了。所有用户共享网络资源,每个人都能用到完全的带宽,因而网络资源是按需分配的。
比较
分组交换的批评者称它是不适合实时通信服务的。
分组交换的支持者认为它提供了相比电路交换更好地带宽,而且它更简单,更加高效,实现起来更加简便。
为什么分组交换更加高效? 因为它按需分配资源,这也被称为统计复用.
FDM & TDM
这两个复用都是属于电路交换的。
Delay
d n o d a l = d p r o c e s s + d q u e u e + d t r a n s + d p r o p a g a t i o n d_\mathrm{nodal} = d_\mathrm{process}+d_\mathrm{queue}+d_\mathrm{trans}+d_\mathrm{propagation} dnodal=dprocess+dqueue+dtrans+dpropagation
吞吐率(计算题)
单位bps
。实际上就是两个端点之间的路径的最小传输速率。
第二章
HTTP
- 格式
- 持久/非持久HTTP协议
- Cookies
- 代理服务器,缓存和Conditional GET
- 统一资源定位器
- Stateless,不存储客户机状态
FTP
- state about user
- 2 TCP connections.
- Control
- Data
E-Mails
SMTP, POP3, IMAP
DNS
作用包括
- 主机地址到IP的映射
- 主机别名
- 负载均衡
TCP有哪些特性
- 可靠数据传输
- 拥塞控制
- 全双工
- 面向连接
TCP报文段格式
长度至少20字节。
头部包含
- 源端口号,目的端口号
- seq号
- ack号
- 首部长度,这是因为下面有Options&padding
- ACK: Acknowledgment
- SYN: Synchronize sequence numbers,用于初始化TCP连接
- FIN: Terminate the connection
- 接受端的窗口大小,是给流量控制用的
- checksum: 整个报文段的校验和
服务的TCP/UDP表
服务 | 传输层协议 |
---|---|
TCP | |
远程控制 | TCP |
Web | TCP |
FTP | TCP |
流式媒体 | UDP或TCP |
网络电话 | UDP或TCP |
路由协议 | 基本上是UDP |
域名到IP地址映射 | 基本上是UDP |
TCP可靠传输
可靠传输的要点
- checksum
- ACK
- SEQ
- 计时器
- 快速重传
- 流水线
TCP中SEQ的意义
TCP对message部分的每一个字节进行编号。对于每个TCP包而言,seq里面的值是message部分起始字节的编号。
byte stream “number” of first byte in segment’s data
“我给你的数据包的序列号”
TCP中ACK的意义
“我希望从你那里收到的下一个数据包的序列号”
注意,TCP的ACK跟回退N的ACK意义不同。
TCP的 A C K = n \mathrm{ACK} = n ACK=n代表的是编号 0 ≤ i < n 0 \le i < n 0≤i<n的数据包已经全部收到。
GBN的 A C K = n \mathrm{ACK} = n ACK=n代表的是编号 0 ≤ i ≤ n 0 \le i \le n 0≤i≤n的数据包已经全部收到。
TCP, UDP和IP的checksum
IP的checksum用于校验IP头的数据是否正确,
TCP和UDP的checksum用于校验整个TCP/UDP报文段的数据是否正确。
快速重传的目的
减少因为定时器等待时间过长而导致的延迟
TCP流量控制
目的
通过调节发送端发包速率,防止或者是避免接收端缓存溢出。
怎样进行流量控制
核心是控制TCP发包的窗口大小 N N N。
流量控制和拥塞控制的区别
流量控制只考虑接受端而不关注网络。可能发送端太快而接受端太慢,并不考虑中间网络的拥塞情况。(也就是假装网络部分很ok)
而拥塞控制就是不关注接受端,而关注网络本身,像是网络里面的路由器。
TCP拥塞控制
什么时候会产生拥塞
- 时延巨大的时候
- 资源的浪费
怎样进行拥塞控制
超时则直接把拥塞窗口大小削成1,阈值设成超时前发送窗口的一半。
碰到三重ACK就把阈值设成当前值的一半,然后把当前值设成阈值。
第三章
Internet的服务模型是best effort,也就是不能够保证一定会送到。
路由算法
路由算法有哪些呢
RIP, OSPF, BGP
路由器协议通常是在哪一层实现的?
虽然提供的是网络层的服务,但是实现却是在应用层。
IP数据包
IP数据包格式
头部至少20个字节,因为存在options选项。
checksum只有IP首部的原因是TTL,因为每到一个路由器就得重新计算一次,如果是整个数据包的checksum的话就会使得计算量特别的大。
为什么IP有分段
因为每段链路可能是不同的,比方说一段是Ethernet,下一段就是WiFi,它们能够传送的最大的数据包的大小是不同的。这个最大的可以被传送的数据单元的大小被称作MTU(Max transmission unit)
IP分组头中与分段有关的域
Total Length: 本分段的长度
Identification: 属于同一分组的分段有相同的Identification
DF: 如果置1,则不允许分段。如果分组长度大小大于MTU,则抛弃。
MF: 如果置1,说明不是最后一个分段。
Fragment Offset: 本分段中的数据相对于分段前的分组中数据的位移,单位是8个字节。
怎么进行分组
假定现在一共有 x x x字节的数据,目标数据包的大小为 y y y。
首先要明确,填入的数据包必须是8的倍数,否则就凉了。
所以大小应该是 s i z e f r a g = ⌊ y − 20 8 ⌋ ⋅ 8 + 20 \mathrm{size_{frag}} = \displaystyle \bigg\lfloor\frac{y-20}{8}\bigg\rfloor\cdot 8 + 20 sizefrag=⌊8y−20⌋⋅8+20。
然后应该一共有 ⌊ x − 20 s i z e f r a g − 20 ⌋ \displaystyle\bigg\lfloor\frac{x - 20}{\mathrm{size_{frag}} - 20}\bigg\rfloor ⌊sizefrag−20x−20⌋个这样大小的数据包。
最后一个数据包的大小应该是 x − ⌊ x − 20 s i z e f r a g − 20 ⌋ ⋅ ( s i z e f r a g − 20 ) x - \displaystyle \bigg\lfloor\frac{x - 20}{\mathrm{size_{frag}} - 20}\bigg\rfloor \cdot (\mathrm{size_{frag}} - 20) x−⌊sizefrag−20x−20⌋⋅(sizefrag−20)。
Offset应该怎么填
offset是 ⌊ y − 20 8 ⌋ \displaystyle \bigg\lfloor\frac{y - 20}{8}\bigg\rfloor ⌊8y−20⌋的倍数。这个同样也会影响到上面的公式。
特殊IP地址及其含义
0.0.0.0表示This host
网络部分全0,剩下部分有数字,说明的是在这个子网内的IP地址。
255.255.255.255表示广播
网络部分保留,后面全1,说明是在这个子网里进行广播。
什么是DHCP协议
DHCP协议是动态主机配置协议,主要做的事情是动态分配IP地址。
为什么四次的dest都是广播
第一次因为不知道DCHP服务器是哪个,第二次是服务器不知道是哪个ip问的,第三次是因为可能有多个服务器给这个电脑发IP,所以确认的时候也要告诉其他DCHP服务器,第四次是因为要让其他服务器也知道这个IP地址给了这台电脑。
DCHP request是广播其实也就是告诉其他DCHP服务器,我没有接受你们的DCHP offer.
IPv6和IPv4的差别
- IPv6的首部变成了固定的长度。
- 字段数减少到了8个。
- 取消了首部校验。
- 从1<<32转变为1<<128的IP地址范围。
- 4只能单播,6可以组播和任播。
路由器只处理基本首部。
单播,组播和任播
单播: 传统的点对点通信。
组播: 一点对多点的通信。
任播: 任播的目的地是一组计算机,但是通常只交付给距离最近的那个计算机。
IPv6和IPv4要怎么兼容呢?
- Dual stack,双协议栈
- 隧道技术
CIDR和Classful Network
CIDR使用一个斜杠来划分子网地址和主机地址。
Classful Network通过检测最前面几位来判定是哪一个class的地址。
路由算法和协议
路由算法有哪两个
Link-State和Distance-Vector
路由协议有哪些,分别采用哪些算法
路由协议 | 算法 |
---|---|
RIP | DV |
OSPF | K |
RIP和OSPF都是自治系统(Autonomous System)内部的协议,
BGP协议是自治系统之间的。不提供开销信息,只提供是否可达。
第四章
广播和组播的区别
- 都是一个发送端多个接受端但是可以理解为广播是一对所有,组播是一对一组。
- 广播只能在子网里面搞,不能穿越路由器; 组播是可以穿越路由器的。甚至接受端可以来自不同的子网。
如何实现组播
用生成树的方法,只要生成树覆盖了组里的节点就可以了。
其实跟广播差不多,广播是子网里面建一颗生成树。
- 基于源端的树
- 最短路径树(Dijkstra树)
- 反向路径转发
- 组共享树
- 最小生成树
- 基于中心的树
CRC怎么确定左移多少位
根据生成多项式的长度。假设生成多项式的长度为 r r r,那么就左移 r − 1 r - 1 r−1位。