计算机网络

1 概述

网络的网络

网络把主机连接起来,而互联网是把不同的网络连接起来,因此互联网是网络的网络。

ISP

互联网服务提供商ISP可以从互联网管理机构获得许多IP地址,同时拥有通信线路以及路由器等联网设备,个人或机构向ISP缴纳一定的费用就可以接入互联网。
目前的互联网是一种多层次ISP结构,ISP根据覆盖面积的大小分为第一层ISP,区域ISP和接入ISP。互联网交换点IXP允许两个ISP直接相连而不用经过第三个ISP。

主机之间的通信方式

客户-服务器(C/S):客户是服务的请求方,服务器是服务的提供方。
对等(P2P):不区分客户和服务器。

电路交换和分组交换

电路交换
电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到10%。

分组交换
每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组不会互相影响,因此在同一条传输线路上允许同时传输多个分组,也就是说分组交换不需要占用传输线路。在一个邮局通信系统中,邮局收到一封邮件之后,先存储下来,然后把相同目的邮件一起转发到下一个目的地,这个过程就是存储转发过程,分组交换也利用了存储转发过程。

时延

总时延=排队时延+处理时延+传输时延+传播时延

排队时延
分组在路由器的输入队列和输出队列中排队等待的时间,取决于网络当前的通信量。

处理时延
主机或路由器收到分组时进行处理所需要的时间,例如分析首部,从分组中提取数据,进行差错校验或查找适当的路由等。

传输时延
主机或路由器传输数据帧所需要的时间。

其中$l$表示数据帧的长度,$v$表示传输速率。

传播延时
电磁波在信道中传播所需要花费的时间,电磁波传播的速度接近光速。

其中$l$表示信道长度,$v$表示电磁波在信道上的传播速度$3*10^8m/s$。

计算机网络体系结构

OSI分层(七层)
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
TCP/IP分层(四层)
网络接口层,网络层,传输层,应用层
五层协议(五层)
物理层,数据链路层,网络层,传输层,应用层

每一层的协议如下:
物理层:RJ45,CLOCK,IEEE802.3(中继器,集线器)
数据链路层:PPP,FR,HDLC,VLAN,MAC(网桥,交换机)
网络层:IP,ICMP,ARP,RARP,OSPF,IPX,RIP,IGRP(路由器)
传输层:TCP,UDP,SPX
会话层:NFS,SQL,NETBIOS,RPC
表示层:JPEG,MPEG,ASII
应用层:TFTP,DNS,Telnet,SMTP,WWW,NFS

每一层的作用:
物理层:通过媒介传输比特,确定机械以及电气规范。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。(中继器、集线器)

数据链路层:将比特组装成帧和点到点的传递。网络层针对的是主机之间的数据传输服务,而主机之间可以有很多链路,链路层就是为同一链路的主机提供数据传输服务,数据链路层把网络层传下来的分组封装成帧。(网桥、交换机)

网络层:负责数据包从源到宿的传递和网际互联。为主机提供数据传输服务,而传输层协议是为主机中的进程提供数据传输服务,网络层把传输层传递下来的报文段或者用户数据报封装成分组。(路由器)

传输层:提供端到端的可靠报文传递和错误恢复。主要包括TCP和UDP,TCP(传输控制协议),提供面向连接、可靠的数据传输服务,数据单位为报文段;UDP(用户数据报协议),提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP主要提供完整性服务,UDP主要提供及时性服务。

会话层:建立、管理和终止会话。

表示层:对数据进行翻译,加密和压缩,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。

应用层:允许访问OSI环境的手段。例如HTTP、DNS等协议,数据单位是报文。

数据在各层之间的传递过程

在向下的过程中,需要添加下层协议所需要的首部或者尾部,而向上的过程中不断拆开首部和尾部。

路由器只有下面三层协议,因为路由器位于网络核心,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。

各种协议的介绍

