《计算机网络》复习笔记

计算机网络

前言

计算机网络,就是网络上一些主机,以及这些主机之间的连接的集合。这些主机应当是可以独立运行使用的,而相互连接指的是主机之间能够进行数据通信或信息交换。
事实上,网络是非常复杂的,需要在无法估计数量的主机之间进行数据交换,同时还要保证一定的性能和扩展性。因此主机之间需要有一些明确规定好的规则,这就是网络协议。网络协议主要有三个要素,语法、语义和同步。语法的含义是数据和控制信息的格式,语义则代表着发出不同的信息需要进行如何操作以及响应,同步则是事件实现顺序的说明。
为了让网络能够完成复杂的工作,经验表明进行分层设计是非常有效的方法。不同层次之间相互独立,共同完成工作,这样也有利于扩展和修改。我们把计算机网络的各层及其协议的集合,称为网络的体系结构。
OSI将网络划分为七层,而实质上得到广泛应用的是TCP/IP的四层结构,为了方便讲解,使用下图中c的五层协议。

在这里插入图片描述

在网络中,数据流动是如下图所示的,其中R路由器,H是主机,可以看到,路由器不处理运输层和应用层的内容,仅仅对最高到网络层的数据进行转发、控制等,后面会详细介绍。

五层协议

这部分的目的在于综合介绍,因此不会涉及到过多细节。下面介绍一下五层协议的体系结构中每一层的作用:

  1. 应用层
    应用层是计算机中的应用程序交互的最高层,定义的是应用程序间通信、交互的规则
  2. 运输层
    传输层的任务是负责两个主机的进程间通信通用的数据传输服务,常见的有两种协议,分别是TCP传输控制协议和UDP用户数据报协议。
  3. 网络层
    网络层使用IP数据报,将大量的异构的网络连接起来。
  4. 数据链路层
    将网络层交下来的IP数据报封装成帧,添加控制信息进行传送。
  5. 物理层
    物理层上传递数据的单位是比特,不负责解释传递的比特流的含义,仅仅负责传送。

性能指标

性能指标从不同的方面衡量计算机网络的性能。

  1. 速率
    速率指的是连接在计算机网络上的主机在数字信道上传送数据的速率,也称为数据率或比特率,单位是b/s(比特每秒),也写作bps(bit per second)。速率较高时,也是用kb/s, Mb/s, Gb/s, Tb/s等。
  2. 带宽
    带宽本来是指某个信号具有的频带宽度。在计算机网络中,带宽用来表示网络的通信线路传送数据的能力。表示的是在单位时间内从网络中的某一点到另一点所能通过的最高数据率,单位是比特每秒,与速率相似。
  3. 吞吐量
    吞吐量表示在单位时间内通过某个网络的数据量。
  4. 时延
    在网络中时延值得是数据从网络一端到达另一端需要的时间,有时也称为延迟或迟延。通常有以下四种类型的时延:
  • 发送时延:主机或路由器发送数据帧需要的时延,公式为 发 送 时 延 = 数 据 帧 长 度 ( b ) 发 送 速 率 ( b / s ) 发送时延=\frac{数据帧长度(b)}{发送速率(b/s)} =b/sb
  • 传播时延:传播时延是电磁波在信道中传播一定的距离需要花费的时间,公式为 传 播 时 延 = 信 道 长 度 ( m ) 电 磁 波 在 信 道 上 的 传 播 速 率 ( m / s ) 传播时延=\frac{信道长度(m)}{电磁波在信道上的传播速率(m/s)} =m/sm
  • 处理时延:分组进行处理的时间;
  • 排队时延:分组在网络中的路由器中排队的时间。
  1. 时延带宽积
    时延带宽积是传播时延和带宽相乘,就得到另一个很有用的度量:时延带宽积=传播时延×带宽,表示以比特为单位的链路长度。
  2. 往返时间RTT
    表示从发送方发送数据开始,到发送方收到来自接收方的确认总共经历的时间。
  3. 利用率
  • 信道利用率:某信道有百分之几的时间是被利用,有数据通过的。
  • 网络利用率:全网络的信道利用率的加权平均值。

物理层

