计算机网络总结
1 概述
网络的网络
网络将主机连接起来,互联网将网络连接起来。因特网是全球范围的互联网。
ISP
Internet Service Provider:从互联网管理机构获得IP地址,同时拥有通信线路及路由器等联网设备。
ISP根据覆盖面积分为:第一层ISP、区域ISP、接入ISP。互联网交换点IXP允许两个ISP直接相连而不用经过第三个ISP。
主机间的通信方式
C/S、P2P
电路交换与分组交换
-
电路交换:建立一条专用的物理链路用于数据传输,整个通信过程中始终占用该链路。利用率低。
-
分组交换:每个分组设置头部、尾部,其包含源地址、目的地址等控制信息。同一条链路上可以传输不同分组,互不影响。
时延
- 排队时延:分组在路由器的输入及输出队列的等待时间;
- 处理时延:路由器处理分组所需的时间(分析首部、差错检验等)
- 传输时延:主机或路由器传输数据所需的时间。\(delay = \frac{l(bit)}{v(bit/s)}\)
- 传播时延:电磁波在信道中传播所需的时间。 \(delay = \frac{l(m)}{v(m/s)}\)
计算机网络体系结构
常见的有:OSI、五层协议、TCP/IP
五层协议
(由上到下) |
---|
应用层 |
运输层/传输层 |
网络层 |
数据链路层 |
物理层 |
- 应用层:为特定应用提供数据传输服务,利用HTTP、DNS等。数据单位为报文。
- 传输层:为进程提供通用数据传输服务。运输层包括传输控制协议(TCP)及用户数据报(UDP)两种协议。TCP提供面向连接、可靠的数据传输服务,数据单位为报文段;UDP提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP主要提供完整性服务,UDP主要提供及时性服务。
- 网络层:为主机间提供数据传输服务,将传输层传递下来的报文段或者用户数据报封装成分组。
- 数据链路层:同样为主机间提供数据传输服务,而主机间可能存在多条链路。数据链路层为同一链路下的主机提供数据传输服务。数据链路层将网络层传下来的分组封装成帧。
- 物理层:考虑如何在传输媒体上传输数据比特流,其屏蔽了传输媒体和通信手段的差异。
OSI
(由上到下) |
---|
应用层 |
表示层 |
会话层 |
运输层 |
网络层 |
数据链路层 |
物理层 |
- 表示层:数据压缩、加密及数据描述,使得应用程序不必关心在各台主机中内部格式不同的问题。
- 会话层:建立及管理会话。
五层协议中没有表示层和会话层,而是将这些功能留给程序开发者处理。
TCP/TP
(由上到下) |
---|
应用层 |
运输层 |
网际层 |
网络接口层 |
TCP/IP将物理层和数据链路层合并为网络接口层。
TCP/IP体系结构不严格遵循OSI分层概念,应用层可能直接访问网络层或传输层。
传递过程
在向下的过程中,需要添加下层协议所需要的首部或尾部,而在向上的过程中不断拆开首部和尾部。
路由器工作在网络层中。
2 物理层
通信方式
根据信息在传输线上的传送方向,分为以下几种通信方式:
- 单工通信:单向传输
- 半双工通信:双向交替传输
- 全双工通信:双向同时传输
带通调制
模拟信号:连续的信号 数字信号:离散的信号 带通调制:将数字信号转化为模拟信号
3 链路层
3.1 基本问题
封装成帧
将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束
首部 + IP数据报 + 尾部
透明传输
如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误地判定。
解决方法:在数据部分中出现与首部尾部相同内容的前面插入转义字符。在接收端进行处理后可以还原出原始数据,该过程透明传输的内容是转义字符,用户觉感知不到转义字符的存在。
差错检测
通过循环冗余检验(CRC)来检查比特差错。
3.2 信道分类
广播信道
一对多通信,一个节点发送的数据能够被广播信道上的所有节点接收到。
所有节点在同一广播上发送数据,可能会发生碰撞。解决方法:
- 信道复用技术
- CSMA/CD
点对点信道
一对一通信,不会发生碰撞,使用PPP协议进行控制。
3.3 信道复用技术
- 频分复用:所有主机在相同的时间点占用不同的频率带宽资源。
- 时分复用:所有主机在不同的时间点占用相同的频率带宽资源。
- 统计时分复用:不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。
- 波分复用:光的频分复用。由于光的频率很高,因此习惯上用波长而不是频率来表示所使用的光载波。
- 码分复用:码分复用。为每个用户分配\(m\)比特的码片,使所有码片正交,当用户发送1时就发送该码片,发送0时发送该码片的反码。缺点是需要发送的数据量变为原来的\(m\)倍。
3.4 CSMA/CD协议
CSMA/CD:载波监听多点接入/碰撞检测。
- 多点接入:说明这是总线型网络,多台主机以多点的方式连接到总线上;
- 载波监听:每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用则必须等待;
- 碰撞检测:在发送中,如果监听到信道已有其它主机正在发送数据,就发生了碰撞。虽然每个主机在发送数据之前就已经监听到信道为空闲,但是由于电磁波传播时延的存在,依然可能发生碰撞。
发生碰撞时,站点要停止发送,等待一段时间后再继续发送,这个时间采用截断二进制指数退避算法决定。
3.5 PPP协议
用户计算机和ISP进行通信时所使用的数据链路层协议。
PPP的帧格式:
F + A + C + 协议 + IP数据报 + FCS + F
- F:帧的定界符
- A和C:暂时没有意义
- FCS:使用CRC的检验序列
- 信息部分的长度不超过1500
3.6 MAC地址
MAC地址是链路层地址,长度为6字节(48位),用于唯一标识网络适配器。一台主机有多少个网络适配器就有多少个MAC地址。
3.7 局域网
一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。
主要有以太网、令牌环网、FDDI、ATM等技术,目前以以太网为主
分类:星型、环型、直线型
3.8 以太网
一种星型拓扑结构局域网。
早期使用集线器连接,但可能发生碰撞。目前使用交换机连接,其根据MAC地址进行存储转发,不会发生碰撞。
以太网帧格式:
- 类型:标记上层使用的协议;
- 数据:长度在46-1500之间,如果太小则需要填充;
- FCS:帧检验序列,使用CRC检验法。
目的地址 + 源地址 + 类型 + IP数据报 + FCS
6bit 6bit 2bit 46-1500 4
3.9 交换机
交换机具有学习能力,学习的是交换表的内容,交换表中存储着MAC地址到接口的映射。
主机A向主机B,传输数据时,如果主机B不在交换表中,则主机A发送广播帧,其它主机丢弃该帧,主机B接到帧后进行回应,并将自己的地址写入交换表。
3.10 虚拟局域网
虚拟局域网(VLAN)可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。
网络层
网络层是整个互联网的核心,其向上提供灵活的、无连接的、尽最大努力交付的数据报服务。
网络层使用IP协议,可以把异构的物理网络连接起来,使得他们看起来好像是一个统一的网络。
与IP协议配套使用的协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
4.1 IP数据报的格式
- 版本:分为4(IPv4)和6(IPv6)
- 首部长度:占n=4位,表示n个32位字的长度。固定部分的长度位20字节,故n大于等于5。如果可选字段的长度不是4字节的整数倍,则使用尾部的填充部分来填充。
- 区分服务:用来获得更好的服务,一般不用。
- 总长度:包括首部长度和数据部分长度。
- 生存时间(TTL):防止无法交付的数据包再网络中不断循环,其以路由器跳数位单位,当TTL=0时丢弃这个数据报;
- 协议:指出携带的数据应该上交给哪个协议进行处理,例如ICMP、TCP、UDP等。
- 首部检验和:验证首部有效性,不包括数据部分。
- 标识:数据报过长会进行分片,相同数据报的不同分片具有相同的标识符。
- 片偏移:和标识符一起,用于发生分片的情况。片偏移的单位为8字节。
## 4.2 IP地址编址方式
分为三个阶段:
- 分类
- 子网划分
- 无分类
4.2.1 分类
将IP划分为网络号和主机号,不同分类具有不同的网络号长度,并且是固定的。
4.2.2 子网划分
通过在主机号字段中拿一部分作为子网号,把两级IP地址分为三级IP地址。
IP地址 ::= {<网络号>,<子网号>,<主机号>}
若要使用子网,必须配置子网掩码。
A类地址的默认子网掩码为255.0.0.0,B类为255.255.0.0。如果B类地址的子网占两个比特,则子网掩码为255.255.192.0。
4.2.3 无分类
无分类编址CIDR消除了分类地址及子网划分的概念,使用网络前缀和主机号IP对地址进行编码,网络前缀的长度可以根据需要变化。
IP地址 ::= {<网络前缀号>,<主机号>}
使用网络前缀来减少路由表项的方式称为路由聚合,也成为构成超网。
4.3 地址解析协议ARP
ARP用于根据主机的IP地址得到MAC地址:
每个主机都有一个ARP高速缓存,用于存放本局域网上各主机和路由器的IP地址到MAC地址的映射表。
## 4.4 网际控制报文协议 ICMP
ICMP是为了更有效地转发IP数据报和提高交付成功的机会,它封装在IP数据报中,但不属于高层协议。
ICMP报文分为差错报告报文和询问报文:
ICMP的常见应用:
-
Ping: 测试两台主机间的连通性 主机向目的主机发送ICMP Echo请求报文,目的主机收到之后会发送Echo回答报文。Ping会根据时间和成功响应的次数固安出数据包往返时间及丢包率。
-
Traceroute:跟踪一个分组从源点到终点的路径
原理:发送不同size的TTL,直到目的主机接收到了数据报
## 4.5 虚拟专用网 VPN
使用公用的互联网作为本机构各专用网之间的通信载体。
## 4.6 网络地址转换 NAT
专用网内部的主机使用本地IP地址,同时又想和互联网上的主机通信时,可使用NAT将本地IP转换为公网IP。
4.7 路由器的结构
路由器从功能上可划分为:路由选择及分组转发。
分组转发结构分为:交换结构、输入端口、输出端口:
4.8 路由器分组转发流程
- 从数据报的首部提取目的主机的IP地址D,得到目的网络地址N;
- 若N就是与此路由器直接相连的某个网络地址,则进行直接交付;
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
- 若路由表中有默认路由,则把数据传给默认路由
- 否则,报告转发分组出错。
路由选择协议
路由选择协议可分为两大类:
- 自治系统内部的路由选择:RIP和OSPF
- 自治系统间的路由选择:BGP
### 内部网关协议 RIP (Routing Information Protocol)
RIP时一种基于距离度量的路由选择协议,这里的距离指的是跳数,直接相连的路由器跳数为1.跳数最多为15,超过15标识不可达。
RIP按固定时间间隔与相邻的路由器交换路由表,经过若干次交换后,所有路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
优点:实现简单,开销小
缺点:最大距离为15,消息传播存在延迟
### 内部网关协议 OSPF (开放最短路径优先,Open Shortest Path First)
特点:向本自治系统(Automation System, AS)内的所有路由器采用洪泛法发送信息,内容为与相邻路由器的链路状态。只有当链路状态发生变化时,路由器才会发送信息。
优点:所有路由器都具有全网的拓扑结构图,并且是一致的。相较于RIP,OSPF收敛速度更快。
外部网关协议 BGP (边界网关协议,Border Gateway Protocol)
每个AS配置BGP发言人,通过在两个相邻BGP发言人之间建立TCP连接来交换路由信息。
5 传输层
5.1 UDP与TCP的特点
-
UDP(用户数据报协议, User Datagram Protocol):无连接,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加首部),支持一对一、一对多、多对一和多对多的交互通信。
-
TCP(传输控制协议, Transmission Control Protocol):面向连接,提供可靠交付,有流量控制,有拥塞控制,提供全双工通信,面向字节流(将应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条TCP连接只能是一对一的。
5.2 UDP首部格式
UDP首部只有8个字节,包括源端口、目的端口、长度、检验和。12字节的伪首部是为了计算检验和而临时添加的。
5.3 TCP首部格式
-
序号:用于对字节流进行编号。例如284代表第一个字节的编号为284,如果携带的数据长度为100字节,则下一个报文段的序号应为384。
-
确认号:期望收到的下一个报文段的序号。例如B正确收到A发来的一个报文段,序号为501,携带的数据长度为200字节,因此B期望下一个报文段的序号为701,B发送给A的确认报文段中确认号就为701。
-
数据偏移:数据部分距离报文段起始处的偏移量,即首部长度。
-
确认ACK:当ACK=1时确认号字段有效,否则无效。TCP规定,在建立连接后所有传送的报文段都必须将ACK置1.
-
同步SYN:在建立连接时用来同步序号。当SYN=1,ACK=0时表示这是一个连接请求报文段。若对方同意建立连接,则相应报文中SYN=1,ACK=1。
-
终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已经发送完毕,并要求释放连接。
-
窗口:窗口值作为接收方让发送方设置其发送窗口的依据。之所以有这个限制是因为接收方的数据缓存空间是有限的。
## 5.4 TCP的三次握手
设A为客户端,B为服务器端:
- 首先B处于LISTEN状态,等待用户的连接请求;
- A向B发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号seq=x;
- B收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,seq=y,确认号为x+1;
- A收到B的连接确认报文后,继续向B发出确认,确认号为y+1,序号为x+1;
- B收到A的确认后,连接建立。
三次握手的原因:防止失效的连接请求到达服务器,从而导致服务器错误打开连接。
5.5 TCP的四次挥手
- A发送连接释放报文,FIN=1;
- B收到连接释放报文后发出确认,此时TCP处于半关闭状态,B能向A发送数据但是A不能向B发送数据;
- 当B不再需要连接时,发送连接释放报文,FIN=1
- A收到后发出确认,进入TIME-WAIT状态,等待2MSL(最大报文存活时间)后释放连接;
- B收到A的确认后释放连接。
四次挥手的原因:客户端发送了FIN连接释放报文后,服务器收到了这个报文,就进入到了CLOSE-WAIT状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕后,服务器会发送FIN连接释放报文。
TIME_WAIT:客户端接收到服务器端的FIN报文后进入此状态,此时并不是直接进入CLOSED,还需要等待2MSL,原因如下:
- 确保最后一个报文能够到达。如果B没有收到A发送来的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况的发生;
- 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
5.6 TCP的可靠传输
实现机制为超时重传:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重新传送这个报文
往返时间RTT:一个报文段从发送到收到确认所经过的时间。 加权平均往返时间RTTs:
\[RTTs = (1-\alpha) * (RTTs) + \alpha * RTT\]超时时间RTO:
\[RTO = RTT_{s} + 4 * RTT_{d}\]其中, \(RTT_{d}\) 为偏差的加权平均值。
5.7 TCP的滑动窗口
接收方通过TCP报文段中的窗口字段告诉发送方自己窗口的大小,发送方根据窗口值和其它信息设置自己的窗口大小。
特点:
- 只有窗口内的字节流允许被发送/接收
- 接收窗口只会对窗口内最后一个按序到达的字节进行确认
5.8 TCP的流量控制
目的:为了控制发送方的发送速率,保证接收方来得及接受。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送速率。字段值为0,则发送方不能发送数据。
5.9 TCP的拥塞控制
如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致拥塞程度更高。此时应该调整发送方的速率,以降低整个网络的拥塞程度。
TCP通过以下四个方法进行拥塞控制:
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
慢开始
发送的最初执行慢开始,令cwnd(拥塞窗口)=1,发送方只能发送一个报文段;当收到确认后,将cwnd加倍,后续每轮继续加倍。
拥塞避免
设置ssthresh(慢开始门限),当cwnd>=ssthresh时进入拥塞避免,每轮cwnd+=1。如果出现超时,令ssthresh = cwnd / 2,然后重新执行慢开始。
快重传
接收方要求每次对收到的有序报文段进行确认,例如已经收到了A1,A2,此时收到A4,应当发送对A2的确认。对于发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到3个A2,则A3丢失,立即重传A3。
快恢复
快重传发生时只是丢失了个别的报文段,网络没有拥塞。因此执行快恢复,令ssthresh = cwnd / 2, cwnd = ssthresh,此时直接进入拥塞避免。
6 应用层
6.1 域名系统 DNS (Domain Name System)
DNS是一个分布式数据库,提供了主机名和IP地址之间相互转换的服务。分布式数据库指的是每个站点只保留它自己的那部分数据。
剧名具有层次结构:根域名、顶级域名、二级域名。
DNS可以使用TCP或者UDP进行传输,使用的端口号都为53。大多数情况下使用UDP进行传输,以下情况会使用TCP传输:
- 返回的响应超过512字节(UDP最大支支持512字节的数据)
- 区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)
## 6.2 文件传输协议 FTP (File Transfer Protocol)
FTP使用TCP进行连接,它需要两个连接来传送一个文件:
- 控制连接:服务器打开端口号21等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传给服务器,并传回服务器的应答。
- 数据连接:用来传送文件数据。
根据数据连接是否是服务器主动建立,FTP有主动和被动两种模式:
- 主动模式:服务器主动建立数据连接,服务器的端口号为20,客户端端口号随机,但必须大于1024,因为0-1023是端口熟知号。
- 被动模式:客户端主动建立数据连接,端口号由客户端自己指定,服务器端口号随机。
主动模式要求客户端开放端口号给服务器端,需要配置客户端防火墙。 被动模式只需要服务器端开放端口号即可,无需配置客户端防火墙。
然而,被动模式会导致服务器端的安全性减弱,因为开放了过多的端口。
## 6.3 动态主机配置协议 DHCP (Dynamic Host Configuration Protocol)
DHCP:用户不需要手动配置IP地址等信息,包括IP地址、子网掩码、网关IP地址等。
DHCP工作过程如下:
Step1: 客户端发送Discover报文,目的地址为255.255.255.255:67,源地址为0.0.0.0:68,其被放入UDP中,该报文被广播到同一子网的所有主机上。如果客户端和DHCP服务器不在同一子网,需要使用中继代理。 Step2: DHCP服务器收到Discover报文后,发送Offer报文给客户端。由于客户端可能收到多个DHCP服务器提供的信息,因此客户端需要选择。 Step3: 如果客户端选择了某个DHCP提供的信息,那么就发送Request报文给该DHCP服务器。 Step4: DHCP发送Ack报文,表示客户端此时可以使用提供给它的信息。
## 6.4 远程登录协议 TELNET
用于登录到远程主机上,并且返回远程主机的输出。可以适应不同计算机和操作系统的差异。(如换行符定义)
## 6.5 电子邮件协议
一个电子邮件系统由三部分组成:用户代理、邮件服务器、邮件协议
邮件协议包含发送协议和读取协议,发送协议常用SMTP,读取协议常用POP3和IMAP。
SMTP
SMTP只能发送ASCII码,而互联网邮件扩充MIME可以发送二进制文件。MIME定义了ASCII码的棉麻规则,是对邮件主机结构的补充,并非SMTP的替代。
POP3
POP3的特点是只要用户从服务器上读取了邮件,就把该邮件删除。最新版本的POP3可以不删除邮件。
IMAP
IMAP协议中客户端和服务器的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被删除,这允许用户随时访问服务器上的邮件。
6.6 常用端口
应用 | 应用层协议 | 端口号 | 传输层协议 | 备注 |
---|---|---|---|---|
域名解析 | DNS | 53 | TCP/UDP | 长度超过512字节时使用UDP |
动态主机配置协议 | DHCP | 67/68 | UDP | |
简单网络管理协议 | SNMP | 161/162 | UDP | |
文件传输协议 | FTP | 20/21 | TCP | 控制连接21, 数据连接20 |
远程终端协议 | TELNET | 23 | TCP | |
超文本传送协议 | HTTP | 80 | TCP | |
简单邮件传送协议 | SMTP | 25 | TCP | |
邮件读取协议 | POP3 | 110 | TCP | |
网际报文存取协议 | IMAP | 143 | TCP |
6.7 Web页面请求过程
Step1: 通过DHCP配置主机信息,获取到本机的IP地址、默认网关IP及子网掩码等信息;
Step2: 通过ARP解析默认网关的MAC地址,方便离开局域网;
Step3: 通过DNS解析出服务器的IP地址;
Step4: 通过HTTP请求页面,首先三次握手建立连接,然后将数据回传至本机,本机进行渲染。