ICMP协议:因特网控制报文协议,它是TCP/IP协议族的一个子协议,用于IP主机、路由器之间传递控制消息;

FTP协议:是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务;

HTTP协议:超文本传输协议,是一个属于应用层的面向对象的协议,由于其便捷、快速的方式,适用于分布式超媒体信息系统;

NAT协议:网络地址转换接入广域网技术,是一种将私有(保留)地址转化为合法IP地址的转换技术;

DHCP协议:动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段,使用UDP协议工作。具体用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

交换机、路由器、网关

交换机工作在数据链路层,具有自学习能力,学习的是交换表的内容,交换表中存储着MAC地址到接口的映射。正式由于这种自学能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。

路由器工作在网络层,主要完成两个功能:路由选择和分组转发,路由选择指的是决定数据包从来源端到目的所经过的路由路径;转发是指将路由器输入端的数据包送至适当的路由输出端。

网关是连接两个网络的设备,能在网络间传递数据包,区别于路由器,网关中并没有路由表,它只能按照预先设定的不同网段来进行转发。

2 物理层

通信方式

根据信息在传输线上的传送方向,分为以下三种通信方式:
①单工通信:单向传输
②半双工通信:双向交替传输;
③全双工通信:双向同时传输

带通调制

模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。

3 数据链路层

基本问题

封装成帧
将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束

透明传输
透明表示一个实际存在的事物看起来好像不存在一样。

帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要把数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。

差错检测
目前数据链路层广泛使用了循环冗余检验(CRC)来检查比特差错。

信道分类

广播信道
一对多通信,一个节点发送的数据能够被广播信道上所有的节点接收到。所有节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突。主要有两种控制方法进行协调,一个是使用信道复用技术,一个是使用CSMA/CD协议。

点对点信道
一对一通信。因此不会发生冲突,使用PPP(Point to Point Protocol)协议进行控制。

信道复用技术

频分复用
频分复用的所有主机在相同的时间占用不同的频率带宽资源。

时分复用
时分复用的所有主机在不同的时间占用相同的频率带宽资源。

使用频分复用和时分复用进行通信,在通信的过程中主机会一直占用一部分信道资源。但是由于计算机数据的突发性质,通信过程没必要一直占用信道资源而不让出给其他用户使用,因此这两种方式对信道的利用率都不高。

统计时分复用
是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。

波分复用
光的频分复用。由于光的频率很高,因此习惯上用波长而不是频率来表示所使用的光载波。

码分复用
为每个用户分配$m$ bit的码片,并且所有的码片正交,对于任意两个码片S和T有

为了讨论方便,取 $m=8$,设码片S为$00011011$,在拥有该码片的用户发送比特1时就发送该码片,发送比特0时就发送该码片的反码$11100100$.
在计算时将$00011011$记作(-1-1-1+1+1-1+1+1=1),可以得到

其中S’为S的反码。当接收端使用码片S对接收到的数据进行內积运算时,结果为0的是其他用户发送的数据,结果为1的是用户发送的比特1,结果为-1是用户发送的比特0。码分复用需要发送的数据量为原先的m倍。

CSMA/CD

CSMA/CD表示载波监听多点接入/碰撞检测Carrier Sense Multiple Access with Collision Detection。

  • 多点接入:说明这是总线型网络,许多主机以多点的方式连接到总线上。
  • 载波监听:每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。
  • 碰撞检测:在发送中,如果监听到信道已有其他主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延,还是有可能发生碰撞。

记端到端的传播时延为T,最先发送的站点最多经过2T就可以知道是否发生了碰撞,称2T为争用期。只有经过争用期还没有检测到碰撞,才能肯定发送不会发生碰撞。

当发生碰撞时,站点要停止发送,等待一段时间再发送,这个时间采用截断二进制指数退避算法来确定,从离散的整数集合${0,1,…,(2^k-1)}$中随机取出一个数,然后取$r$倍的争用期作为重传等待时间。

PPP协议