我们从下往上介绍网络中的层,首先是物理层。物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体。物理层的主要任务为确定与传输媒体的接口有关的一些特性:

  1. 机械特性:指明接口所用接线器的形状和尺寸等,以及对物理装置进行严格的标准化的规定;
  2. 电气特性:指明在接口电缆上的各条线上出现的电压的范围;
  3. 功能特性:指明某条线上出现的某一电平的电压表示何种意义;
  4. 过程特性:指明对于不同功能的各种可能事件的出现顺序。

实现传输方式的转换,从并行传输转换为串行传输。

数据链路层

在数据链路层进行数据传送的单位是协议数据单元——帧,数据链路层协议通常规定了数据帧的数据字段最大长度,称为最大传送单元MTU。数据链路层将网络层的数据封装成帧并发送到链路上,以及把接受到的帧中的数据进行校验后取出并上交给网络层。数据链路层具有三个基本的问题:

  1. 封装成帧
    封装成帧的含义就是在数据的前后分别添加首部和尾部,而在接受时,将首部和尾部去除后取出数据,这就是帧定界的概念,使用时在帧的首部添加SOH(Start Of Header,十六进制编码为01),在帧的尾部添加EOT(End Of Transmission,十六进制编码为04)。
  2. 透明传输
    由于帧的首部尾部使用了专门的控制字符进行了标记,那么数据中如果出现了相同的字符,则容易出现帧定界的错误,导致接收到的数据不完整,例如在数据中已经包含了EOT,这时就无法判断是否到达了帧的结尾。透明传输就是为了解决这个问题,也就是让某一个实际存在的事物看起来好像不存在一样。解决的方法被称为字节填充或字符填充,就是在数据中出现控制字符的前面插入转移字符ESC(十六进制为1B),如果数据中出现了ESC,那么同样的插入一个ESC对其进行转义。
  3. 差错检测
    在实际的通信网络中,比特在传输的过程中可能出现差错,传输错误的比特占传输比特总数的比例就称为误码率BER(Bit Error Rate),因此需要对错误进行检测,目前广泛应用的检测方法是CRC(循环冗余校验)。CRC校验方法仅仅对帧的比特进行了校验,但对更复杂的传输错误:帧丢失、帧重复或帧失序问题无法检查,解决方法是增加帧编号、确认和重传机制。

数据链路层使用的信道主要有点对点信道和广播信道,下面分别介绍。

点对点信道

点对点协议PPP

PPP协议包含以下三个组成部分:

  1. 将IP数据报封装到串行链路的方法,PPP既支持异步链路,也支持面向比特的同步链路,IP数据报就是其中的信息部分,信息部分的长度受最大传送单元MTU的限制;
  2. 建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol);
  3. 网络控制协议NCP(Network Control Protocol)。
帧格式

在这里插入图片描述
上图是PPP协议的帧格式,PPP帧的首部第一个字节和尾部的第二个字节是标志字段,规定为0x7E(十六进制),标志字段就是帧的定界符。地址字段A和控制字段C实际上没有携带PPP帧的信息。首部的第4个字段是两个字节的协议信息,用来代表信息部分是什么类型的数据。尾部的第一个字段帧校验序列FCS用来存放CRC的结果。
当信息部分中出现了和标志字段一样的比特(0x7E)时,需要对其进行采取一定的措施,使得不出现歧义。在异步传输时,转义符被定义为0x7D,填充方法为字节填充,将信息字段中的每个0x7E的字节转变为(0x7D, 0x5E),每个0x7D的字节转变为(0x7D, 0x5D),如果在信息字段中出现ASCII的控制字符(数值小于0x20),则在字符前面加入0x7D字节。
在同步传输时,使用的方法是零比特填充,对整个信息字段,如果发现有5个连续的1,则立即填入一个0,而在读取时,读到5个连续的1时,则将后面的0删除。

工作状态


PPP协议在没有物理层连接时,处于链路静止状态,当建立了物理层连接后,就进入了链路建立状态。此时,PPP协议开始协商配置选项,发送配置请求帧,而链路的另一端可以返回配置确认帧、配置否认帧(理解选项但不接受)或配置拒绝帧(有的选项无法识别或需要协商)作为响应。
协商结束后,就进入鉴别状态,此时需要鉴别用户身份,若鉴别成功就进入网络层协议,并进行网络层的配置,配置完毕进入链路打开状态,可以进行通信。

广播信道

