文章目录
计算机网络
互联网发展有三个阶段:
- 单个网络结构ARPANET
- 三级结构的互联网
- 多层ISP结构的互联网
互联网服务提供者ISP。
互联网的拓扑结构从工作方式上来分可以分为边缘部分和核心部分。
网络边缘是由所有连接在互联网上的主机组成的。网络边缘的端系统之间的通信方式通常可以划分为客户-服务器方式(c/s)和对等方式(p2p)。其中p2p方式可以支持大量对等用户同时工作。
核心部分由大量网络和连接这些网络的路由器组成。在网络核心部分起到重要作用的是路由器,这是一个专用计算机,其作用是实现分组交换,转发收到的分组。
电路交换的过程:建立连接——通话——释放连接。电路交换在计算机通信中的缺点是线路的传输效率很低。
电路交换不行,就发明了分组交换来解决线路传输效率低的缺点。分组交换的思想就是将一个报文(要发送的整块数据)划分成几个分组(更小的等长分组)之后再进行传送,
数据传送阶段的交换方式总共可以分为三种:电路交换、报文交换、分组交换。
计算机网络的一些性能指标
速率
速率的单位是bit,就是一个二进制,有时用字节B来表示,一个字节有8个bit。
-
k=10^3
-
M=10^6
-
G=10^9
带宽
两种含义:
-
某个信号具有的频带宽度
-
在计算机网络中表示网络中某通道传送数据的能力。单位是bit/s
吞吐量
在单位时间内通过某个网络的实际的数据量。吞吐量收到网络的带宽和网络的额定速率的限制。
时延
发送时延、传播时延、处理时延、排队时延
往返时间RTT
对于卫星通信,RTT比较长,是一个重要指标。
利用率
利用率过高会导致时延比较大
计算机网络体系结构
OSI vs TCP/IP
OSI是美国IBM公司想做的网络标准框架,但是因为追求完美而耗时长,等完成的时候,反而被TCP/IP抢占了市场。
OSI总共有七层协议体系结构,而TCP/IP有四层。为了学习的方便,综合了OSI和TCP/IP的优点,在学习的时候通常采用折中的五层结构。
应用层:定义的是应用进程间通信和交互的规则。常见的应用曾协议:域名系统DNS、万维网应用HTTP协议,电子邮件SMTP。把应用层交互的数据单元称为报文。
运输层:负责向两台主机中进程之间的通信提供通用的数据传输服务。常用的协议:TCP、UDP。
网络层:为分组交换网上的不同主机提供通信服务。网络层把运输层产生的报文段或用户数据包封装成分组或者包。
数据链路层:将网络层传下来的IP数据包封装成帧。
物理层:用于传输比特流,定义了与传输媒体的接口有关的一些特性,如机械特性、电气特性、功能特性、过程特性。
物理层
物理层使用的中间设备是转发器,调制解调器和集线器。
物理层主要任务就是确定与传输媒体的接口有关的一些特性,如机械特性、电气特性、功能特性、过程特性。
常见的传输媒介(传输媒介不属于物理层):
引导型:双绞线、同轴电缆、光缆
非引导型(主要是利用无线电波进行通信):短波通信、无线电微波通信等
信道复用技术:频分复用、时分复用、统计时分复用。波分复用(光的频分复用)、码分复用(特点是其频谱类似于白噪声,不易被敌人发现)。
数据链路层
数据链路层使用的中间设备叫网桥或桥接器。
数据链路层使用的信道主要有一下两种类型:点对点信道和广播信道。
在数据链路层中协议有许多种,但是有三个基本问题是共同的:
- 封装成帧
- 透明传输
- 差错检测
封装成帧:在数据链路层封装帧时需要添加帧头和帧尾。
透明传输:本质是帧边界定义的字符和数据内容可能冲突的问题,错误的把部分帧当成完整的帧接受。
透明传输的一般解决办法是在控制字符SOH或EOT前面插入ESC转义字符,这种方法称为字节填充或字符填充。
差错检测:监测传输过程中可能会产生的差错。通常使用比较多的是循环冗余监测CRC
点对点协议PPP
由一下部分组成:
- 一个将IP数据报封装到串行链路的方法。
- 一个用来建立、配置和测试数据链路连接的链路控制协议LCP。
- 一套网络控制协议NCP。
PPP协议规定了特殊的字符作为帧定界符。在进行异步传输的时候,使用字节填充,转义符定义为0x7D;在进行同步传输的时候,采用零比特填充法。
使用广播信道的数据链路层(局域网的数据链路层)
局域网的拓扑:星形网、环形网和总线网。
总线型局域网使用CSMA/CD协议,其意思是载波监听多点接入/碰撞监测。说白了就是解决多台计算机同时占用总线资源时的冲突问题。
以太网中的MAC地址又称硬件地址、物理地址。MAC地址信息被写入网卡(适配器)的ROM中。
拓展以太网
一种方法是在物理层对以太网进行扩展,使用多个集线器,构成覆盖范围更大的多级星型结构以太网。
另一种方法是在数据链路层扩展以太网,使用以太网交换机完成扩展。
网络层
网络层最重要的协议是网际协议IP。与之配套的还有三个协议:
- 地址解析协议ARP
- 网际控制报文协议ICMP
- 网际组管理协议IGMP
网络层使用的中间设备叫路由器。
需要注意的是当中间设备是转发器或者网桥时,这仅仅是把一个网络扩大了,一般不称为网络互联,在网络层使用的路由器实现了网络的互连。
IP地址的编制方法经历了三个历史阶段:
- 分类的IP地址。分为A、B、C三类,其IP地址的组成为网络号加主机号,其中A类的主机号最多。
A 1-126
B 128.1-191.255
C 192.0.1-233.255.255 - 子网的划分
- 构成超网
IP地址 vs MAC地址
MAC地址又称物理地址,是在数据链路层和物理层使用的地址,而IP地址是在网络层使用的地址,是一种逻辑地址。
在IP数据报的基础上增加帧头帧尾,其中帧头包含了MAC地址,这就变成了MAC帧,MAC帧在传送时使用的都是硬件地址。MAC帧传送给网络层之后,网络层才能剥去MAC帧得到IP数据报从而得到IP源地址和目的地址。
需要注意的一点是,在数据传输过程中,一般MAC地址会在经过不同的主机时不断改变,但是IP地址是不会变的。
地址解析协议ARP协议
ARP协议的作用是从网络层使用的IP地址解析出在数据链路层使用的硬件地址。
其使用的方法是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表。
举个例子:
假设主机A要想本局域网中的主机B发送IP数据报,先在ARP高速缓存中查找有没有主机B的IP地址,如果有就在ARP高速缓存中查出B的MAC地址,然后写入MAC帧,通过局域网发送出去。
如果查不到B的IP地址,可能是主机B才入网,或者A才刚上电,告诉缓存是空的。则A将进行如下步骤来获取B的硬件地址。
- 发送一个ARP广播,内容包括A的IP地址和MAC地址和B的IP地址,然后请求B的MAC地址。
- 局域网上所有主机收到此广播,然后经过过滤最后B收到了这个广播,然后回应A的请求,将自己的MAC地址发送出去。
- A在自己的ARP缓存中写入B的IP和MAC对应关系。
- ps需要注意的是主机的高速缓存中信息都有一个生存时间,为了防止其他主机中途更换了网络适配器。
IP数据报格式
IP数据报中有首部校验和,进行简单的错误检测。
总长度是数据链路层都有一个数据字段的最大长度MTU,如果IP数据报过长的话,就要分段。
划分子网和构造超网
划分子网说白了就是在原来两级的IP地址(值网络号+主机号构成的IP地址)变成了三级,即网络号+子网号+主机号。其子网号是从原来两级中的主机号借来的。所以划分子网并不改变原来的网络号,在外看来,划分的各个子网仍属于同一个网络。
在同一个网络,和这个网络直连的路由器如何精准地把数据报发送给子网呢?通过子网掩码。
- A类地址地默认子网掩码是255.0.0.0
- B 255.255.0.0
- C 255.255.255.0
超网:无分类编址。
超网的IP地址组成是网络前缀+主机号。但是网络前缀已经变成无级分类,通常使用斜杠后面写上网络前缀所占位数。
例:128.14.35.7/20 表示网络前缀是20位的
超网的好处是更灵活。
CIDR地址块中有很多地址,路由表利用CIDR地址块来查找目的网络,这种地址聚合称为路由聚合。
简单来说,在之前的IP地址表示方法中,只能以/8,/16,/32来分配。
最长前缀匹配
使用二叉线索查找路由表
路由选择协议
路由选择协议可以分为内部网关协议IGP和外部网关协议EGP。
内部网关协议
-
RIP
RIP是一种基于距离向量的路由选择协议。其步骤为:
RIP协议就是每个路由器不断更新自己的信息表,更新的信息是自身的路由表(知道的所有信息)
RIP存在的一个问题是当网络出现故障时,需要经过比较长的时间才能将此信息传到所有的路由器上。
-
OSPF协议,这个协议的名字是开放最短路径优先OSPF。克服了RIP的的缺点。使用了迪杰斯特拉最短路径算法SPF。
OSPF更新收敛更快。
- OSPF会向本自治系统中所有的路由器发送信息,使用洪泛法。而RIP只向相邻路由器发送信息。
- OSPF发送的信息是本路由器相邻的所有路由器的链路状态(和哪些路由器相邻以及度量,度量是指费用、距离、时延等因素,由网路人员决定),而RIP发送的信息是到所有网络的距离和下一跳路由器。
- OSPF只有在链路状态发生变化时才会用洪泛法发送此信息,RIP是定时发送。
从上面的比较可以看出,OSPF协议下所有路由器都知道全网的拓扑结构,根据这个拓扑结构来规划最短的路径,例如使用Dijkstra算法,而RIP中每个路由器虽然知道到所有网络的距离以及下一跳路由器,但是却不知道全网的拓扑结构。
外部网关协议
为什么自治系统AS之间不能使用RIP或者OSPF?
- 互联网规模太大,AS之间的路由器选择很困难。
- AS之间的路由选择必须考虑有关策略,由于相互连接的网络性能差很大,所有根据最短距离找出来的路径可能并不合适。
-
BGP协议,边界网关协议。
BGP目的是找到一条能够到达且网络比较好的路由(不能兜圈子),并非要找一条最佳路由。
每个AS都需要一个BGP发言人,这个发言人一般来说就是BGP边界路由器。下图是一个BGP发言人交换路径向量的示例:
路由器组成
路由器一般由两部分组成
- 路由选择
- 分组转发,又包括了交换结构、一组输入端口和一组输出端口
ipv6
与IPv4相比较:
- 地址从32位增加到64位
- 地址空间更大,可以划分的层次更多
- IPv6数据报的首部和IPv4不兼容,前者提供了许多可选的扩展首部
- IPv6首部的长度必须是8字节的整数倍,IPv4是四字节。
组成:基本首部 + 有效载荷。
VPN
VIrtual Private Network虚拟专用网VPN
为什么会出现VPN?IP地址是很紧缺的,一个机构内部进行通信有时并不需要连入互联网。如果一个机构内部的计算机通信也是采用TCP/IP协议,那么这些机构内部的计算机可以自由分配IP地址,这些地址可以称为本地地址,而互联网中全球唯一的IP地址一般称为全球地址。
有些机构内部通信的计算机也需要连入互联网,那么如果随意分配IP地址,则会出现IP地址冲突的问题,为了避免这种问题,所有本地地址路由器都不会进行转发。RFC1918指明了一些专用地址,专本用作本地地址。
那么VPN中的虚拟又是什么意思呢?
我们假设有一个机构分布很广,那么此时他内部不接入互联网的内部通信的实现就比较困难,一般来说有两种方法:
- 租用电信公司的通信线路为本机构专用,租金高
- 利用公用的互联网作为载体,这样的专用网称为虚拟专用网VPN
此处的虚拟指好像是一条专用通道,然而不是,只是在效果上和专用网一样。
构建VPN都需要有一个和拥有全球地址的路由器主机用于传输加密数据。
运输层
最重要的是UDP和TCP协议。其中TCP中有三个重要问题:滑动窗口、流量控制和拥塞控制。
网络层能够把数据发送到目标主机,但是并没有把数据交付给主机中的应用程序,运输层把数据交付给主机中的进程。
其中UDP面向报文,TCP面向字节流。
运输层的端口的目的是找到目的计算机中的应用程序。
UDP
-
特点:
- 无连接
- 尽最努力交付
- 面向报文:对于应用层传下来的数据直接添加首部然后向下交付
- 没有拥塞控制
- 支持一对一、一对多、多对一、多对多的交互通信
- 首部开销小
首部格式如下:
主要是:源端口、目的端口、长度、校验和。
UDP的校验和是把首部和数据部分一起都校验了。
TCP
-
特点:
- 面向连接的运输层协议
- 点对点,每一个TCP连接只能有两个端口
- 可靠交付
- 全双工通信
- 面向字节流:TCP和应用程序交互,把应用程序的数据堪称一连串的无结构字节流。
三个问题:滑动窗口、流量控制和拥塞控制。
-
TCP连接的端点叫做套接字socket或插口。
套接字socket = (IP地址:端口号)
TCP连接唯一被通信两端的两个端子所确定。
-
为了确保可靠传输,TCP采用了停止等待协议。
所谓停止等待就是每发送一个分组就停止发送,等待对方的确认。
接收到错误的报文的时候,直接丢弃,其他什么也不做,等待发送方超时重传。
另外还可能出现确认信号未成功发送或者超时:
-
停止等待协议的优点是简单
-
缺点是信道利用率太低
-
连续ARQ协议
发送窗口的意思是窗口内的5个分组可以连续的发送出去而不需要等待确认。
需要注意的是,接收方一般采用累计确认的方式,接收方不必对收到的分组逐个发送确认,而是在收到几个分组之后,对序列到达的最后一个分组发送确认,表示到这个分组之前的所有分组都已收到了。
这样的确认会造成问题,假如第三个分组丢失了,那么发送方可能需要重复发送4、5两个分组。
- TCP报文段的首部格式
如果确认号等于N,则表明到N-1为止的所有数据已经正确收到。
-
以字节为单位的滑动窗口
接收方可以根据自己的接受能力来反馈给发送方,改变发送窗口的大小。
对于没有按序到达的信号,接收方应该将这些数据保存在接受窗口内。
在滑动窗口协议中,比较发杂的问题是重传时间的选择。TCP采用了一种自适应的算法,计算加权平均往返时间RTTs,计算公式如下下:
一般超时重传时间RTO略大于RTTs,在上式中 α \alpha α在0-1之间,越接近1则更新速度越快。
-
利用滑动窗口实现流量控制
一个利用滑动窗口实现流量控制的例子:
接收方通过rwnd来控制发送方发送窗口的大小从而实现了流量的控制。
持续计时器:(假设发送方为A,接收方为B)B发送了rwnd=0,然后当接受窗口又有缓存的时候,给A发送了rwnd=400的报文段,但是A没有收到这个报文,于是A、B双方均等待对方的报文,陷入死局。持续计时器解决了这个问题:只要A收到了零窗口的报文段,在规定的时间间隔内发送零窗口探测报文,B收到之后会发送当前窗口大小。
-
拥塞控制
网络拥塞的条件: ∑ 对 资 源 的 需 求 > 可 用 资 源 \sum对资源的需求 > 可用资源 ∑对资源的需求>可用资源
拥塞控制和流量控制都是告诉发送端发送的慢一些,但是出发点是不一样的:
- 流量控制:接收端接受能力不够
- 拥塞控制:发送的数据量很大,超过了网络的负载,造成拥堵,所以减慢发送速度
从控制理论的角度解决拥塞问题,可以分为开环控制和闭环控制。
拥塞控制算法有:慢开始、拥塞避免、快重传和快恢复。
- 慢开始:从小到大逐渐增加发送窗口,没经过一个传输轮次,拥塞窗口cwnd就加倍。
- 拥塞避免:让cwnd缓慢地增加,每经过一个RTT就让cwnd增加1,比慢开始算法的增长速度慢很多。
慢开始和拥塞避免都不知道什么时候出现拥塞,所以采用”试探“的方式增加。
慢开始和拥塞避免可以结合使用,使用一个慢开始门限,超过门限使用拥塞避免,否则使用慢开始。例子:
- 快重传:要求接收方不要等到发送数据时才捎带确认,而是收到要立即发送确认,即使收到失序的数据报也要发送已收到报文的重复确认。其示意图如下:
-
快恢复:意思是当发现在某个结点(如图5-25中的4)收到重复确认,发送方知道只是丢失了个别的报文段,此时不是将cwnd置1,而是置门限值ssthread,然后执行拥塞避免,而不是从慢开始算法开始。
-
主动队列管理AQM
路由器的队列都是按照先进先出的策略,如果队列满了,那么后面到的分组就会被丢弃,这回造成发送方进行超时重传,使TCP进入慢开始阶段。网络中通常有多条TCP连接,队尾丢弃会造成多条TCP同一时间进行慢开始,这称为全局同步,现象就是全网的通信量突然下降很多,然后恢复正常之后通信量又突然增大很多。
主动队列AQM就是在队列长度到达某个值得注意的值时主动丢弃到达的分组,提醒发送方放慢发送速度,减轻网络拥塞。
AQM又很多实现方法,早期有RED随机早期监测。
-
TCP连接管理
运输连接有三个阶段:连接建立、数据传送、连接释放。
- TCP建立连接需要三次握手。
> TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但是需要**消耗一个序号**。
- TCP连接释放
A向B发送了连接释放请求之后,A就不向B发送数据了,但是B还可以向A发送数据,只有当B也发送了FIN=1的数据报时,双方都不发送数据了。在A收到B的连接释放报文后,还需要发送确认报文,然后**还需要等待时间等待计时器设置时间2MSL后才进入关闭状态**。为什么要有这个等待时间呢:
1. 确保A发送的最后一个ACK报文到达B
2. 防止**已失效的连接请求报文段**出现在本链接中
TCP中出现的计时器归纳:
超时计时器p214:在停止等待协议中,如果发送的报文迟迟没有收到确认(可能发送报文没到达,也可能确认报文没达到),则需要一个时间间隔来进行重传,这个时间就是超时计时器决定的。
持续计时器p228:用滑动窗口进行流量控制的时候,如果接收方给发送方发了一个零窗口通知报文,然后接收方发送的窗口大小恢复通知报文丢失了,发送方没有收到,这样双方都陷入了僵局。解决办法是当发送方收到零窗口的通知报文之后,就启动该持续计时器,在持续计时器时间到了,就发送一个零窗口探测报文段,接收方收到了这个探测报文就发送当前的窗口大小。
时间等待计时器p241:连接释放中,客户端发送了确认报文之后等待的时间。
保活计时器p241:防止客户端与服务器建立连接之后,客户端发生了故障。服务器在保活计时器设置的时间内没有收到客户端数据,就发送探测报文,以后每隔75秒发送一个探测报文,如果10次客户端仍然没有响应,则服务器认定客户端发生了故障,关闭连接。