PPP协议表示Point to Point protocol。互联网用户通常需要连接到某个ISP之后才能接入到互联网,PPP协议是用户计算机和ISP进行通信时所使用的数据链路协议。
PPP的帧格式:

  • F字段为帧的定界符
  • A和C字段暂时没有意义
  • FCS字段是使用CRC的校验序列
  • 信息部分的长度不超过1500

MAC地址

MAC标识 Media Access Control 介质访问控制。MAC地址是链路层地址,长度为6字节(48位),用于唯一标识网络适配器(网卡)。一台主机拥有多少个网络适配器就有多少个MAC地址,例如笔记本电脑普遍存在无限网络适配器和有线网络适配器,因此就有两个MAC地址。

局域网

局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。主要有以太网、令牌环网、FDDI(Fiber Distributed Data Interface,光纤分布式数据接口)和ATM(asynchronous transfer mode,异步传输模式)等局域网技术,目前以太网占据着有线局域网市场。

可以按照网络拓扑结构对局域网进行分类:星型,环型,总线型。

以太网

以太网是一种星型拓扑结构局域网。早期使用集线器进行连接,集线器是一种物理层设备,作用于比特而不是帧,当一个比特到达接口时,集线器重新生成这个比特,并将其能量强度放大,从而扩大网络的传输距离,之后再将这个比特发送到其他所有接口。如果集线器同时收到了两个不同接口的帧,那么就发生了碰撞。

目前以太网使用了交换机替代了集线器,交换机是一种链路层设备,它不会发生碰撞,能根据MAC地址进行存储转发。
以太网帧格式:

  • 类型:标记上层使用的协议
  • 数据:长度在46~1500之间,如果太小则需要填充
  • FCS:帧检验序列,使用的是CRC检验方法

交换机

交换机具有自学习能力,学习的是交换表的内容,交换表中存储着MAC地址到接口的映射。正是由于这种自学能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。

下图中,交换机有 4 个接口,主机 A 向主机 B 发送数据帧时,交换机把主机 A 到接口 1 的映射写入交换表中。为了发送数据帧到 B,先查交换表,此时没有主机 B 的表项,那么主机 A 就发送广播帧,主机 C 和主机 D 会丢弃该帧,主机 B 回应该帧向主机 A 发送数据包时,交换机查找交换表得到主机 A 映射的接口为 1,就发送数据帧到接口 1,同时交换机添加主机 B 到接口 2 的映射。

虚拟局域网(VLAN)

虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。
例如下图中(A1,A2,A3,A4)属于一个虚拟局域网,A1发送的广播会被A2,A3,A4收到,而其他站点收不到。

使用VLAN干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连交换机。IEEE定义了一种扩展的以太网帧格式802.1Q,它在标准以太网帧上加进了4字节首部VLAN标签,用于表示该帧属于哪一个虚拟局域网。

4 网络层

概述

因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用IP协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

与IP协议配套使用的还有三个协议:

  • 地址解析协议ARP(address resolution protocol)
  • 网际控制报文协议ICMP(Internet control message protocol)
  • 网际组管理协议IGMP(Internet group management protocol)

IP数据报格式

  • 版本:有4(ipv4)和6(ipv6)两个值
  • 首部长度:占4位,因此最大值为15。值为1表示是1个32位字的长度,也就是4字节。因为首部固定长度为20字节,因此最小值为5.如果可选字段的长度不是4字节的整数倍,就用尾部的填充部分来填充。
  • 区分服务:用来获得更好的服务,一般情况下不使用。
  • 总长度:包括首部长度和数据部分长度。
  • 生存时间:TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子,以路由器跳数为单位,当TTL为0时就丢弃数据报。
  • 协议:指出携带的数据应该上交给哪个协议进行处理,例如ICMP,TCP,UDP。
  • 首部检验和:因为数据报每经过一个路由器,都要重新计算校验和,因此检验和不包含数据部分可以减少计算的工作量。
  • 标识:在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
  • 片偏移:和标识符一起,用于发生分片的情况,片偏移的单位为8字节。