广播信道与点对点信道有一定的不同,广播信道可以进行一对多的通信,因此需要相应的控制。

CSMA/CD

在同一个总线上,由于连接了多台计算机,当两台及以上的计算机同时发送数据时,数据就容易有干扰,在以太网中使用的解决协调的协议就是CSMA/CD,意思是载波监听多点接入/碰撞检测。要点是:

  1. 多点接入:总线型网络;
  2. 载波监听:不断的检测信道,一旦检测到信道上有数据在传送就不发送数据;
  3. 碰撞检测:边发送边监听,如果发生了碰撞,就停止发送,并使用截断二进制指数退避算法确定重传时机。

因此,CSMA/CD协议只能用于双向交替通信,即半双工通信。截断二进制指数退避算法是在发送碰撞并停止发送后不立即重传数据,而是推迟随机的时间再发送数据,确定推迟的时间的方法如下:

  1. 确定基本退避时间,它就是争用期。以太网把争用期定为51.2us。对于10Mb/s以太网,在争用期内可发送512bit,即64字节。也可以说争用期是512比特时间。1比特时间就是发送1比特所需要的时间。所以这种时间单位与数据率密切相关。
  2. 从离散的整数集合[0,1,…,]中随机取出一个数,记为r。重传应推后的时间就是r倍的争用期。上面的参数k按下面的公式计算:
    k=Min[重传次数,10]
    可见当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,k就不在增大而一直等于10。
  3. 当重传达16次仍不能成功时(这表明同时打算发送的数据站太多,以致连续发生冲突),则丢弃该,并向高层报告。

另外,还存在一个强化碰撞的概念,也就是在发现发生了碰撞时,不仅仅要停止发送数据,还要再继续发送32比特或48比特的认为干扰信号。以太网中还规定了最小的帧间最小间隔为9.6us,相当于96比特的时间,是为了使得接收到数据帧的站能够来得及处理、清理缓存。

Mac
Mac地址

局域网中的硬件地址又称为物理地址或MAC地址,是一个用来确认网络设备位置的位址。
MAC地址的长度为48位(6个字节),通常表示为12个16进制数。MAC地址的前三个字节由IEEE的注册管理机构RA进行分配,这个号是组织唯一标识符OUI。最高字节(MSB)的低第二位(LSb)表示这个MAC地址是全局的还是本地的,即U/L(Universal/Local)位,如果为0,表示是全局地址,由全区进行管理,所有的OUI这一位都是0。
第一字节的最低位为I/G位(Individual/Group),为0时表示单个站的地址,为1时表示组地址,用于多播。

Mac帧格式


Mac帧的前两个字段是标志地址的字段,第三个字段是两个字节的类型字段,用来标识上一层使用的是什么协议。最后一个字段同样是使用CRC校验的帧校验序列FCS。

网络层

因特网中网络层的设计思路是:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络层不建立连接、不提供服务质量的承诺。

网际协议IP

IP协议指的是一种将不同组织、结构的主机及网络连接起来的协议,目的是忽略主机、网络之间的差异,使得互连的计算机网络在网络层上好像是一个统一的网络,这就是虚拟互连网络。
首先是IP协议的格式:

IP协议由首部和数据两部分组成,首部包含固定为20字节的固定长度部分,和长度可变的可选字段和填充。IP数据报通常将首部填充为4个字节为单位的长度。首部字段的含义如下:

  1. 版本:IP协议的版本;
  2. 首部长度:占4位,单位是32位(4字节),因此最小为20字节,最大为60字节,当首部长度不是整数4字节倍数时,需要填充字段加以填充;
  3. 区分服务:一般不使用;
  4. 总长度:指的是首部字段和数据之和的长度,单位为字节,占16位,因此可以表示的最大长度为 2 16 − 1 2^{16}-1 2161
  5. 标识:占16位,计数器,但不是序号,而是在分片时用于表示数据报的归属;
  6. 标志:最高位暂时没有意义,中间一位是DF(不能分片),只有当DF=0时可以分片,最低位为MF(还有分片),MF=0表示是分片的数据报的最后一个;
  7. 片偏移:片偏移指的是某片在原分组中的相对位置,以8个字节为偏移单位,也就是说分片的长度一定是8字节的整数倍;
  8. 生存时间:表示数据报在网络中的寿命,英文缩写为TTL,每经过一个路由器,就减1,为0则丢弃,防止数据报在一个网络中不断的循环传递;
  9. 协议:指的是使用的是什么协议,常用的有ICMP(1)、IGMP(2)、IP(4)、TCP(6)、EGP(8)、IGP(9)、UDP(17)、IPv6(41)、OSPF(89);
  10. 首部校验和:只对首部进行校验,而不校验数据部分,校验的方式是发送方将首部划分为16位字的序列,并将检验和字段置为0,用反码算数运算把所有16位字相加后,将得到的和的反码写入校验和字段。接收方则将首部的16位字使用反码算数运算相加,得到的和取反码,如果未改变,则和为0;
  11. 源地址和目的地址:IP地址
