建议参考西安交通大学计网考后总结及复习资料汇总进行复习
本文是第一次复习时的整理资料,包括缩写名词解释,重要概念,重要算法,各种表以及报文协议
如需pdf,请在下方留言
缩写 | 英文 | 中文 |
---|---|---|
PSTN | public switch telephone network | 打电话网络 |
NAP | network access port | 网络接入点 |
ISP | Internet Service provider | 网络服务商 |
RFC | Request For Comment | 征求意见稿 |
IETF | Internet Engineering Task Force | 维护RFC的工程任务组 |
ADSL | Asymmetric Digital Subscriber Line | 非对称数字用户线 |
HFC | Hybrid Fiber Coax | 混合光纤同轴电缆 |
LAN | Local Area Network | 局域网 |
FDM | Frequency Division Multiplex | 频率复用 |
TDM | Time Division Multiplex | 时分复用 |
CDMA | Code Division Multiplex Access | 码分复用 |
ATM | Asynchronous Transmit Mode | 异步传输模式 |
PDU | Protocol Data Unit | 协议数据单元 |
ISO | Internet Standard Organization | 国际标准化组织 |
OSI | Open System Interconnection | 开放系统互联 |
RTP | Realtime Transfer Protocol | 实时传输协议 |
SMTP | Simple Mail Transfer Protocol | 简单邮件传输协议 |
HTTP | Hyper Text Transfer Protocol | 超文本传输协议 |
HTTPS | Hyper Text Transfer Protocol over Secure Socket Layer | 超文本传输安全协议 |
HTML | Hyper Text Markdown Language | 超文本标记语言 |
FTP | File Transfer Protocol | 文件传输协议 |
TFTP | Trivial File Transfer Protocol | 简单文件传输协议 |
SIP | Session Initialization Protocol | 会话初始协议 |
TCP | Transmission Control Protocol | 传输控制协议 |
UDP | User Datagram Protocol | 用户数据报协议 |
URL | Uniform Resource Locator | 统一资源定位器 |
URI | Uniform Resource Identifier | 统一资源标识符 |
RTT | Round Trip Time | 服务器和客户端间的往返时间 |
ASCII | American Standard Code for Information Interchange | 美国信息交换标准代码 |
CGI | Common Gateway Interface | 公共网关接口 |
pop3 | Post Office Protocol | 邮局协议 |
IMAP | Internet Mail Access Protocol | 网络邮件访问协议 |
MIME | Multipurpose Internet Mail Extension | 多用途网络邮件扩展 |
DNS | Domain Name System | 域名服务系统 |
RR | Resource Records | DNS的资源记录 |
TTL | Time To Live | 保留时间 |
NFS | Network File System | 网络文件系统 |
SNMP | Simple Network Management Protocol | 简单网络管理协议 |
DHCP | Dynamic Host Configuration Protocol | 动态主机配置协议 |
RIP | Routing Information Protocol | 路由信息协议 |
MSS | Maximum Segment Size | 最大段大小 |
EFCI | Explicit Forward Congestion Indication | 明确转发拥塞指示 |
AIMD | Additive Increase Multiplicative Decrease | 加性增乘性减 |
BGP | Border Gateway Protocol | 边界网关协议 |
OSPF | Open Shortest Path First Protocol | 开放式最短路径优协议 |
ICMP | Internet Control Message Protocol | 控制报文协议 |
MTU | Maximum Transmission Unit | 最大传输单元 |
CIDR | Classless Inter Domain Routing | 无类的域间路由 |
NAT | Network Address Translation | 网络地址变换 |
MAC | Media Access Control Address | 硬件地址 |
NIC | Network Interface Card | 网卡 |
CRC | Cyclic Redundancy Check | 循环冗余校验 |
CSMA | Carrier Sense Multiple Access | 载波侦听多路访问 |
CSMA/CD | Carrier Sense Multiple Access With Collision Detection | 带碰撞检测的载波侦听多路访问 |
CSMA/CA | Carrier Sense Multiple Access With Collision Avoidance | 带碰撞避免的载波侦听多路访问 |
ARP | Address Resolution Protocol | 地址解析协议 |
jpeg | Joint Photographic Expert Group | 联合图像专家组 |
ISDN | Integred Services Digital Network | 综合服务数字网 |
WAN | Wide Area Network | 广域网 |
MAN | Metopolitan Area Network | 城域网 |
WLAN | Wireless Local Area Network | 无线局域网 |
MPEG | Moving Picture Experts Group | 动态图像专家组 |
FSM | Finite State Machine | 有限状态机 |
IGRP | Interior Gateway Routing Protocol | 内部网关路由协议 |
RARP | Reverse Address Resolution Protocol | 反向地址转换协议 |
网络是由边缘(edge),内核(core)和链路(links)组成的
TCP的可靠性表示的是:数据不丢,到达顺序不乱,内容无差错
UDP和IP一样,都是best effert
传输
常见的应用架构有:C/S,P2P,二者的混合
三种接入方式:驻家接入网络,单位接入网络,移动接入网络
驻家接入包括:拨号上网(不能同时上网和打电话),ADSL(上行带宽窄,下行带宽宽),HFC(多家公用的),FTTH
单位接入包括:LAN,wifi(wifi是access point,基站是base station)
物理媒介:双绞铜线(Twisted Pair),光纤(Fiber),同轴电缆(Coaxial cable)
网络的三种交换方式:
电路交换:先拨号预留资源后上网,拨号上网
包交换(组交换):存储加转发模式,无需拨号,是一个端到端的交换方式,IP网络
虚电路交换:结合上面两种方式,先拨号预留资源,然后使用存储加转发模式进行数据传输,ATM,帧中机,X.25网络
每一个包头里都包括一个虚电路号,不包含目的地的IP地址,每过一个交换机虚电路号可能会变,虚电路上的每个交换机都会维护这个状态,新的虚电路号存在每个交换机的转发表上。
一个虚拟电路需要包括从发送端到接收端的路径,虚拟电路号,链路上的每个交换机上都要有转发表关于这个结点的入口
转发表是由路由选择计算器处理和更新的
拨号建立链路的协议是信令协议
分组交换网络的好处
分组交换网络的缺点
分组交换网络的延时
为什么会被丢包
TCP/IP五层模型及对应的PDU
OSI七层模型
进程通过一个称为**套接字(Socket)**的软件接口向网络发送报文和从网络接收报文,它是应用层与传输层的一个通信管道,二者之间的通信必须通过它,套接字需要传入四个参数:目的IP,目的端口号,源IP,源端口号
IPv6地址共16个字节,Ipv4地址共4个字节,MAC地址有6个字节
QoS参数:丢包率,实时性,吞吐率,安全性
如果不允许丢包并且对时间没有要求则可以使用TCP协议,如果要求可靠还要快,则可以建立多个TCP连接传输数据
HTTP是一个无状态协议,
请求报文由请求行、请求头,请求数据组成,响应报文由响应行、响应头、响应数据组成
网页缓存有四种方式
为什么需要网页缓存
使用FTP传输文件时需要建立两个TCP连接,带内控制(持久性连接)和带外传输(非持久性连接,每传完一个文件就关掉)
电子邮件三个主要组件:用户代理,邮件服务器(包括邮箱,消息队列,SMTP),SMTP
SMTP是电子邮件的核心,用于从发送方的邮件服务器发送报文到接收方的邮件服务器,使用TCP协议进行可靠性传输,传输分为三个阶段:握手,传输,关闭;
SMTP与HTTP的异同
MIME:多用途网络邮件扩展,是扩展的SMTP,不仅支持了ASCII,同时还支持了很多种其他的编码格式(文本,图像,音频,视频等)
DNS
搜索引擎
传输层服务
UDP
TCP
ATM提供的四种业务(只有ABR有拥塞控制)
网络层的两个重要功能:转发和路由选择
对于IPv4的网络来说,没有呼叫建立的过程,传输的过程中可能会走不同的路径到达接收端,每次走的路径长短可能不一样,所以会出现乱序
路由器的每个端口既是输入端口也是输出端口,中间是一个交换结构
路由器的两个主要功能:
路由器的网络层是去中心化的交换,给定数据报的目的地,在转发表上寻找输出端口;目标是以line speed完成输入端口处理(也就是路由器内部的最大带宽);如果数据包到达的速度比转发到交换机结构的速度快,则会报数据存在输入端口的一个队列中
路由器的交换结构有三种类型
路由器的输出端口是输入端口的镜像,输入端口依次有三层:物理层,链路层,网络层,在网络层会有一个队列存储从链路层的帧中解出来的IP包,并且维护着路由表
输入端口的行头阻塞问题:当多个输入端口的包都要转发到同一个输出端口的时候不能同时转发,同一时间只能有一个端口转发,另一个仍然呆在队列中,导致排队队列后面的包无法移动,这种情况叫做行头阻塞
网络层在逻辑上可以分为两层:上层的路由协议和ICMP协议以及下层的IP协议
路由协议包括:路径选择算法,RIP,OSPF,BGP
ICMP主要用来错误报告和连通性检查
IP地址是主机的三十二位标识号,不是与主机对应的,而是与网络接口对应的,有几个网络接口就可以有几个IP地址,路由器往往有多个接口,所以一般有多个地址
32位地址分为网络部分(高若干位)和主机部分(低若干位),同一网段内的网络部分必须是相同的,主机部分不同,不同网段网络部分肯定不相同,具体多少位取决于网络的类型
什么是子网?有相同网络部分的IP地址,可以不经过路由器而到互相通信
一般计算子网的数量时可以把路由器直接拿走,有几个孤岛就有几个子网,只有线也算一个孤岛
IP地址总共分为4类
特殊地址
子网划分时会浪费一部分的IP地址,所以国内一般不进行子网划分,具体划分时需要减去全0和全1的地址,用于预留不能分配出去,比如三位的主机位只能分配给六个主机
IP地址被划分为三个部分:网络部分,子网部分,主机部分
DHCP
NAT:将多个假的IP地址映射到一个真的IP地址上面,通过不同的端口号区分
ICMP:主机和路由器用该协议在网络层交流信息,主要用于错误报告,请求和响应(ping)
IPv6
IPv4到IPv6的过渡
链路层的服务
链路层的实现
差错检查:要求发送端发送冗余信息
常见链路类型
多路访问控制:多个结点同时使用链路的时候需要处理冲突
理想的多路传输协议有四个要求:只有一个结点传数据的时候可以使用全部的带宽;多个结点共享带宽每个结点可以使用的带宽是相等的;需要尽可能的完全分散(不需要集中式控制器,没有同步的时钟);算法要足够简单
MAC协议,三种大的分类
信道划分:时分复用,频分复用,码分复用,波分复用,空分复用;比较适合高负载的情况
TDMA:每个用户分一个时间片,大约为发一帧数据的时间,大家轮流使用通道
FDMA:每个用户使用不同的频率发数据,例如WIFI和ADSL
随机访问:信道是随机划分的,允许碰撞,适合用户量比较少的情况
ALOHA:不分时间片,任意时间都可以发数据,碰撞的概率增加了。最大的利用效率为18%
Slotted ALOHA:分为大小相等的时间片,只允许在每个时间片开头发数据,如果检测到碰撞就都停止发送数据,在下一个时间片开头两个结点都有概率P重发数据,直到发送成功。最大利用效率为37%
CSMA,[CSMA/CD](# CSMA/CD)(用于有线网络),CSMA/CA(用于无线网络):在传输前需要感知信道是不是空闲,如果空闲了才发数据,否则就推迟传送
无法完全避免碰撞:有传播延迟;两个结点同时感知信道
Taking Turn:分布式轮询,集中式轮询。大家轮着使用,有一个结点(主节点)控制大家使用,当一个结点使用的时候其他结点不允许使用
集中式轮询(Polling from central site):主节点邀请其他结点传输数据,如果有数据就发,没有数据就继续问下一个结点
分布式轮询(token passing):适用于环形网络,使用Token控制传输,也称为令牌传输模式
MAC地址是48位的,烧在NIC的ROM中,不分层,不会重复,在出厂的时候就已经设置好了
不同主机间的通信需要维护一个***[ARP表](# ARP表)***
以太网(Ethernet)
802.3表示以太网,802.11表示wifi
以太网的技术类型:总线式;交换机;光纤方式;双绞线
互联设备
Hubs:
外表和宿舍的小交换机是一样的,是一个物理层的设备;
PDU是位,不需要转发,接收到的数据全部都广播出去(不能隔离碰撞域);
没有缓存,不运行CSMA/CD算法;
只要把网卡设置为混杂模式就可以收到信息,不够安全
数据采集时候比较方便
交换机:是一个链路层的设备,可以隔离碰撞域
处理的PDU是帧,帧全部接受完了之后才会进行处理并转发
是一个存储转发设备(优点:隔离碰撞域)
转发的时候需要维护一个***[MAC表](# MAC表)***,查询转发出口
检查传入帧的MAC地址,有选择地将帧转发到一个或多个传出链路
交换机上运行着***[过滤转发算法](# 过滤转发算法)***
交换机和路由器的比较
核心:丢包(表示的是数据包)重传
TCP的可靠性是牺牲时间换来的,所以是实时性很差
发送的初始段序号是随机选的0-65535之间的整型值,后一个段的段序号等于前一个段的段序号加上数据域的长度(单位:字节)
传输层发送的TCP段在接收端确认收到之前都需要放在缓存中存起来,需要三个变量来维护:
如果Sequence number - send_base = n,则说明缓冲区已经满了
使用有限状态机来描述算法,这里是一个简化的控制算法,先考虑半双工,发送端只发送,接收端只确认,不考虑流量和拥塞控制
最左侧的虚线箭头表示开始,此时 send_base = nextseqnum = initial_sequence number
顺时针方向依次介绍各事件:
快速重传:发送端在收到三次一样的ACK之后,无论计时器是否结束,立即重传对应的段
对应的伪代码:
sendbase和nextseqnum开始时候是重合的,表示缓冲区是空的
第一个event,这里少了一句,检查窗口满不满,不满才发,满了就拒绝发送,一定要加!,如果没满,就创建一个段,每发一个段就要启动一个计时器,计时器的值可以是一个RTT,启动之后把这个段传送到IP层,然后修改nextseqnum的指向
第二个event,计时器超时
发出去了但是确认信息没回来,这时候超时了,此时要重传,这里需要重新计算计时器的超时间隔(是一个新的小[算法](# 计时器间隔更新算法)),重新计时
第三个event,收到了ACK
如果y>sendbase(y是ACK),说明发送窗口内y之前的所有段都已经收到了,此时可以取消段y之前的所有计时器,然后将sendbase指向y
else表示y=sendbase,记接收到y的段序号的计数器+1,如果加到3了,此时直接重传段y,然后重新启动计时器
计时器的初始值为RTT
为了保证传递到应用层的段与发送时的顺序一致,在接受到发送的段之后需要放入缓存中存起来,需要两个变量来维护
ACK中的号是期待的段的段序号
避免发送速度过快导致超出了接收端的缓存区大小导致丢包,所以需要控制发送端的发送速度与接收端的接受速度尽量一致
接收端需要维护两个变量
TCP段头中有个字段表示接收端缓存的空间大小,接收端把当前的RcvWindow发给发送端。发送端需要保证发送的数据量一定小于等于这个空闲的空间
主机B必须保证:
**接收窗口大小 = 接受缓存大小 -(缓存中最后一个字节的编号 - 被读走的最后一个字节的编号):**RcvWindow=RcvBuffer-[LastByteRcvd-LastByteRead]
接收端:显式地通知发送者(动态改变)可用缓冲区空间的数量
主机A必须保证:
LastByteSent-LastByteAcked<=RcvWindow
发送端:主机A已经发送但未被确认的数据量少于最近一次收到的RcvWindow
当最近一次收到的RcvWindow=0时,发送端仍然要发送小的段,数据域只有1个字节,(总共21个字节,头是20字节),如果接收端有空间,就会有ACK传回来,就知道目前有多大的剩余空间,哪怕接收端无剩余空间,把这个段丢掉,也会返回一个ACK回来,这样就可以得知目前有多大的空间
有点问题是, t 1 t_1 t1是发送的数据的数据量是根据 t 0 t_0 t0时刻的容量决定的,但是到达接受端的时候是 t 2 t_2 t2时刻,此时(至少经过了一个RTT)已经处理了很多数据,所以发的容量比较实际应发的数据量会少,可以采用预测的方法解决这个小问题
主要是三次握手,四次挥手
另外可以看看这篇***博客***中的内容
3次握手
本质就是交换初始序列号
有些攻击在发完请求之后就不再回复,服务器一直开辟空间,占用CPU时间,这种叫做半连接攻击(是一种
DoS
攻击, deny of service,拒绝服务攻击)(DDos,分布式拒绝服务攻击)
关闭基本上是四次挥手
客户端找服务器,然后服务器找客户端
为了缓解路由器的拥塞,从拥塞回到不拥塞,防止其丢包,最好是工作在转发效率高并且队列没有满,让其传输的每个数据包都是有效的数据包,这样效率非常高
一种是拥塞信息直接反馈到发送端;另一种是消息反馈到接收端,接收端再发送给发送端,但是我们的互联网是瘦内核,胖端系统,路由器仅仅保持了最基础的转发功能,剔除了复杂的功能,因此使用的是第二种方法
如何确认当前的网络拥塞状况?
这两种情况都会降低发送速率,其他情况都会加快发送速率
下面两个方法加起来是TCP的拥塞控制方法,称为两阶段法
两个重要变量
threshold:阈值,初始值可以根据经验设定,后面会根据网络的实际情况自动改变
拥塞窗口的大小:开始为1,然后一直乘2,到达阈值之后加1
每接收到一个ACK之后,自+1,这样每一波发送完了之后都会翻倍
每确认w个段窗口窗口大小才加一,w为上一次窗口大小
如果有丢包发生,则设置阈值为当前窗口大小的一半,并且把窗口的大小改为1,然后跳到慢启动阶段,重新开始
上面这个算法直接全部降到一有点过度了,对于轻度拥塞网络没必要
分为轻度拥塞和重度拥塞
如果是超时造成的丢包,此时是重度拥塞,窗口大小置为1
如果是三次收到重复的ACK,此时是轻度拥塞,窗口大小置为当前大小的一半
只有超时了才会回到慢启动阶段,收到三个重复的ACK时会到快速恢复阶段
还缺个东西没有处理
快速恢复阶段发了之后又收到三个重复的确认段,在图上没有体现出来,应该有一个指向自己的箭头
平均窗口大小为 0.75 W R T T \frac{0.75 W}{RTT} RTT0.75W,W是丢包时的窗口大小
吞吐量: 1.22 M S S R T T L \frac{1.22 MSS}{RTT\sqrt{L}} RTTL1.22MSS,L是loss rate, L = 8 3 w 2 L = \frac {8}{3w^2} L=3w28
计时器的间隔反映的是未来的网络状况,需要能够与未来网络的繁忙情况匹配,最好比一个RTT大一点
注意:RTT会变化
主要使用下面三个公式计算:
T i m e o u t = E s t i m a t i e d R T T + 4 ∗ D e v i a t i o n E s t i m a t e d R T T n = ( 1 − α ) ∗ E s t i m a t e d R T T n − 1 + α ∗ S a m p l e R T T D e v i a t i o n n = ( 1 − β ) ∗ D e v i a t i o n n − 1 + β ∗ ∣ S a m p l e R T T − E s t i m a t e d R T T ∣ Timeout = EstimatiedRTT + 4*Deviation\\ EstimatedRTT_n = (1-\alpha)*EstimatedRTT_{n-1}+\alpha * SampleRTT\\ Deviation_n = (1-\beta) * Deviation_{n-1} + \beta * |SampleRTT - EstimatedRTT| Timeout=EstimatiedRTT+4∗DeviationEstimatedRTTn=(1−α)∗EstimatedRTTn−1+α∗SampleRTTDeviationn=(1−β)∗Deviationn−1+β∗∣SampleRTT−EstimatedRTT∣
下面两个式子名字叫做指数型的加权平均运动,是一个预测公式,比实际采样值平稳很多
一般 α \alpha α取值为0.125, β \beta β的取值为0.25
偏差值反映了网络的忙闲状况,波动大的时候变差大,波动小的时候偏差小
LS算法
Intialization:
N' = {u}
for all nodes v:
if v adjacent to u:
D(v) = c(u,v)
else:
D(v) = inf
Loop
find w not in N' and D(w) is minium
add w to N'
update D(v) for all v adjacent to w and v not in N':
D(v) = min(D(v), D(w) + c(w,v))
until all nodes in N'
DV算法
# for each node X
Initialization:
for all destination nodes y:
if y is a neighbor:
Dx(y) = c(x,y)
else:
Dx(y) = inf
for each neighbor w:
Send distance vector Dx = [Dx(y): y in Neighbor] to w
loop
wait (until I see a link cost change to neighbor w or until I receive update from neighbor w)
for each destinations y:
Dx(y) = min {c(x,v) + Dv(y)}
if Dx(y) changed for any destination y:
send new value of min Dx(y) to all neighbors
forever
首先发送端与接收端会约定一个generator,假设有r+1位(一般都是32位)
将要发的数据左移r位之后除以generator,得到的余数称为CRC
注意,这里的除法使用的是模二除法,没有借位,10-01=11
将得到的CRC拼接在原始数据的后面发送到接收端,接收端收到之后连通余数一起除以generator,如果没有差错的话,最后得到的余数就是0
generator是多少位就可以检测出来多少位的错误,检测到错误之后直接取反就是正确诗句
例子:
generator:1001
Data:101110
Data左移三位为:101110,000,除以generator得到余数011,拼接到Data后面发送到接收端
发送到接收端的数据是101110,011
Carrier Sense Multiple Access Collision Detection,带碰撞检测的载波监听的多路访问
A: sense channel
if idle
then {
transmit and monitor the channel;
If detect another transmission // 检测到碰撞,检测到碰撞电平就会升高
then {
abort and send jam signal;// 停止发送数据并且发送一个堵塞信号
update collisions; // 更新碰撞次数,刚开始发的时候一定是0
delay as required by exponential backoff algorithm; // 延迟做规避,延迟时间是指数型的backoff算法,依据是碰撞次数
goto A// 重新侦听信道
}
else {
done with the frame; // 数据传输完成
set collisions to zero // 清空碰撞计数器
}
}
else {wait until ongoing transmission is over and goto A}
对于10Mbps的以太网来说,传输一位的时间是1微秒,如果K=1023,传输时间是50ms
Jam Signal:确保所有的传输都可以收到碰撞信号,有48bit
理想情况下效率接近于1,
链路的控制方式是分散式的
if entry found for destination
then {
if dest on segment from which frame arrived// 如果目的MAC地址和源MAC地址在一个interface就直接扔掉
then drop the frame
else {
CSMA/CD // 运行CSMA/CD算法检查是否有碰撞
forward the frame on interface indicated// 转发帧到目的端口
}
}
else {
CSMA/CD // 运行CSMA/CD算法检查是否有碰撞
flood // 广播
}
根据虚电路号和到来的端口确定出去的端口和虚电路号
根据IP地址确定输出端口,匹配使用的是最长前缀匹配原则,简称最长匹配原则
网络地址转换表
用于真假地址变换,使用端口号区分不同主机的不同端口的消息
每一行的内容是假的IP地址和端口号,真IP地址和端口号,发出去的时候把假的IP地址和端口号转换为真IP地址和端口号,回来的时候需要再换回来,进出时候IP包的内容都发生了变换,通信效率下降(需要上到第四层传输层才可以更换端口号,上到第三层更换IP地址)
内网可以使用的假IP端口号有16位,所有NAT表的容量可以有6万多条记录
所有结点在网络层和链路层之间维护了一个表,叫做ARP表,记录了IP地址和MAC地址的对应关系
ARP是动态的,有一个TTL,如果在TTL时间中没有被访问过,就会删掉这个记录,通常为20min;初始时这个表是空的
记录格式: < IP address; MAC address; TTL>
ARP是工作在局域网中的,不能跨路由器,也就是说ARP表中只会记录当前网段中的个主机的MAC地址,如果需要发送到其他网段则需要使用路由器上的ARP表进行查询
路由器上每个端口都有一个ARP表
当ARP表中没有一个IP的MAC地址的时候,会在局域网中进行广播,询问MAC地址,这时候目的主机会返回自己的MAC地址
然后发送到目的主机之后先CRC检查差错,没有问题就解帧变成IP段,然后继续向上传输
目的:主机A要发数据到主机B
也叫交换表
每个交换机都维护一个交换表
当Flooding之后,会把端口号和传出端口记下来,这个过程就是一个自学习过程
传入和传出的时候都会记录在表里面
有定长的40字节的header
不允许碎片(也就是IPv4中的包切片),如果帧太小了放不下了就会扔掉,然后返回一个ICMP报文,通知发送端把包弄小一点重新发送,因为包切片会导致速度变慢