IP地址编址方式

IP地址的编址方式经历了三个历史阶段:

  • 分类
  • 子网划分
  • 无分类

分类

由两部分组成,网络号和主机号,其中不同的分类具有不同的网络号长度,并且是固定的。
IP地址={<网络号>,<主机号>}

IP地址的分类
A类地址:以0开头,第一个字节范围:1~126(1.0.0.0-126.255.255.255)
B类地址:以10开头,第一个字节范围:128-191(128.0.0.0-191.255.255.255)
C类地址:以110开头,第一个字节范围:192-223(192.0.0.0-223.255.255.255)
D类地址:以1110开头,第一个字节范围:224-239(224.0.0.0-239.255.255.255);作为多播使用
E类地址:以1111开头,保留
其中A,B,C是基本类,D,E类作为多播和保留使用。

留用的内部私有地址
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类:192.168.0.0-192.168.255.255

IP地址与子网掩码相与得到网络号:

1
2
3
	192.168.2.110
& 255.255.255.0
192.168.2.0

主机号全为0的是网络号(如192.168.2.0),主机号全为1的为广播地址(192.168.2.255)。

子网划分

通过在主机号字段中拿出一部分作为子网号,把两级IP地址划分为三级IP地址。
IP地址={<网络号>,<子网号>,<主机号>}

要使用子网,必须配置子网掩码。一个B类地址的默认子网掩码为255.255.0.0,如果B类地址的子网占两个比特,那么子网掩码为1111111 11111111 11000000 00000000,也就是255.255.192.0。
注意,外部网络看不到子网的存在。

无分类

无分类编址CIDR消除了传统A类、B类和C类地址以及划分子网的概念,使用网络前缀和主机号来对IP地址进行编码,网络前缀的长度可以根据需要变化。
IP地址={<网络前缀号>,<主机号>}

CIDR的记法上采用在IP地址后面加上网络前缀长度的方法,例如128.14.35.7/20表示前20位为网络前缀。

CIDR的地址掩码可以继续称为子网掩码,子网掩码首1长度为网络前缀的长度。

一个CIDR地址块中有很多地址,一个CIDR表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为构成超网。

在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

地址解析协议ARP

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的源地址和目的地址始终不变,而MAC地址随着链路的改变而改变。

ARP 实现由 IP 地址得到 MAC 地址。

ARP工作原理
1 首先,每个主机都会在自己的ARP缓冲区建立一个ARP列表,以表示IP地址和MAC地址的对应关系;

2 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包的内容包括:源主机IP地址,源主机MAC地址,目的主机的IP地址;

3 当本网络的所有主机收到该ARP数据包时,首先检查数据报中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址;

4 源主机收到ARP响应包后,将目的主机的IP和MAC地址写入ARP列表中,并利用此信息发送数据,如果源主机已知没有收到ARP响应数据包,表示ARP查询失败。

广播发送ARP请求,单播发送ARP响应。

逆地址解析协议RARP

RARP协议是逆地址解析协议,作用是完成MAC地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。

网际控制报文协议ICMP

ICMP是为了更有效地转发IP数据报和提高交付的机会,它封装在IP数据报中,但是不属于高层协议。

ICMP报文分为差错报告报文和询问报文。

Ping
Ping是ICMP的一个重要应用,主要用来测试两台主机之间的连通性。

Ping的原理是通过向目的主机发送ICMP Echo请求报文,目的主机收到之后会发送Echo回答报文,Ping会根据时间和成功响应的次数估算出数据包往返时间及丢包率。

Tracetoute
Traceroute是ICMP的另一个应用,用来跟踪一个分组从源点到终点的路径。