IP地址

IP地址的编址方式进过了三个阶段:1. 分类的IP地址;2. 划分子网;3. 构成超网,这里只讨论分类的IP地址,这样的IP地址是两集的,可以记为:{<网络号>,<主机号>}。通常划分为以下几类:

其中,A、B、C的网络号字段分别为1、2、3字节长度,并且在网络号的最前面有1~3位的类别位,分别为0、10、110,因此对应的主机号字段分别为3、2、1个字节长度。D类地址是用于多播的。
在IP地址中,全0表示的是本网络,是保留地址。而网络号为127的地址保留作为本地环回测试使用的地址。因此A类地址的可以指派的网络号是126个( 2 7 − 1 2^7-1 271)。A类地址的主机号占3字节,因此每一个A类网络中的最大主机数是 2 24 − 2 2^{24}-2 2242,因为全0表示的是本主机连接到的单个网络地址,全1表示的是所有的主机。
尽管B类地址的网络号不可能全0或全1,但B类地址依旧保留了128.0.0.0,因此可以指派的最小网络地址是128.1.0.0,数量为 2 14 − 1 2^{14}-1 2141,一个网络号对应的最大主机数为 2 16 − 2 2^{16}-2 2162
C类网络地址的192.0.0.0也是不指派的,因此可以指派的最小网络地址是192.0.1.0,因此可以指派的网络总数是 2 21 − 2 2^{21}-2 2212,每个地址对应的最大主机数是 2 8 − 1 2^8-1 281

IP地址与硬件地址

硬件地址(物理地址)是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的逻辑地址。在将数据传送到远端主机时,通常IP地址是不变的,变化的是局部的硬件地址,这里的变化指的是数据中的目的地址字段。在IP层抽象的互联网上只能看到数据报,在局域网的链路层只能看到MAC帧。因此也存在一定的问题,即知道了主机的IP地址,需要找到相应的硬件地址。通常使用的方法是地址解析协议ARP

分组转发

下面介绍一下在计算机网络中是如何转发分组的。

  1. 从数据报的首部取出目的主机的IP地址D,路由表中通常包含两个信息:目的网络地址和下一条地址,因此可以得出目的网络地址N。
  2. 若N是与路由器直接相连的某个网络地址,则直接交付,否则进入下一步。
  3. 若路由表中含有与目的地址D的特定主机路由,则将数据报传送给路由表中指明的下一跳路由器,否则进入下一步。
  4. 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器,否则进入下一步。
  5. 若路由表中存在默认路由,则把数据报传送给路由表中指明的默认路由器,否则进入下一步。
  6. 报告转发分组出错。

子网/超网

IP地址的设计存在一定的不合理的地方,首先是IP地址空间的利用率有时很低,其次为每一个物理网络分配一个网络号会使得路由表变得太大,最后是两级IP地址不够灵活。因此,后来又在IP地址中增加了一个子网号字段,变成三级IP地址。
划分子网的基本思路是,由拥有许多物理网络的单位对所属的物理网络划分为若干个子网,对外仍然表现为一个网络。划分的方法是从网络的主机号中借用若干位作为子网号,因此可以记为{<网络号>, <子网号>, <主机号>}。
凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器,此路由器根据目的网络号和子网号找到目的子网,把IP数据报交付目的主机。而如何找到子网并转发数据报呢,使用的方法就是子网掩码
通常使用默认子网掩码,A类的默认子网掩码为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0。使用子网掩码进行数据报转发时,需要将数据报中的IP地址与各网络的子网掩码进行“与”操作,看是否匹配,如果匹配则进行交付。
而使用CIDR划分超网,则不再使用A类、B类和C类以及划分子网的概念,而使用无分类的两级编址:{<网络前缀>,<主机号>}。此时使用最长前缀匹配的方法进行路由表中项目的对比。

网际控制报文协议ICMP


上图是ICMP协议的格式。ICMP报文有两种,分别是ICMP差错报告报文和ICMP询问报文,如下图。

使用ICMP协议的应用有PING,即分组网间探测,用来测试主机之间的连通性,PING使用了ICMP回送请求与会送回答报文,PING是应用层直接使用网络层ICMP的,没有通过运输层的TCP或UDP。
另一个广泛应用是traceroute,用来跟踪分组从源点到终点的路径。ICMP向目的主机发送报文,其中封装了不可用的UDP用户数据报,第一个数据报的生存时间TTL设置为1,这样路径上第一个路由器接收到时,把TTL减1后TTL为0,因此返回ICMP时间超过差错报文。不断增加TTL的大小,当到达目的主机时,目的主机由于无法理解UDP数据报内容,会向源主机发送ICMP终点不可达差错报告报文。

路由选择协议

本节讲解一下路由选择协议,路由选择协议就是得出路由表中的路由,核心就是路由算法,算法需要正确、完整、高效、简单、鲁棒、稳定、公平、最佳等。这样听起来路由算法是很难得到的,但实际上并没有想的那么困难。首先由于因特网的规模非常大,并且许多单位不希望外界了解单位内部的网络信息。因此因特网使用的是分层网络协议,并且因特网将路由选择协议划分为两类:内部网关协议IGP和外部网关协议EGP。

内部网关协议RIP

RIP(Routing Information Protocol,路由信息协议)是一种分布式的基于距离向量的路由选择协议,要求网络中的每一个路由器都要维护从它自己到达其他每一个目的网络的距离。RIP协议中定义的距离就是跳数,其允许一条路径最多只能包含15个路由器,距离等于16时不可达,因此RIP只适用于小型互联网。
RIP协议的特点是:

  1. 仅和相邻路由器交换信息;
  2. 交换的是本路由器知道的全部信息,即自己的路由表;
  3. 按照固定的时间间隔交换路由信息。

路由表中的信息就是到某个网络的最短距离,以及应经过的下一跳地址。更新的原则是找出到每个网络的最短距离。因此是距离向量算法:对于相邻路由器X发过来的RIP报文,先修改报文中的所有项目,把下一跳地址修改为X,并把所有的距离字段加1,因此每个项目包含三个数据:到达目的网络N,距离为d,下一跳路由器是X。对修改后的RIP报文,如果原来的路由表中没有目的网络N,则加入到路由表中。如果下一跳地址是X或距离更小,则进行更新。
这么做的原因是为了便于进行路由表的更新,使用最新的数据。
RIP协议最大的优点是实现简单,开销较小,但也存在坏消息传播得慢的问题。因为只有当距离到达16时才会知道不可达,而此时不会将更新信息立即发送给其他路由器,这样其他路由器在发送其路由表时,容易误以为其他路由器可达某个实际上已经不可达的主机。

内部网关协议OSPF

OSPF协议的名称是开放最短路径优先,最主要的特征是使用了分布式的链路状态协议。主要的要点是:

  1. 向自治系统中的所有路由器发送信息,使用的方法是洪泛法,即通过所有输出端口向所有相邻的路由器发送信息,所有相邻的路由器又再将此信息发往其所有的相邻路由器;
  2. 发送的信息是与本路由器相邻的所有路由器的链路状态,这只是路由器所知的部分信息;
  3. 只有当链路状态发生变化时才发送。

因此所有的路由器最终都能建立一个全网的拓扑结构图,另外,OSPF还将一个自治系统划分为若干个更小的区域,使用层次结构的区域划分,在上层的区域叫做主干区域,主干区域的作用是用来联通其他在下层的区域,从其他区域来的信息由区域边界路由器进行概括,在主干区域内的路由器叫做主干路由器。
OSPF直接用IP数据报进行传送。共有以下五种分组类型:

  1. 问候分组:用来发现和维持可达性,相邻路由器每隔10秒交换一次以确认可达性;
  2. 数据库描述分组:给出自己的链路状态数据库的摘要信息;
  3. 链路状态请求:请求某些链路状态项目的详细信息;
  4. 链路状态更新:使用洪泛法对全网更新链路状态;
  5. 链路状态确认:确认链路更新分组。