Traceroute发送的IP数据报封装的是无法交付的UDP用户数据报,并由目的主机发送终点不可达差错报告报文。

  • 源主机向目的主机发送一连串的IP数据报。第一个数据报P1的生存时间TTL设置为1,当P1到达路径上的第一个路由器R1时,R1收下它并把TTL减1,此时TTL等于0,R1就把P1丢弃,并向源主机发送一个ICMP时间超过差错报告报文;
  • 源主机接着发送第二个数据报P2,并把TTL设置为2。P2先到达R1,R1收下后把TTL减1在转发给R2,R2收下后也把TTL减1,此时TTL等于0,R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报文;
  • 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把TTL减1,但是因为数据报封装的是无法交付的UDP,因此目的主机要向源主机发送ICMP不可达差错报文;
  • 之后源主机知道了到达目的主机所经过的路由器IP地址及达到每个路由器的往返时间。

虚拟专用网VPN

虚拟专用网表示Virtual Private Network。由于IP地址的紧缺,一个机构能申请到的IP地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的IP地址(专用地址)。
有三个专用地址块:

  • 10.0.0.0~10.255.255.255
  • 172.16.0.0~172.31.255.255
  • 192.168.0.0~192.168.255.255

VPN使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其他主机通信,虚拟指的是它经过公有的互联网。

下图中,场所A和场所B的通信经过互联网,如果场所A的主机X要和另一个场所B的主机Y通信,IP数据报的源地址是10.1.0.1,目的地址是10.2.0.3。数据报先发送到与互联网相连的路由器R1,R1对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器R1的全球地址125.1.2.3,目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为10.2.0.3,就交付给Y。

网络地址转换NAT

专用网内部的主机使用本地IP地址又想和互联网上的主机通信时,可以使用NAT来将本地IP转换为全球IP。在以前,NAT将本地IP和全球IP一一对应,这种方式下拥有n个全球IP地址的专用网内最多只可以同时有n台主机接入互联网。为了更有效地利用全球IP地址,现在常用的NAT转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球IP地址。使用端口号的NAT也叫作网络地址与端口转换NAPT。

路由器的结构

路由器从功能上可以划分为:路由选择和分组转发。
分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。

路由器分组转发流程

  • 从数据报的首部提取目的主机的IP地址D,得到目的网络地址N;
  • 若N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
  • 若路由表中有目的地址为D的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
  • 若路由器中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;
  • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
  • 否则,报文转发分组出错。

路由选择协议

路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。
互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。
可以把路由选择协议划分为两大类:

  • 自治系统内部的路由选择:RIP(路由信息协议 Routing information protocol)和OSPF(开放式最短路径优先 Open shortest pathfirst)
  • 自治系统间的路由选择:BGP(边界网关协议 border gateway protocol)

内部网关协议RIP
RIP是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为1。跳数最多为15,超过15位不可达。

RIP按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。

距离向量算法:

  • 对地址为X的相邻路由器发来的RIP报文,先修改报文中的所有项目,把下一跳字段中的地址改为X,并把所有的距离字段加1;
  • 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
    • 原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
    • 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
    • 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。

RIP协议实现简单,开销小,但是RIP能使用的最大距离为15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将次消息传送到所有的路由器。

内部网关协议OSPF
开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。
开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 具有以下特点:

  • 向本自治系统中的所有路由器发送信息,这种方法是洪泛法;
  • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示;
  • 只有当链路状态发生变化时,路由器才会发送信息。
    所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

外部网关协议BGP
BGP(Border gateway protocol, 边界网关协议)
AS之间的路由选择很困难,主要是由于:

  • 互联网的规模很大;
  • 各个AS内部使用不同的路由选择协议,无法准确定义路径的度量;
  • AS之间的路由选择必须考虑有关的策略,比如有些AS不愿意让其他AS经过。

BGP只能寻找一条比较好的路由,而不是最佳路由。
每个AS都必须配置BGP发言人,通过在两个相邻BGP发言人之间建立TCP连接来交换路由信息。

5 传输层

网络组只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。

UDP和TCP的特点

TCP是面向连接的,可靠的数据流传输,有流量控制,拥塞控制,提供全双工,传输单位是TCP报文段,每一条TCP连接都是点对点的(一对一的),安全性较高。

UDP是无连接的,不可靠的,尽最大可能交付的数据流传输,没有拥塞控制,传输单位是用户数据报,支持一对一,一对多,多对一和多对多的交互通信,安全性一般。

TCP对应的协议

FTP:定义了文件传输协议,使用21端口
Telnet:一种远程登录的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供DOS模式下的通信服务
SMTP:简单邮件传输协议,用于发送邮件,使用25号端口
POP3:它是与SMTP对应,POP3用于接收邮件,POP3协议所用的是110端口
HTTP:是从Web服务器传输超文本到本地浏览器的传送协议

UDP对应的协议

DNS:用于域名解析服务,将域名地址转换为IP地址,使用53号端口
SNMP:简单网络管理协议,用来管理网络设备,由于网络设备很多,无连接的服务就体现在其优势,使用的是161端口
TFTP(Trivial File Transfer Protocol):简单文件传输协议,该协议在熟知端口69上使用UDP服务。

同一个IP同一个端口可以同时建立tcp和udp的连接
同一个端口虽然udp和tcp的端口数字是一样的,但实质他们是不同的端口,所以是没有影响的,从底层实质分析,对于每一个连接内核维护了一个五元组,包含了源ip,目的ip、源端口目的端口、以及传输协议,在这里尽管前4项都一样,但是传输协议是不一样的,所以内核会认为是2个不同的连接,在ip层就会进行开始分流,tcp的走tcp,udp走udp。

UDP首部格式


首部字段8个字节,包括源端口、目的端口、长度和校验和。12字节的伪首部是为了计算检验和临时添加的。

TCP首部格式

  • 序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
  • 确认号 :期望收到的下一个报文段的序号。例如 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 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
  • 窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

TCP的三次握手


假设A为客户端,B为服务器端:

  • 首先B处理Listen(监听)状态,等待客户的连接请求;
  • A向B发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号x;
  • B收到连接请求报文,则向A发送连接确认报文,SYN=1,ACK=1,确认号为x+1,同时也选择一个初始的序号y;
  • A收到B的连接确认报文后,还要向B发出确认,确认号为y+1,序号为x+1;
  • B收到A的确认后,建立连接。

总结:主机A向服务器B发送连接请求;B对收到的报文进行确认,A再次对B的确认进行确认。

三次握手的原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误地打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长时间才会收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是前面那个滞留的连接请求还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

TCP的四次挥手


以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。

  • A发送连接释放报文,FIN=1;(finish)
  • B收到之后发出确认,此时TCP处于半关闭状态,B能向A发送数据但是A不能向B发送数据;
  • 当B不再需要连接时,发送连接释放报文,FIN=1;
  • A收到之后发出确认,进入TIME-WAIT状态,等到2MSL (Maximum Segment Lifetime,最大报文存活时间)后释放连接;
  • B收到A的确认后释放连接

四次挥手的原因

客户端发送了FIN连接释放报文之后,服务器收到了这个报文,就进入了CLOSE-WAIT状态,这个状态是为了让服务器发送还未传送完毕的数据,传送完毕之后,服务器会发送FIN连接释放报文。客户端收到服务器端的FIN报文后进入TIME-WAIT状态,此时并不是直接进入CLOSED状态,还需要等待2MSL,这么做有两个理由:

  • 确保最后一个确认报文能够到达,如果B没收到A发送来的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况的发生;
  • 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

TCP可靠传输

TCP使用超时重传来实现可靠传输:如果一个已经发送的报文在超时时间内没有收到确认,那么就重传这个报文段。

一个报文段从发送再到接收到确认所经过的时间称为往返时间RTT,加权平均往返时间RTTs计算如下:

其中,$0 \leqslant a<1$,RTTs 随着 a 的增加更容易受到 RTT 的影响。
超时时间 RTO 应该略大于 RTTs,TCP 使用的超时时间计算如下:

其中 RTTd 为偏差的加权平均值。

TCP滑动窗口

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其他信息设置自己的窗口大小。

发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。

TCP流量控制

流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率,将窗口字段设置为0,则发送方不能发送数据。

TCP拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高,因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不一样。流量控制是为了接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。

TCP主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
发送方需要维护一个叫做拥塞窗口(congestion window,cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

为了便于讨论,做如下假设:

  • 接收方有足够大的接收缓存,因此不会发生流量控制;
  • 虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。

慢开始与拥塞避免
发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 …

注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。
如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。

快重传与快恢复
在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。

在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。

在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。

慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。

6 应用层

域名系统

DNS是一个分布式数据库,提供了主机名和IP地址之间相互转化的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。
域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。

DNS域名系统工作原理

当DNS客户机需要在程序中使用域名时,需要查询DNS服务器来解析该域名,客户机发送的每条查询信息包括三条信息:包括指定的DNS域名,指定的查询类型,DNS域名的指定类别,DNS可以使用UDP或者TCP进行传输,使用的端口号是53,,大多数情况下使用UDP进行传输,在两种情况下会使用TCP进行传输:

  • 如果返回的响应超过512字节(UDP最大只支持512字节的数据)。
  • 区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。

文件传送协议FTP

FTP使用TCP进行连接,它需要两个连接来传送一个文件:

  • 控制连接:服务器打开端口号21等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答;
  • 数据连接:用来传送一个文件数据。

根据数据连接是否是服务器端主动建立,FTP有主动和被动两种模式:

  • 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为20,客户端的端口号随机,但是必须大于1024,因为0~1023是熟知端口号;

  • 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。

主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。

动态主机配置协议DHCP

DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要去手动配置 IP 地址等信息。
DHCP配置的内容不仅是IP地址,还包括子网掩码,网关IP地址。

DHCP工作过程如下:

  • 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
  • DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。
  • 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
  • DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。

远程登录协议

TELNET用于登录到远程主机上,并且远程主机上的输出也会返回。TELNET 可以适应许多计算机和操作系统的差异,例如不同操作系统系统的换行符定义。

电子邮件协议

一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。
邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。

SMTP
SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。MIME 并没有改动或者取代 SMTP,而是增加邮件主体的结构,定义了非 ASCII 码的编码规则。

POP3
POP3 (Post Office Protocol - Version 3 邮局协议版本3)的特点是只要用户从服务器上读取了邮件,就把该邮件删除。

IMAP
IMAP(Internet Mail Access Protocol, Internet邮件访问协议)协议中客户端和服务器上的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。

常用端口

Web页面请求过程

1 DHCP配置主机信息

  • 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
  • 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。
  • 该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。
  • 该数据报则被放置在 MAC 帧中,该帧具有目的地址 FFFFFFFFFF:FF,将广播到与交换机连接的所有设备。
  • 连接在交换机的 DHCP 服务器收到广播帧之后,不断地向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文,之后生成 DHCP ACK 报文,该报文包含以下信息:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码。该报文被放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。
  • 该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。
  • 主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。

2 ARP解析MAC地址

  • 主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。
  • 主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。
  • 该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。
  • 该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。
  • DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议。
  • 主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FFFFFFFFFF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。
  • 网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。

3 DNS解析域名

  • 知道了网关路由器的MAC地址之后,就可以继续DNS的解析过程了
  • 网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。
  • 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。
  • 到达 DNS 服务器之后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 数据库中查找待解析的域名。
  • 找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。

4 HTTP 请求页面

  • 有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。

  • 在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。

  • HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。

  • 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。

  • HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。

  • 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。

Reference:

  1. cyc2018博客:计算机网络
  2. 牛客网:计算机网络专题
  3. 计算机网络(第6版)(自顶向下方法)
Donate comment here
------------The End------------
0%