外部网关协议BGP

在整个因特网上,因特网的规模较大,不同的自治系统之间有自身的规定,因此需要一个外部网关协议,外部网关协议主要关注可达性,而并非要寻找一条最佳路由。
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。

运输层

运输层向它上面的应用层提供通信服务,属于面向通信部分的最高层,用户功能中的最底层。从运输层的角度来看,通信的真正端点不是主机,而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。因此网络层和运输层有明显的区别,网络层是为主机之间提供逻辑通信,而运输层是为应用程序之间提供端到端的逻辑通信。
运输层包含两个协议,一个是无连接的用户数据报协议UDP,另一个是有连接的传输控制协议TCP。按照OSI的属于,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元,而在TCP/IP中,分别称为TCP报文段或UDP用户数据报。下图是使用UDP和TCP协议的各种应用及应用层协议:

运输层使用协议端口号即端口来实现复用和分用。端口号又分为服务器端使用的端口号和客户端使用的端口号,服务器端使用的端口号还分为熟知端口号和登记端口号。客户端使用的端口号是在客户进程运行时动态选择的短暂端口号。

UDP

UDP的主要特点是:1. 无连接;2. 尽最大努力交付;3. 面向报文;4. 没有拥塞控制;5. 支持一对一、一对多、多对一和多对多的交互通信;6. 首部开销小。首部格式如下图:

其中伪首部是在计算校验和时使用的,不是UDP数据报真正的首部。

TCP

TCP最主要的特点是1. 面向连接的传输层协议;2. 每一条连接只能有两个端点;3. 提供可靠交付的服务;4. 提供全双工通信;5. 面向字节流。首部格式如下图:

这里只对部分字段进行讲解:

  1. 序号:序号使用mod 2 3 2 2^32 232运算,TCP中每个字节都要按顺序编号;
  2. 确认号:期望收到对方下一个报文段的第一个数据字节的序号;
  3. 数据偏移:首部长度;
  4. 紧急URG:URG=1时为紧急数据,需要尽快传送;
  5. 确认ACK:仅当ACK=1时确认号字段才有效;
  6. 推送:尽快的交付给应用程序;
  7. 复位:表示出现严重差错,必须释放连接重新建立,还表示拒绝非法的报文段或拒绝打开一个连接;
  8. 同步:在连接建立时用来同步序号;
  9. 终止:用来释放一个连接;
  10. 窗口:指的是发送本报文段的接收窗口;
  11. 校验和:和UDP一样;
  12. 紧急指针:仅在URG=1时有意义,指出紧急数据的字节数。
可靠传输

首先定义一下可靠传输,可靠传输指的就是采用一系列技术来保障信息在发送方和接收方准确、精确的传输。最理想的传输有以下两个特点:

  1. 传输信道不产生差错;
  2. 不管发送方是否降低发送数据的速度,不需要采取任何措施就能够实现可靠传输。

下面介绍一下TCP如何实现可靠传输的。首先是停止等待协议,停止等待协议就是每发送一个分组就停止发送,等待确认,确认后再发送下一个分组。因此在发送了分组时,使用一个超时计时器来计时,如果超时计时器到期前收到了确认,就撤销已设置的超时计时器,否则重传。如果收到了重复的分组时,要丢弃并发送确认。如果收到了重复的确认,则丢弃。

实现

从上面介绍的停止等待协议的过程可以看出,停止等待协议的效率是比较低,要想提高效率,在发送分组时就不应该等待收到确认后再发送下一个分组,而应该连续发送分组,提高发送的效率。因此,发送方需要维护一个发送窗口,在发送窗口内存在多个分组,是允许发送的分组,当发送并接收到窗口中的分组的确认时,将滑动窗口向未发送的分组方向进行滑动。一般采用的是累积确认的方式,即接收方不需要对收到的每个分组进行确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,表示到这个分组为止的所有分组都接收到了。这就是连续ARQ协议
用一张图表示连续ARQ协议及协议中的滑动窗口:

发送窗口的后沿可能不动(没有收到确认)和前移(收到了新的确认),不可能向后移动,因为不能撤销已收到的确认。前沿则通常不断的向前移动或不动,一般不可能向后收缩。

拥塞控制
  1. 慢开始和拥塞避免

在开始时由小到大逐渐增大发送窗口,一开始时cwnd=1,发送第一个报文段并接收到确认,将cwnd从1增大到2,每接收到一个对新报文段的确认后,把拥塞窗口增加多一个MSS的数值。因此使用慢开始算法,每经过一个传输轮次,拥塞窗口cwnd就加倍。由于这样的加倍是指数级的,因此还需要设置一个慢开始门限ssthresh,当cwnd<sshresh时,使用慢开始算法,当cwnd=sshresh时,可以使用慢开始算法也可以使用拥塞避免算法,当cwnd>sshresh时,使用拥塞避免算法。拥塞避免算法的思路是让cwnd缓慢增大,每经过一个往返时间就把拥塞窗口加1,而不是加倍。
无论在慢开始阶段开始拥塞避免阶段,只要判断网络出现拥塞,就把慢开始门限设置为拥塞时发送方窗口值的一半(大于等于2),并把拥塞窗口重新设置为1。以上两种算法合称AIMD算法(加法增大乘法减小)。

  1. 快重传和快恢复

在正常情况下,只有超时时才重传。在使用快重传时,每收到一个失序的报文段立即发出重复确认,发送方一连收到三个重复确认就立即重传对方尚未收到的报文段。并且同时执行快恢复算法,将慢开始门限减半,把cwnd设置为慢开始门限减半后的数值,并开始执行拥塞避免算法。

运输连接管理

本节讲解一下TCP是如何建立连接和释放连接的,这是TCP进行运输连接管理的重要内容。

三次握手


上图假设A运行的是TCP客户程序,主动打开连接,B运行的是TCP服务器程序,被动打开连接。
B的TCP服务器进程先创建传输控制块TCB,服务器进程处于LISTEN状态,等待客户的连接请求。A的TCP客户进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段,此时首部中的同部位SYN=1,同时选择并消耗掉一个序号seq=x,此时不携带数据。此时A进入SYN-SENT(同步已发送)状态
B收到连接请求报文段后,如同意建立连接,就向A发送确认,在确认报文段中把SYN和ACK都置1,确认号ack=x+1,同时也为自己选择一个初始序号seq=y,这个报文段不携带数据,但同时消耗一个序号。此时B进入SYN-RCVD(同步收到)状态。
TCP客户进程收到确认后,还要给出对确认的确认,确认报文段的ACK=1,确认号ack=y+1,而自己的序号seq=x+1.ACK报文段可以携带数据,如果不携带数据不消耗序号。这时TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态。当B收到A的确认后,也进入ESTABLISHED状态。

四次挥手


当数据传输结束后,通信双方都可释放连接,此时A和B都处于ESTABLISHED状态,A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,连接释放报文段终止控制位FIN置1,序号seq=u,等于前面传送的数据的最后一个字节的序号加1。此时A进入FIN-WAIT-1状态,等待确认。FIN报文段即使不携带数据,也消耗序号。
B收到连接释放报文段后发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于前面传送过的数据的最后一个字节的序号加1。这时B进入CLOSE-WAIT(关闭等待状态),此时TCP连接处于半关闭状态,此时A已经不再发送数据了,但B若发送数据A仍会接收。此时A收到确认后,进入FIN-WAIT-2状态,等待连接释放报文段。
若B的数据已发送完毕,准备释放连接,此时B发出连接释放报文段,FIN=1,重复上次发送的确认号ack=u+1,此时B进入LAST-ACK(最后确认)状态,等待A的确认。A必须对B的连接释放报文段进行确认,确认报文段中置ACK为1,确认号ack=w+1,而自己的序号是seq=u+1,并进入TIME-WAIT(时间等待)状态,此时TCP连接还没有释放掉,必须等待时间等待计时器设置的时间后,才进入CLOSED状态。

应用层

本节简单介绍几个应用层的实例,还有一些没有介绍的如:HTTP协议、电子邮件、动态主机配置协议DHCP等读者可以在网上搜寻资料进行学习。

DNS域名系统

用户在与互联网上的主机通信时,必须知道对方的 IP 地址。但是每个 IP 地址都是由 32 位的二进制组成,对于用户记忆是非常不方便的。因此实际上互联网中的主机通常不仅仅只有 IP 地址,还有对应的便于用户记忆的主机名字https://www.csdn.net/,也就是域名。其IP地址就是47.95.164.112,对于用户而言域名更容易记忆。

域名结构

域名同样是有结构的,图如下:
在这里插入图片描述
每个互联网上的主机域名都对应一个 IP 地址,并且这个域名在互联网中是唯一的。

域名服务器及域名解析

在使用域名时,要如何知道域名对应的IP地址呢,这就是DNS协议的功能了,DNS通常是向域名服务器进行请求,域名服务器内有登记的域名和对应的IP地址。通过向域名服务器查询,可以获得域名对应的IP地址。域名服务器分为以下几种类型:

  1. 主域名服务器
    负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。
  2. 辅助域名服务器
    当主域名服务器出现故障、关闭或负载过重时,辅助域名服务器作为主域名服务器的备份提供域名解析服务。辅助域名服务器中的区域文件中的数据是从另外的一台主域名服务器中复制过来的,是不可以修改的。
  3. 缓存域名服务器
    从某个远程服务器取得每次域名服务器的查询回答,一旦取得一个答案就将它放在高速缓存中,以后查询相同的信息就用高速缓存中的数据回答,缓存域名服务器不是权威的域名服务器,因为它提供的信息都是间接信息。
  4. 转发域名服务器
    负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。

根据域名服务器作用划分:

  1. 根域名服务器
    根域名服务器(root name server)是最高层次的域名服务器,也是最重要的域名服务器,全球共设有 13 个根域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。当其他的域名服务器无法解析域名时,会首先求助于根域名服务器。假如所有的根域名服务器都挂了,那么整个互联网的 DNS 系统就无法工作了,因为采取的分布式结构,所以只要有一台能够正常工作,互联网的 DNS 系统就不会受到影响。
  2. 顶级域名服务器(TLD)
    顶级域名服务器(top-level-domain) 负责管理在该顶级域名服务器上注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答。
  3. 权限域名服务器
    它是负责一个区的域名服务器,当一个权限域名服务器没有给出最后的查询结果时,就会告诉发出查询请求的 DNS 客户,下一步应当查询哪一个权限域名服务器。
  4. 本地域名服务器
    本地域名服务器(local name server)并不属于上面图示的服务器层次结构,但是它在域名服务系统却发挥着至关重要的作用。当一台主机发出 DNS 查询请求时,这个查询请求报文就会发送给本地域名服务器。每一个互联网提供者,或者一个大学,甚至小到一个学院,都可以拥有一台本地域名服务器,这种域名服务器也被称为默认域名服务器。我们本地网络服务连接的域名服务器指的就是本地域名服务器。

在进行域名解析时,查询的顺序通常是本地域名服务器、根域名服务器、顶级域名服务器,最后是权限域名服务器。查询的方式有迭代查询和递归查询。

文件传送协议FTP

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

远程终端协议TELNET

Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

工作过程

使用Telnet协议进行远程登录时需要满足以下条件:在本地计算机上必须装有包含Telnet协议的客户程序;必须知道远程主机的Ip地址或域名;必须知道登录标识与口令。
Telnet远程登录服务分为以下4个过程:

  1. 本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;
  2. 将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据包;
  3. 将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
  4. 最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。

虽然Telnet较为简单实用也很方便,但是在格外注重安全的现代网络技术中,Telnet并不被重用。原因在于Telnet是一个明文传送协议,它将用户的所有内容,包括用户名和密码都明文在互联网上传送,具有一定的安全隐患。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法回答关于"计算机网络复习笔记 王道"的问题。我的回答只基于提供的引用内容。如果您有其他关于计算机网络的问题,我会很乐意帮助您回答。 #### 引用[.reference_title] - *1* [计算机网络笔记(王道考研) 第一章:计算机网络体系结构](https://blog.csdn.net/zimuzi2019/article/details/126634216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [计算机网络笔记(王道考研) 第四章:网络层](https://blog.csdn.net/zimuzi2019/article/details/126634461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [计算机网络笔记(王道考研) 第五章:传输层](https://blog.csdn.net/zimuzi2019/article/details/126634511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值