❶ 计算机网络
数据链路层差错控制问题。但提问问题的背景信息太少,不太清楚你的问题前提条件都还有什么。只能试着按照一般情况解答:
1、帧序号用3比特编号。当发送序号占用3个比特时,就可组成共有8个不同的发送序号,从000到111。当数据帧的发送序号为111时,下一个发送序号就又是000。
2、默认该网络采用的是连续ARQ协议的工作原理。要点就是:在发送完一个数据帧后,不是停下来等待应答帧,而是可以连续再发送若干个数据帧。如果这时收到了接收端发来的确认帧,那么还可以接着发送数据帧。由于减少了等待时间,整个通信的吞吐量就提高了。
3、根据题意,我们现在设发送序号用3比特来编码,即发送的帧序号可以有从0到7等8个不同的序号;又设发送窗口WT=5。那么,发送端在开始发送时,发送窗口将指明:即使在未收到对方确认信息的情况下,发送端可连续发送#0帧~#4帧等5个帧。若发送端发完了这5个帧(#0帧~#4帧)但仍末收到确认信息,则由于发送窗口已填满,就必须停止发送而进入等待状态。当收到0号帧的确认信息后,发送窗口就可以向前移动1个号,这时,#5帧已落人到发送窗口之内,因此发送端现在就可发送这个#5帧。其后假设又有3帧(#1至#3帧)的确认帧陆续到达发送端。于是发送窗口又可再向前移动3个号。此时,发送端又可继续发送#6帧、#7帧和新的#0帧。
4、当用 n个比特进行编号时,若发送窗口的大小为WT,接收窗口的大小为WR,则只有WT≤2的n次方-1和WT+WR≤2的n次方成立时,滑动窗口协议才能正常工作。
但根据题目描述举例,设n=3,WT=WR=5,当对某一序号的数据帧的 ACK 丢失时,接收端很可能将把这个#数据帧当做一个新的数据帧收下来,因此滑动窗口很可能不能正常工作。
5、选择重传ARQ协议
可设法只重传出现差错的数据帧或者是定时器超时的数据帧。但这时必须加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机。这就是选择重传ARQ协议。
使用选择重传ARQ协议可以避免重复传送那些本来已经正确到达接收端的数据帧。但我们付出的代价是在接收端要设置具有相当容量的缓存空间,这在许多情况下是不够经济的。
正因如此,选择重传ARQ协议在目前就远没有连续则协议使用得那么广泛。今后存储器芯片的价格会更加便宜,选择重传ARQ协议还是有可能受到更多的重视。 .
对于选择重传ARQ协议,接收窗口显然不应该大于发送窗口。若用n比特进行编号,则接收窗口的最大值必须满足:WR≤2n-1 。当接收窗口队为最大值时,即WR=2n-1。例如:在n=3时,可以算出WT=WR=4。
❷ 关于计算机网络的最简单的理解,说说看
以我大学考试的理解,无非是对于一些算法的理解(比如CRC算法、拥塞)和协议的分析(IPv4协议分析)
❸ 计算机网络自学笔记:TCP
如果你在学习这门课程,仅仅为了理解网络工作原理,那么只要了解TCP是可靠传输,数据传输丢失时会重传就可以了。如果你还要参加研究生考试或者公司面试等,那么下面内容很有可能成为考查的知识点,主要的重点是序号/确认号的编码、超时定时器的设置、可靠传输和连接的管理。
1 TCP连接
TCP面向连接,在一个应用进程开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立连接。连接的实质是双方都初始化与连接相关的发送/接收缓冲区,以及许多TCP状态变量。
这种“连接”不是一条如电话网络中端到端的电路,因为它们的状态完全保留在两个端系统中。
TCP连接提供的是全双工服务 ,应用层数据就可在从进程B流向进程A的同时,也从进程A流向进程B。
TCP连接也总是点对点的 ,即在单个发送方与单个接收方之间建立连接。
一个客户机进程向服务器进程发送数据时,客户机进程通过套接字传递数据流。
客户机操作系统中运行的 TCP软件模块首先将这些数据放到该连接的发送缓存里 ,然后会不时地从发送缓存里取出一块数据发送。
TCP可从缓存中取出并放入报文段中发送的数据量受限于最大报文段长MSS,通常由最大链路层帧长度来决定(也就是底层的通信链路决定)。 例如一个链路层帧的最大长度1500字节,除去数据报头部长度20字节,TCP报文段的头部长度20字节,MSS为1460字节。
报文段被往下传给网络层,网络层将其封装在网络层IP数据报中。然后这些数据报被发送到网络中。
当TCP在另一端接收到一个报文段后,该报文段的数据就被放人该连接的接收缓存中。应用程序从接收缓存中读取数据流(注意是应用程序来读,不是操作系统推送)。
TCP连接的每一端都有各自的发送缓存和接收缓存。
因此TCP连接的组成包括:主机上的缓存、控制变量和与一个进程连接的套接字变量名,以及另一台主机上的一套缓存、控制变量和与一个进程连接的套接字。
在这两台主机之间的路由器、交换机中,没有为该连接分配任何缓存和控制变量。
2报文段结构
TCP报文段由首部字段和一个数据字段组成。数据字段包含有应用层数据。
由于MSS限制了报文段数据字段的最大长度。当TCP发送一个大文件时,TCP通常是将文件划分成长度为MSS的若干块。
TCP报文段的结构。
首部包括源端口号和目的端口号,它用于多路复用/多路分解来自或送至上层应用的数据。另外,TCP首部也包括校验和字段。报文段首部还包含下列字段:
32比特的序号字段和32比特的确认号字段。这些字段被TCP发送方和接收方用来实现可靠数据传输服务。
16比特的接收窗口字段,该字段用于流量控制。该字段用于指示接收方能够接受的字节数量。
4比特的首部长度字段,该字段指示以32比特的字为单位的TCP首部长度。一般TCP首部的长度就是20字节。
可选与变长的选项字段,该字段用于当发送方与接收方协商最大报文段长度,或在高速网络环境下用作窗口调节因子时使用。
标志字段ACK比特用于指示确认字段中的ACK值的有效性,即该报文段包括一个对已被成功接收报文段的确认。 SYN和FIN比特用于连接建立和拆除。 PSH、URG和紧急指针字段通常没有使用。
•序号和确认号
TCP报文段首部两个最重要的字段是序号字段和确认号字段。
TCP把数据看成一个无结构的但是有序的字节流。TCP序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。
一个报文段的序号是该报文段首字节在字节流中的编号。
例如,假设主机A上的一个进程想通过一条TCP连接向主机B上的一个进程发送一个数据流。主机A中的TCP将对数据流中的每一个字节进行编号。假定数据流由一个包含4500字节的文件组成(可以理解为应用程序调用send函数传递过来的数据长度),MSS为1000字节(链路层一次能够传输的字节数),如果主机决定数据流的首字节编号是7。TCP模块将为该数据流构建5个报文段(也就是分5个IP数据报)。第一个报文段的序号被赋为7;第二个报文段的序号被赋为1007,第三个报文段的序号被赋为2007,以此类推。前面4个报文段的长度是1000,最后一个是500。
确认号要比序号难理解一些。前面讲过,TCP是全双工的,因此主机A在向主机B发送数据的同时,也可能接收来自主机B的数据。从主机B到达的每个报文段中的序号字段包含了从B流向A的数据的起始位置。 因此主机B填充进报文段的确认号是主机B期望从主机A收到的下一报文段首字节的序号。
假设主机B已收到了来自主机A编号为7-1006的所有字节,同时假设它要发送一个报文段给主机A。主机B等待主机A的数据流中字节1007及后续所有字节。所以,主机B会在它发往主机A的报文段的确认号字段中填上1007。
再举一个例子,假设主机B已收到一个来自主机A的包含字节7-1006的报文段,以及另一个包含字节2007-3006的报文段。由于某种原因,主机A还没有收到字节1007-2006的报文段。
在这个例子中,主机A为了重组主机B的数据流,仍在等待字节1007。因此,A在收到包含字节2007-3006的报文段时,将会又一次在确认号字段中包含1007。 因为TCP只确认数据流中至第一个丢失报文段之前的字节数据,所以TCP被称为是采用累积确认。
TCP的实现有两个基本的选择:
1接收方立即丢弃失序报文段;
2接收方保留失序的字节,并等待缺少的字节以填补该间隔。
一条TCP连接的双方均可随机地选择初始序号。 这样做可以减少将那些仍在网络中的来自两台主机之间先前连接的报文段,误认为是新建连接所产生的有效报文段的可能性。
•例子telnet
Telnet由是一个用于远程登录的应用层协议。它运行在TCP之上,被设计成可在任意一对主机之间工作。
假设主机A发起一个与主机B的Telnet会话。因为是主机A发起该会话,因此主机A被标记为客户机,主机B被标记为服务器。用户键入的每个字符(在客户机端)都会被发送至远程主机。远程主机收到后会复制一个相同的字符发回客户机,并显示在Telnet用户的屏幕上。这种“回显”用于确保由用户发送的字符已经被远程主机收到并处理。因此,在从用户击键到字符显示在用户屏幕上之间的这段时间内,每个字符在网络中传输了两次。
现在假设用户输入了一个字符“C”,假设客户机和服务器的起始序号分别是42和79。前面讲过,一个报文段的序号就是该报文段数据字段首字节的序号。因此,客户机发送的第一个报文段的序号为42,服务器发送的第一个报文段的序号为79。前面讲过,确认号就是主机期待的数据的下一个字节序号。在TCP连接建立后但没有发送任何数据之前,客户机等待字节79,而服务器等待字节42。
如图所示,共发了3个报文段。第一个报文段是由客户机发往服务器,其数据字段里包含一字节的字符“C”的ASCII码,其序号字段里是42。另外,由于客户机还没有接收到来自服务器的任何数据,因此该报文段中的确认号字段里是79。
第二个报文段是由服务器发往客户机。它有两个目的:第一个目的是为服务器所收到的数据提供确认。服务器通过在确认号字段中填入43,告诉客户机它已经成功地收到字节42及以前的所有字节,现在正等待着字节43的出现。第二个目的是回显字符“C”。因此,在第二个报文段的数据字段里填入的是字符“C”的ASCII码,第二个报文段的序号为79,它是该TCP连接上从服务器到客户机的数据流的起始序号,也是服务器要发送的第一个字节的数据。
这里客户机到服务器的数据的确认被装载在一个服务器到客户机的数据的报文段中,这种确认被称为是捎带确认.
第三个报文段是从客户机发往服务器的。它的唯一目的是确认已从服务器收到的数据。
3往返时延的估计与超时
TCP如同前面所讲的rdt协议一样,采用超时/重传机制来处理报文段的丢失问题。最重要的一个问题就是超时间隔长度的设置。显然,超时间隔必须大于TCP连接的往返时延RTT,即从一个报文段发出到收到其确认时。否则会造成不必要的重传。
•估计往返时延
TCP估计发送方与接收方之间的往返时延是通过采集报文段的样本RTT来实现的,就是从某报文段被发出到对该报文段的确认被收到之间的时间长度。
也就是说TCP为一个已发送的但目前尚未被确认的报文段估计sampleRTT,从而产生一个接近每个RTT的采样值。但是,TCP不会为重传的报文段计算RTT。
为了估计一个典型的RTT,采取了某种对RTT取平均值的办法。TCP据下列公式来更新
EstimatedRTT=(1-)*EstimatedRTT+*SampleRTT
即估计RTT的新值是由以前估计的RTT值与sampleRTT新值加权组合而成的。
参考值是a=0.125,因此是一个加权平均值。显然这个加权平均对最新样本赋予的权值
要大于对老样本赋予的权值。因为越新的样本能更好地反映出网络当前的拥塞情况。从统计学观点来讲,这种平均被称为指数加权移动平均
除了估算RTT外,还需要测量RTT的变化,RTT偏差的程度,因为直接使用平均值设置计时器会有问题(太灵敏)。
DevRTT=(1-β)*DevRTT+β*|SampleRTT-EstimatedRTT|
RTT偏差也使用了指数加权移动平均。B取值0.25.
•设置和管理重传超时间隔
假设已经得到了估计RTT值和RTT偏差值,那么TCP超时间隔应该用什么值呢?TCP将超时间隔设置成大于等于估计RTT值和4倍的RTT偏差值,否则将造成不必要的重传。但是超时间隔也不应该比估计RTT值大太多,否则当报文段丢失时,TCP不能很快地重传该报文段,从而将给上层应用带来很大的数据传输时延。因此,要求将超时间隔设为估计RTT值加上一定余量。当估计RTT值波动较大时,这个余最应该大些;当波动比较小时,这个余量应该小些。因此使用4倍的偏差值来设置重传时间。
TimeoutInterval=EstimatedRTT+4*DevRTT
4可信数据传输
因特网的网络层服务是不可靠的。IP不保证数据报的交付,不保证数据报的按序交付,也不保证数据报中数据的完整性。
TCP在IP不可靠的尽力而为服务基础上建立了一种可靠数据传输服务。
TCP提供可靠数据传输的方法涉及前面学过的许多原理。
TCP采用流水线协议、累计确认。
TCP推荐的定时器管理过程使用单一的重传定时器,即使有多个已发送但还未被确认的报文段也一样。重传由超时和多个ACK触发。
在TCP发送方有3种与发送和重传有关的主要事件:从上层应用程序接收数据,定时器超时和收到确认ACK。
从上层应用程序接收数据。一旦这个事件发生,TCP就从应用程序接收数据,将数据封装在一个报文段中,并将该报文段交给IP。注意到每一个报文段都包含一个序号,这个序号就是该报文段第一个数据字节的字节流编号。如果定时器还没有计时,则当报文段被传给IP时,TCP就启动一个该定时器。
第二个事件是超时。TCP通过重传引起超时的报文段来响应超时事件。然后TCP重启定时器。
第三个事件是一个来自接收方的确认报文段(ACK)。当该事件发生时,TCP将ACK的值y与变量SendBase(发送窗口的基地址)进行比较。TCP状态变量SendBase是最早未被确认的字节的序号。就是指接收方已正确按序接收到数据的最后一个字节的序号。TCP采用累积确认,所以y确认了字节编号在y之前的所有字节都已经收到。如果Y>SendBase,则该ACK是在确认一个或多个先前未被确认的报文段。因此发送方更新其SendBase变量,相当于发送窗口向前移动。
另外,如果当前有未被确认的报文段,TCP还要重新启动定时器。
快速重传
超时触发重传存在的另一个问题是超时周期可能相对较长。当一个报文段丢失时,这种长超时周期迫使发送方等待很长时间才重传丢失的分组,因而增加了端到端时延。所以通常发送方可在超时事件发生之前通过观察冗余ACK来检测丢包情况。
冗余ACK就是接收方再次确认某个报文段的ACK,而发送方先前已经收到对该报文段的确认。
当TCP接收方收到一个序号比所期望的序号大的报文段时,它认为检测到了数据流中的一个间隔,即有报文段丢失。这个间隔可能是由于在网络中报文段丢失或重新排序造成的。因为TCP使用累计确认,所以接收方不向发送方发回否定确认,而是对最后一个正确接收报文段进行重复确认(即产生一个冗余ACK)
如果TCP发送方接收到对相同报文段的3个冗余ACK.它就认为跟在这个已被确认过3次的报文段之后的报文段已经丢失。一旦收到3个冗余ACK,TCP就执行快速重传 ,
即在该报文段的定时器过期之前重传丢失的报文段。
5流量控制
前面讲过,一条TCP连接双方的主机都为该连接设置了接收缓存。当该TCP连接收到正确、按序的字节后,它就将数据放入接收缓存。相关联的应用进程会从该缓存中读取数据,但没必要数据刚一到达就立即读取。事实上,接收方应用也许正忙于其他任务,甚至要过很长时间后才去读取该数据。如果应用程序读取数据时相当缓慢,而发送方发送数据太多、太快,会很容易使这个连接的接收缓存溢出。
TCP为应用程序提供了流量控制服务以消除发送方导致接收方缓存溢出的可能性。因此,可以说 流量控制是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读速率相匹配。
前面提到过,TCP发送方也可能因为IP网络的拥塞而被限制,这种形式的发送方的控制被称为拥塞控制(congestioncontrol)。
TCP通过让接收方维护一个称为接收窗口的变量来提供流量控制。接收窗口用于告诉发送方,该接收方还有多少可用的缓存空间。因为TCP是全双工通信,在连接两端的发送方都各自维护一个接收窗口变量。 主机把当前的空闲接收缓存大小值放入它发给对方主机的报文段接收窗口字段中,通知对方它在该连接的缓存中还有多少可用空间。
6 TCP连接管理
客户机中的TCP会用以下方式与服务器建立一条TCP连接:
第一步: 客户机端首先向服务器发送一个SNY比特被置为1报文段。该报文段中不包含应用层数据,这个特殊报文段被称为SYN报文段。另外,客户机会选择一个起始序号,并将其放置到报文段的序号字段中。为了避免某些安全性攻击,这里一般随机选择序号。
第二步: 一旦包含TCP报文段的用户数据报到达服务器主机,服务器会从该数据报中提取出TCPSYN报文段,为该TCP连接分配TCP缓存和控制变量,并向客户机TCP发送允许连接的报文段。这个允许连接的报文段还是不包含应用层数据。但是,在报文段的首部却包含3个重要的信息。
首先,SYN比特被置为1。其次,该 TCP报文段首部的确认号字段被置为客户端序号+1最后,服务器选择自己的初始序号,并将其放置到TCP报文段首部的序号字段中。 这个允许连接的报文段实际上表明了:“我收到了你要求建立连接的、带有初始序号的分组。我同意建立该连接,我自己的初始序号是XX”。这个同意连接的报文段通常被称为SYN+ACK报文段。
第三步: 在收到SYN+ACK报文段后,客户机也要给该连接分配缓存和控制变量。客户机主机还会向服务器发送另外一个报文段,这个报文段对服务器允许连接的报文段进行了确认。因为连接已经建立了,所以该ACK比特被置为1,称为ACK报文段,可以携带数据。
一旦以上3步完成,客户机和服务器就可以相互发送含有数据的报文段了。
为了建立连接,在两台主机之间发送了3个分组,这种连接建立过程通常被称为 三次握手(SNY、SYN+ACK、ACK,ACK报文段可以携带数据) 。这个过程发生在客户机connect()服务器,服务器accept()客户连接的阶段。
假设客户机应用程序决定要关闭该连接。(注意,服务器也能选择关闭该连接)客户机发送一个FIN比特被置为1的TCP报文段,并进人FINWAIT1状态。
当处在FINWAIT1状态时,客户机TCP等待一个来自服务器的带有ACK确认信息的TCP报文段。当它收到该报文段时,客户机TCP进入FINWAIT2状态。
当处在FINWAIT2状态时,客户机等待来自服务器的FIN比特被置为1的另一个报文段,
收到该报文段后,客户机TCP对服务器的报文段进行ACK确认,并进入TIME_WAIT状态。TIME_WAIT状态使得TCP客户机重传最终确认报文,以防该ACK丢失。在TIME_WAIT状态中所消耗的时间是与具体实现有关的,一般是30秒或更多时间。
经过等待后,连接正式关闭,客户机端所有与连接有关的资源将被释放。 因此TCP连接的关闭需要客户端和服务器端互相交换连接关闭的FIN、ACK置位报文段。
❹ 计算机网络体系分为哪四层
1.、应用层
应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等.
2.、传输层
传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP).
TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据传输服务;而UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据传输服务.
3.、网际互联层
网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。
该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。
IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。
4.、网络接入层(即主机-网络层)
网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。
(4)计算机网络的3种定时器扩展阅读:
OSI将计算机网络体系结构(architecture)划分为以下七层:
物理层: 将数据转换为可通过物理介质传送的电子信号相当于邮局中的搬运工人。
数据链路层: 决定访问网络介质的方式。
在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址,相当于邮局中的装拆箱工人。
网络层: 使用权数据路由经过大型网络 相当于邮局中的排序工人。
传输层: 提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员。
会话层: 允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书。
表示层: 协商数据交换格式 相当公司中简报老板、替老板写信的助理。
应用层: 用户的应用程序和网络之间的接口老板。
❺ 简述RIP的工作原理
一、概述
RIP协议的全称是路由信息协议(Routing Information Protocol),它是一种内部网关协议(IGP),用于一个自治系统(AS)内的路由信息的传递。RIP协议是基于距离矢量算法(Distance Vector Algorithms)的,它使用“跳数”,即metric来衡量到达目标地址的路由距离。
二、该协议的局限性
1、协议中规定,一条有效的路由信息的度量(metric)不能超过15,这就使得该协议不能应用于很大型的网络,应该说正是由于设计者考虑到该协议只适合于小型网络所以才进行了这一限制。对于metric为16的目标网络来说,即认为其不可到达。
2、该路由协议应用到实际中时,很容易出现“计数到无穷大”的现象,这使得路由收敛很慢,在网络拓扑结构变化以后需要很长时间路由信息才能稳定下来。
3、该协议以跳数,即报文经过的路由器个数为衡量标准,并以此来选择路由,这一措施欠合理性,因为没有考虑网络延时、可靠性、线路负荷等因素对传输质量和速度的影响。
三、RIP(版本1)报文的格式和特性
3.1、RIP(版本1)报文的格式
0 7 15 31
命令字(1字节) 版本(1字节) 必须为0(2字节)
地址类型标识符(2字节) 必须为0(2字节)
IP地址
必须为0
必须为0
Metric值(1—16)
(最多可以有24个另外的路由,与前20字节具有相同的格式)
“命令字”字段为1时表示RIP请求,为2时表示RIP应答。地址类型标志符在实际应用中总是为2,即地址类型为IP地址。“IP地址”字段表明目的网络地址,“Metric”字段表明了到达目的网络所需要的“跳数”。
3.2. RIP的特性
(1)路由信息更新特性:
路由器最初启动时只包含了其直连网络的路由信息,并且其直连网络的metric值为1,然后它向周围的其他路由器发出完整路由表的RIP请求(该请求报文的“IP地址”字段为0.0.0.0)。路由器根据接收到的RIP应答来更新其路由表,具体方法是添加新的路由表项,并将其metric值加1。如果接收到与已有表项的目的地址相同的路由信息,则分下面三种情况分别对待:第一种情况,已有表项的来源端口与新表项的来源端口相同,那么无条件根据最新的路由信息更新其路由表;第二种情况,已有表项与新表项来源于不同的端口,那么比较它们的metric值,将metric值较小的一个最为自己的路由表项;第三种情况,新旧表项的metric值相等,普遍的处理方法是保留旧的表项。
路由器每30秒发送一次自己的路由表(以RIP应答的方式广播出去)。针对某一条路由信息,如果180秒以后都没有接收到新的关于它的路由信息,那么将其标记为失效,即metric值标记为16。在另外的120秒以后,如果仍然没有更新信息,该条失效信息被删除。
2)RIP版本1对RIP报文中“版本”字段的处理:
0:忽略该报文。
1:版本1报文,检查报文中“必须为0”的字段,若不符合规定,忽略该报文。
>1:不检查报文中“必须为0”的字段,仅处理RFC 1058中规定的有意义的字段。因此,运行RIP版本1的机器能够接收处理RIP版本2的报文,但会丢失其中的RIP版本2新规定的那些信息。
(3)RIP版本1对地址的处理
RIP版本1不能识别子网网络地址,因为在其传送的路由更新报文中不包含子网掩码,因此RIP路由信息要么是主机地址,用于点对点链路的路由;要么是A、B、C类网络地址,用于以太网等的路由;另外,还可以是0.0.0.0,即缺省路由信息。
(4)计数到无穷大(Counting to Infinity)
前面在RIP的局限性一部分提到了可能出现的计数到无穷大的现象,下面就来分析一下该现象的产生原因与过程。考察下面的简单网络:
c(目的网络)----router A------router B
在正常情况下,对于目标网络,A路由器的metric值为1,B路由器的metric值为2。当目标网络与A路由器之间的链路发生故障而断掉以后:
c(目的网络)--||--router A------router B
A路由器会将针对目标网络C的路由表项的metric值置为16,即标记为目标网络不可达,并准备在每30秒进行一次的路由表更新中发送出去,如果在这条信息还未发出的时候,A路由器收到了来自B的路由更新报文,而B中包含着关于C的metric为2的路由信息,根据前面提到的路由更新方法,路由器A会错误的认为有一条通过B路由器的路径可以到达目标网络C,从而更新其路由表,将对于目标网络C的路由表项的metric值由16改为3,而对于的端口变为与B路由器相连接的端口。很明显,A会将该条信息发给B,B将无条件更新其路由表,将metric改为4;该条信息又从B发向A,A将metric改为5……最后双发的路由表关于目标网络C的metric值都变为16,此时,才真正得到了正确的路由信息。这种现象称为“计数到无穷大”现象,虽然最终完成了收敛,但是收敛速度很慢,而且浪费了网络资源来发送这些循环的分组。
另外,从这里我们也可以看出,metric值的最大值的选择实际上存在着矛盾,如果选得太小,那么适用的网络规模太小;如果选得过大,那么在出现计数到无穷大现象的时候收敛时间会变得很长。
3.3. 为了提高RIP性能的两项措施
3.3.1. 水平分割
在上面的“计数到无穷大”现象中,产生的原因是A、B之间互相传送了“欺骗信息”,那么针对这种情况,我们自然会想到如果能将这些“欺骗信息”去掉,那么不就可以在一定程度上避免“计数到无穷大”了吗。水平分割正是这样一种解决手段。
“普通的水平分割”是:如果一条路由信息是从X端口学习到的,那么从该端口发出的路由更新报文中将不再包含该条路由信息。
“带毒化逆转的水平分割”是:如果一条路由信息是从X端口学习到的,那么从该端口发出的路由更新报文中将继续包含该条路由信息,而且将这条信息的metric置为16。
“普通的水平分割”能避免欺骗信息的发送,而且减小了路由更新报文的大小,节约了网络带宽;“带毒化逆转的水平分割”能够更快的消除路由信息的环路,但是增加了路由更新的负担。这两种措施的选择可根据实际情况进行选择。
3.3.2. 触发更新
上面的“水平分割”能够消除两台路由器间的欺骗信息的相互循环,但是当牵涉到三台或者以上的路由器时,效果就有限了。考察下面的网络:
+---+ +----+ +-----+ /-----\
| | | C +-------| D | -----|| E ||
| A +------| | | +---- | |
+-+-+ +----+ +---+-+ \-----/
| -- |
| -- |
| -- |
+----+ |
| | |
| B +-----------------------
| |
+----+
E是目标网络
针对目标网络,各路由器的路由信息分别如下:
A:3 C
B:2 D
C:2 D
D:1 直连
当D与目标网络之间发生故障中断以后,B和C都能正确的从D得到网络不可达的信息,但是,从上面的路由信息中可以看出,A虽然不会给C发送错误信息,但是A可能在未收到网络不可达信息之前就给B发送了路由信息,让B错误的认为可以通过A到达目标网络,继而又会出现“计数到无穷大”的现象。
触发更新就是为了针对上述情况进行的一种改善,它的具体实现措施是:路由器一旦察觉到网络变化,就尽快甚至是立即发送更新报文,而不等待更新周期结束。只要触发更新的速度足够快,就可以大大的防止“计数到无穷大”的发生,但是这一现象还是有可能发生的。
使用了触发更新以后,当网络拓扑发生变化的时候,网络中会出现类似于“多米诺骨牌”的更新报文潮流,并最后中止于从未发生变化的路径到达目标网络的路由器。
3.4. RIP中的4个定时器
RIP中一共使用了4个定时器:update timer, timeout timer, garbage timer, holddown timer。
Update timer用于每30秒发送路由更新报文。
Timeout timer用于路由信息失效前的180秒的计时,每次收到同一条路由信息的更新信息就将该计数器复位。
Garbage timer和holddown timer同时用于将失效的路由信息删除前的计时:在holddown timer的时间内,失效的路由信息不能被接收到的新信息所更新;在garbage timer计时器超时后,失效的路由信息被删除。
另外,在触发更新中,更新信息会需要1到5秒的随机延时以后才被发出,这里也需要一个计时器。
四、RIP版本2简介
RIP版本2的报文格式如下:
0 7 15 31
命令字(1字节) 版本(1字节) 路由域(2字节)
0xFFFF(2字节) 验证类型(2字节)
验证(16字节)
地址类型标识符(2字节) 路由标签(2字节)
IP地址
子网掩码
下一跳IP地址
Metric值(1—16)
(最多可以有24个另外的路由,与前20字节具有相同的格式)
版本2的RIP使用了版本1中“必须为0”的字段,增加了一些对于路由的有用信息,其主要新添的特性如下:
(1)报文中包含子网掩码,可以进行子网路由
(2)支持明文/MD5验证
(3)报文中包含了下一跳IP,为路由的选优提供了更多的信息。
❻ 计算机网络名词解释知识点简答题整理
基带传输:比特流直接向电缆发送,无需调制到不同频段;
基带信号:信源发出的没有经过调制的原始电信号;
URL :统一资源定位符,标识万维网上的各种文档,全网范围唯一;
传输时延:将分组的所有比特推向链路所需要的时间;
协议:协议是通信设备通信前约定好的必须遵守的规则与约定,包括语法、语义、定时等。
网络协议:对等层中对等实体间制定的规则和约定的集合;
MODEM :调制解调器;
起始(原始)服务器:对象最初存放并始终保持其拷贝的服务器;
计算机网络:是用通信设备和线路将分散在不同地点的有独立功能的多个计算机系统互相连接起来,并通过网络协议进行数据通信,实现资源共享的计算机集合;
解调:将模拟信号转换成数字信号;
多路复用:在一条传输链路上同时建立多条连接,分别传输数据;
默认路由器:与主机直接相连的一台路由器;
LAN :局域网,是一个地理范围小的计算机网络;
DNS :域名系统,完成主机名与 IP 地址的转换;
ATM :异步传输模式,是建立在电路交换和分组交换基础上的一种面向连接的快速分组交换技术;
Torrent :洪流,参与一个特定文件分发的所有对等方的集合;
Cookie :为了辨别用户、用于 session 跟踪等而储存在用户本地终端的数据;
SAP :服务访问点;
n PDU : PDU 为协议数据单元,指对等层之间的数据传输单位;第 n 层的协议数据单元;
PPP :点对点传输协议;
Web caching :网页缓存技术;
Web 缓存:代替起始服务器来满足 HTTP 请求的网络实体。
Proxy server :代理服务器;
Go-back-n :回退 n 流水线协议;允许发送方连续发送分组,无需等待确认,若出错,从出错的分组开始重发;接收方接收数据分组,若正确,发 ACK ,若出错,丢弃出错分组及其后面的分组,不发任何应答;
Packet switching :分组交换技术;
CDMA :码分多路复用技术;各站点使用不同的编码,然后可以混合发送,接收方可正确提取所需信息;
TDM :时分多路复用,将链路的传输时间划分为若干时隙,每个连接轮流使用不同时隙进行传输;
FDM :频分多路复用,将链路传输频段分成多个小的频段,分别用于不同连接信息的传送;
OSI :开放系统互连模型,是计算机广域网体系结构的国际标准,把网络分为 7 层;
CRC :循环冗余检测法,事先双方约定好生成多项式,发送节点在发送数据后附上冗余码,使得整个数据可以整除生成多项式,接收节点收到后,若能整除,则认为数据正确,否则,认为数据错误;
RIP :路由信息协议;
Socket (套接字):同一台主机内应用层和运输层的接口;
转发表:交换设备内,从入端口到出端口建立起来的对应表,主要用来转发数据帧或 IP 分组;
路由表:路由设备内,从源地址到目的地址建立起来的最佳路径表,主要用来转发 IP 分组;
存储转发:分组先接收存储后,再转发出去;
虚电路网络:能支持实现虚电路通信的网络;
数据报网络:能支持实现数据报通信的网络;
虚电路:源和目的主机之间建立的一条逻辑连接,创建这条逻辑连接时,将指派一个虚电路标识符 VC.ID ,相关设备为它运行中的连接维护状态信息;
毒性逆转技术: DV 算法中,解决计数到无穷的技术,即告知从相邻路由器获得最短路径信息的相邻路由器到目的网络的距离为无穷大;
加权公平排队 WFQ :排队策略为根据权值大小不同,将超出队列的数据包丢弃;
服务原语:服务的实现形式,在相邻层通过服务原语建立交互关系,完服务与被服务的过程;
透明传输:在无需用户干涉的情况下,可以传输任何数据的技术;
自治系统 AS :由一组通常在相同管理者控制下的路由器组成,在相同的 AS 中,路由器可全部选用同样的选路算法,且拥有相互之间的信息;
分组丢失:分组在传输过程中因为种种原因未能到达接收方的现象;
隧道技术:在链路层或网络层通过对等协议建立起来的逻辑通信信道;
移动接入:也称无线接入,是指那些常常是移动的端系统与网络的连接;
面向连接服务:客户机程序和服务器程序发送实际数据的分组前,要彼此发送控制分组建立连接;
无连接服务:客户机程序和服务器程序发送实际数据的分组前,无需彼此发送控制分组建立连接;
MAC 地址:网卡或网络设备端口的物理地址;
拥塞控制:当网络发生拥塞时,用响应的算法使网络恢复到正常工作的状态;
流量控制:控制发送方发送数据的速率,使收发双方协调一致;
Ad Hoc 网络:自主网络,无基站;
往返时延:发送方发送数据分组到收到接收方应答所需要的时间;
电路交换:通信节点之间采用面向连接方式,使用专用电路进行传输;
ADSL :异步数字用户专线,采用不对称的上行与下行传输速率,常用于用户宽带接入。
多播:组播,一对多通信;
路由器的组成包括:输入端口、输出端口、交换结构、选路处理器;
网络应用程序体系结构:客户机 / 服务器结构、对等共享、混合;
集线器是物理层设备,交换机是数据链路层设备,网卡是数据链路层设备,路由器是网络层设备;
双绞线连接设备的两种方法:直连线和交叉线,同种设备相连和计算机与路由器相连都使用交叉线;不同设备相连用直连线;
MAC 地址 6 字节, IPv4 地址 4 字节, IPv6 地址 16 字节;
有多种方法对载波波形进行调制,调频,调幅,调相;
IEEE802.3 以太网采用的多路访问协议是 CSMA/CD ;
自治系统 AS 内部的选路协议是 RIP 、 OSPF ;自治系统间的选路协议是 BGP ;
多路访问协议:分三大类:信道划分协议、随机访问协议、轮流协议;
信道划分协议包括:频分 FDM 、时分 TDM 、码分 CDMA ;
随机访问协议包括: ALOHA 、 CSMA 、 CSMA/CD(802.3) 、 CSMA/CA(802.11) ;
轮流协议包括:轮询协议、令牌传递协议
ISO 和 OSI 分别是什么单词的缩写,中文意思是什么?用自己的理解写出 OSI 分成哪七层?每层要解决的问题和主要功能是什么?
答:ISO:international standard organization 国际标准化组织;OSI:open system interconnection reference model 开放系统互连模型;
OSI分为 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层;
层名称解决的问题主要功能
应用层实现特定应用选择特定协议;针对特定应用规定协议、时序、表示等,进行封装。在端系统中用软件来实现,如HTTP;
表示层压缩、加密等表示问题;规定数据的格式化表示,数据格式的转换等;
会话层会话关系建立,会话时序控制等问题;规定通信的时序;数据交换的定界、同步、建立检查点等;
传输层源端口到目的端口的传输问题;所有传输遗留问题:复用、流量、可靠;
网络层路由、拥塞控制等网络问题;IP寻址,拥塞控制;
数据链路层相邻节点无差错传输问题;实现检错与纠错,多路访问,寻址;
物理层物理上可达;定义机械特性,电气特性,功能特性等;
因特网协议栈分层模型及每层的功能。
分层的优点:使复杂系统简化,易于维护和更新;
分层的缺点:有些功能可能在不同层重复出现;
假设一个用户 ( 邮箱为: [email protected]) 使用 outlook 软件发送邮件到另一个用户 ( 邮箱为: [email protected]) ,且接收用户使用 IMAP 协议收取邮件,请给出此邮件的三个传输阶段,并给出每个阶段可能使用的应用层协议。
用户 [email protected] 使用outlook软件发送邮件到 163 邮件服务器
163邮件服务器将邮件发送给用户 [email protected] 的yahoo邮件服务器
用户 [email protected] 使用IMAP协议从yahoo邮件服务器上拉取邮件
第1、2阶段可以使用SMTP协议或者扩展的SMTP协议:MIME协议,第3阶段可以使用IMAP、POP3、HTTP协议
三次握手的目的是什么?为什么要三次(二次为什么不行)?
为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。
如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认。
选择性重传 (SR) 协议中发送方窗口和接收方窗口何时移动?分别如何移动?
发送方:当收到ACK确认分组后,若该分组的序号等于发送基序号时窗口发生移动;向前移动到未确认的最小序号的分组处;
接收方:当收到分组的序号等于接收基序号时窗口移动;窗口按交付的分组数量向前移动;
简述可靠传输协议 rdt1.0, rdt2.0, rdt2.1, rdt2.2 和 rdt3.0 在功能上的区别。
rdt1.0:经可靠信道上的可靠数据传输,数据传送不出错不丢失,不需要反馈。
rdt2.0(停等协议):比特差错信道上的可靠数据传输,认为信道传输的数据可能有比特差错,但不会丢包。接收方能进行差错检验,若数据出错,发送方接收到NAK之后进行重传。
rdt2.1:在rdt2.0的基础上增加了处理重复分组的功能,收到重复分组后,再次发送ACK;
rdt2.2:实现无NAK的可靠数据传输,接收方回发带确认号的ACK0/1,
收到出错分组时,不发NAK,发送接收到的上一个分组的ACK;
rdt3.0:实现了超时重发功能,由发送方检测丢包和恢复;
电路交换和虚电路交换的区别?哪些网络使用电路交换、报文交换、虚电路交换和数据报交换?请各举一个例子。
电路交换时整个物理线路由通讯双方独占;
虚电路交换是在电路交换的基础上增加了分组机制,在一条物理线路上虚拟出多条通讯线路。
电路交换:电话通信网
报文交换:公用电报网
虚电路交换:ATM
数据报交换:Internet
电路交换:面向连接,线路由通信双方独占;
虚电路交换:面向连接,分组交换,各分组走统一路径,非独占链路;
数据报交换:无连接,分组交换,各分组走不同路径;
交换机逆向扩散式路径学习法的基本原理:
交换表初始为空;
当收到一个帧的目的地址不在交换表中时,将该帧发送到所有其他接口(除接收接口),并在表中记录下发送节点的信息,包括源MAC地址、发送到的接口,当前时间;
如果每个节点都发送了一帧,每个节点的地址都会记录在表中;
收到一个目的地址在表中的帧,将该帧发送到对应的接口;
表自动更新:一段时间后,没有收到以表中某个地址为源地址的帧,从表中删除该地址;
非持久 HTTP 连接和持久 HTTP 连接的不同:
非持久HTTP连接:每个TCP连接只传输一个web对象,只传送一个请求/响应对,HTTP1.0使用;
持久HTTP连接:每个TCP连接可以传送多个web对象,传送多个请求/响应对,HTTP1.1使用;
Web 缓存的作用是什么?简述其工作过程:
作用:代理原始服务器满足HTTP请求的网络实体;
工作过程:
浏览器:与web缓存建立一个TCP连接,向缓存发送一个该对象的HTTP请求;
Web缓存:检查本地是否有该对象的拷贝;
若有,就用HTTP响应报文向浏览器转发该对象;
若没有,缓存与原始服务器建立TCP连接,向原始服务器发送一个该对象的HTTP请求,原始服务器收到请求后,用HTTP响应报文向web缓存发送该对象,web缓存收到响应,在本地存储一份,并通过HTTP响应报文向浏览器发送该对象;
简要说明无线网络为什么要用 CSMA/CA 而不用 CSMA/CD ?
无线网络用无线信号实施传输,现在的技术还无法检测冲突,因此无法使用带冲突检测的载波侦听多路访问协议CSMA/CD,而使用冲突避免的载波侦听多路访问协议CSMA/CA;
简述各种交换结构优缺点,并解释线头 HOL 阻塞现象。
内存交换结构:以内存为交换中心;
优点:实现简单,成本低;
缺点:不能并行,速度慢;
总线交换结构:以共享总线为交换中心;
优点:实现相对简单,成本低;
缺点:不能并行,速度慢,不过比memory快;
纵横制:以交叉阵列为交换中心;
优点:能并行,速度快,比memory和总线都快;
缺点:实现复杂,成本高;
线头HOL阻塞:输入队列中后面的分组被位于线头的一个分组阻塞(即使输出端口是空闲的),等待交换结构发送;
CSMA/CD 协议的中文全称,简述其工作原理。
带冲突检测的载波侦听多路访问协议;
在共享信道网络中,发送节点发送数据之前,先侦听链路是否空闲,若空闲,立即发送,否则随机推迟一段时间再侦听,在传输过程中,边传输边侦听,若发生冲突,以最快速度结束发送,并随机推迟一段时间再侦听;
奇偶校验、二维奇偶校验、 CRC 校验三者比较:
奇偶校验能检测出奇数个差错;
二维奇偶校验能够检测出两个比特的错误,能够纠正一个比特的差错;
CRC校验能检测小于等于r位的差错和任何奇数个差错;
GBN 方法和 SR 方法的差异:
GBN:一个定时器,超时,重发所有已发送未确认接收的分组,发送窗口不超过2的k次方-1,接收窗口大小为1,采用累计确认,接收方返回最后一个正确接受的分组的ACK;
SR:多个定时器,超时,只重发超时定时器对应的分组,发送窗口和接收窗口大小都不超过2的k-1次方,非累计确认,接收方收到当前窗口或前一窗口内正确分组时返回对应的ACK;
❼ 运输层知识要点——谢希仁《计算机网络》
为了在计算机网络中有条不紊地交换数据,就必须遵守一些事先约定好的规则。这些规则明确规定了所 交换数据的格式 以及有关的 同步 问题。
同步的含义:在一定条件下应当发生什么事件,因而含有时序的意思。
网络协议:为进行网络中的数据交换而建立的规则、标准或约定。
网络协议由以下三个要素组成:
1)语法:即数据与控制信息的结构或格式
2)语义:即需要发出何种控制信息,完成何种动作以及做出何种反应
3)同步:即事件实现顺序的详细说明
一、运输层协议的概述
1.1 进程之间的通信
1.2 运输层的两个主要协议
1.3 运输层的端口
二、用户数据报协议UDP
2.1 UDP概述
2.2 UDP的首部格式
三、传输控制协议TCP概述
3.1 TCP的最主要的特点
3.2 TCP的连接
四、可靠传输的工作原理
4.1 停止等待协议
4.2 连续ARQ协议
五、TCP报文段的首部格式
六、TCP可靠传输的实现
6.1 以字节为单位的滑动窗口
6.2 超时重传时间的选择
6.3 选择确认SACK
七、TCP的流量控制
7.1 利用滑动窗口实现流量控制
7.2 必须考虑传输效率
八、TCP的拥塞控制
8.1 拥塞控制的一般原理
8.2 几种拥塞控制方法
8.3 随机早期检测RED
九、TCP的运输连接管理
9.1 TCP的连接建立
9.2 TCP的连接释放
9.3 TCP的有限状态机
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.1 进程之间的通信
1.只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到了下三层的功能
2.两个主机进行通信就是两个主机中的应用进程互相通信。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。(IP协议能把分组送到目的主机)
网络层时为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
3.运输层一个重要功能——复用、分用。 (应用进程复用、分用运输层)
1.2 运输层的两个主要协议
1.UDP—User Datagram Protocol 用户数据报协议(无连接):DNS/RIP/DHCP/SNMP/NFS
TCP—Transmission Control Protocol 传输控制协议(面向连接):SMTP/TELNET/HTTP/ FTP
1.3 运输层的端口
问题:为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须使用统一的方法(而这种方法必须与特定操作系统无关)对TCP/IP体系的应用进程进行标识。
为什么不用进程号来区分?(第一,不同操作系统的进程标识符不同;第二,用功能来识别,而不是进程,例如邮件服务功能,而不管具体是哪个进程)
解决方案:在运输层使用协议端口号,即端口。软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。(端口号只具有本地意义,只是为了标识本计算机应用层中各个进程在和运输层交互时的层间接口。)
端口分为两大类:
1)服务器使用的端口号:熟知端口号或系统端口号(0~1023);登记端口号(1024~49151)
2)客户端使用的端口号:49152~65535
2.1 UDP概述
1.UDP只在IP的数据报服务至上增加了很少一点功能,就是复用、分用以及差错检测功能
2.特点
1)无连接
2)尽最大努力交付
3)面向报文 (不合并、不拆分、保留这些报文的边界)
4)UDP没有拥塞控制
5)UDP支持一对一、一对多、多对一和多对多的交互通信
6)UDP的首部开销小,只有8字节
应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。
2.2 UDP的首部格式
1.traceroute 让发送的UDP用户数据报故意使用一个非法的UDP端口号,接收方丢弃报文,并由ICMP(网络控制报文协议)发送“端口不可达”差错报文给发送方。
2.计算检验和。IP数据报的校验和只检验IP数据报的首部,但UDP的校验和是把首部和数据部分一起都检验。(12字节的首部+真正的首部+数据来进行校验和的计算)
Q1.为什么计算校验和要加12字节的伪首部
Q2.计算校验和的原理是什么?
3.1 TCP的最主要的特点
1.面向连接的运输层协议(建立连接、传输数据、释放连接)
2.点对点,每一条TCP连接只能有两个端点
3.可靠交付(无差错、不丢失、不重复、并且按序到达)
4.全双工通信。TCP连接的两端都设有发送缓存和接收缓存。
5.面向字节流。(流指的是流入到进程或从进程流出的字节序列;面向字节流:TCP把应用程序交下来的数据看成是一连串的无结构字节流。 接收方的应用程序必须有能力识别接收到的字节流,把它还原成有意义的应用层数据。 因此TCP可以根据窗口值和当前网络状况调整发送的报文长度。划分短一点,或者积累到足够多再发送出去。)
3.2 TCP的连接
1.TCP把连接作为最基本的抽象。
2.每一条TCP连接有两个端点。TCP连接的端点叫作套接字。
套接字soket = (IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。
TCP连接 ::= {socket1, socket2}
理想的传输条件有以下两个特点:
1)传输信道不产生差错
2)不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据
实际的网络并不具备,因此:
1)出现差错时,让发送方重传
2)接收方来不及处理时,及时告诉发送方适当降低发送数据的速度
4.1 停止等待协议
1.“停止等待”就是没发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。
2.超时重传。在每发完一个分组就设置一个超时计时器,如果在超时计时器之前收到对方的确认,就撤销已设置的超时计时器。如果未收到,就认为刚才的分组丢失,并重传。
3.三种情况:A发送的分组出错、丢失;B发送的确认丢失;B发送的确认迟到
确认丢失:B丢弃重复的分组,向A重传确认
确认迟到:A丢弃重复的确认,B丢弃重复分组,并向A重传确认
4.常称为自动重传请求ARQ,重传时自动进行的(超时即重传)
5.缺点:信道利用率太低
U=Td/(Td+RTT+Ta)
为了提高传输效率,发送方不使用停止等待协议,而是采用流水线传输。流水线传输就是发送发可连续发送多个分组,不必等每发完一个分组就停顿下来等待对方的确认。(连续ARQ协议和滑动窗口协议)
4.2 连续ARQ协议
1.位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。
2.累积确认:接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。
3.缺点:Go-back-N (发送前5个分组,第3个分组丢失,后面三个要重传)
1.源端口和目的端口
2.序号。 每个字节都按顺序编号。
3.确认号。 期望收到对方下一个报文段的第一个数据字节的序号。
若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。
4.数据偏移。 指出TCP报文段的数据起始处距离TCP报文段的起始处有多远(也即TCP报文段首部长度)。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。
5.窗口。窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常在动态变化着。
6.1 以字节为单位的滑动窗口
1.发送缓存用来暂存:
1)发送应用程序传送给发送方TCP准备发送的数据;
2)TCP已发送但未收到确认德尔数据
2.接收缓存用来存放:
1)按序到达的、但尚未被接收应收程序读取的数据;
2)未按序到达的数据
3.注意三点:
1)A的发送窗口是根据B的接收窗口设置的,但是在同一时刻,由于网络传输的滞后,A的发送窗口并不总是B的接收窗口一样大
2)TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程
3)TCP接收方有累计确认功能(不能过分推迟发送确认,否则会导致发送方不必要的重传)
6.2 超时重传时间的选择
1.超时重传时间设置太短,会引起很多不必要的重传;如果设置太长,使网络的空闲时间增大,降低传输效率。
2.新的RTTs = (1-a)x(旧的RTTs) + ax(新的RTT样本),其中RTT样本的时间为:记录一个报文段发出的时间,以及收到相应的确认时间,时间差就是报文段的往返时间RTT。
3.RTO = RTTs + 4 x RTTd,其中RTO为超时重传时间,RTTd是RTT的偏差的加权平均值。
新的RTTd = (1-b) x (旧的RTTd)+ b x |RTTs - 新的RTT样本|
4.一个问题:发送一个报文段,设定的重传时间到了,还没有收到确认。于是重传报文段。经过一段时间,收到了确认报文段。现在的问题是:如何判定此确认报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?
1)解决方法1,在计算加权平均值RTTs时,只要报文段重传了,就不采用其往返时间样本。
引入的问题:报文段的时延突然增大的情况
2)解决方法2,报文段每重传一次,就把超时重传时间RTO增大一些(一般是2倍)。当不在发生报文段的重传时,再根据加权平均计算。
6.3 选择确认SACK
SACK文档并没有指明发送发应当怎样响应SACK。因此大多数的实现还是重传所有未被确认的数据块。
7.1 利用滑动窗口实现流量控制
1.流量控制:就是让发送方的发送速率不要太快,要让接收方来得及接收。
2.利用滑动窗口机制可很方便地在TCP连接上实现对发送方的流量控制。发送方的发送窗口不能超过接收方给出的接收窗口的数值。
3.死锁情况:B向A发送了零窗口的报文段后不久,B又有了一些缓存空间,因此B向A发送rwnd = 400.然而该报文段在传送过程中丢失。A一直等待B发送的非零窗口的通知,B也一直等待A发送的数据。( 窗口通知不超时重传?为什么? )
解决方法:TCP为每个连接设有一个持续计时器。只要一方收到对方的零窗口通知,就启动计时器。计时器到期后,发送一个零窗口探测报文段,而对方就在确认这个探测报文段时给出了现在的窗口值。若仍为零,收到报文段的一方重新设置持续计时器。
7.2 必须考虑传输效率
1.应用程序把数据传送到TCP的发送缓存后,剩下的发送任务就由TCP来控制了。
2.三种不同的机制来控制TCP报文段的发送时机:
1)TCP维持一个变量,它等于最大报文段长度MSS,只要缓存中的存放的数据达到MSS,就组装成一个TCP报文段发送出去
2)由发送方的应用进程指明要求发送报文段,即TCP支持推送操作
3)发送方设置一个定时器
3.问题一、若用户只发送一个字节,则非常浪费带宽。
解决方法:若发送应用程序把要发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去。(采用收到确认就发送+并开始缓存的方式;同时当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。)
4.问题二、糊涂窗口综合症。接收缓存已满,应用程序一次只读取一个字节,然后向发送方发送确认。
解决方法:让接收方等待一段时间,使得接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。则接收方就发出确认报文。
8.1 拥塞控制的一般原理
1.拥塞的定义:对资源的需求 > 可用资源。 在计算机网络中的链路带宽、交换结点中的缓存和处理机等,都是网络中的资源。
2.拥塞解决不能靠解决某一个部分的问题。因为这会将瓶颈转移到其他地方。问题的实质往往是整个系统的各个部分不匹配。只有所有部分都平衡了,问题才会得到解决。
3.拥塞控制与流量控制的比较。
1)拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
拥塞控制有个前提:网络能够承受现有的网络负荷
拥塞控制是一个全局性过程。(发送拥塞时,不知道在某处、什么原因造成的)
2)流量控制:点对点通信量的控制,是个端到端的问题
流量控制:抑制发送端发送数据的速率,以便使接收端来得及接收。
4.寻找拥塞控制的方案无非就是使不等式 “对资源的需求 > 可用资源 ”不再成立的条件。但是必须考虑该措施带来的其他影响。
5.计算机网络是个复杂的系统。从控制理论的角度来看拥塞控制,可以分为开环控制和闭环控制两种方法。
1)开环控制:设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。但一旦系统运行起来,就不再中途改正。
2)闭环控制:基于反馈环路。
步骤一、监测网络系统以便检测到拥塞在何时、何处发生;
步骤二、把拥塞发生的信息传送到可采取行动的地方
步骤三、调整网络系统的运行以解决出现的问题
8.2 几种拥塞控制方法(只考虑网络拥塞程度,即假设接收方总是有足够大的缓存空间)
1.慢开始和拥塞避免
1)发送方维持一个拥塞窗口。
拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口增大;如果网络出现拥塞,则减小。
2)慢开始的思路:由小到大逐渐增大拥塞窗口数值。每收到一个对新的报文段的确认,把拥塞窗口增加至多一个MSS的数值。(没经过一个传输轮次,拥塞窗口cwnd就加倍)
轮次:把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一字节的确认。
慢开始的“慢”并不是指cwnd的增长速率慢,而是指TCP开始发送报文段时先设置cwnd=1(一个MSS数值)。
3)慢开始门限ssthresh
为防止拥塞窗口增长过大,引入一个慢开始门限ssthresh。
当cwnd < ssthresh时,使用上述的慢开始算法
当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法
4)拥塞避免算法
思路:让拥塞窗口cwnd缓慢增大,即没经过一个往返时间RTT就把发送方的拥塞窗口cwnd增加1,而不是加倍。
5)慢开始门限的设置
只要发送方判断网络出现拥塞(没有按时收到确认),就把慢开始门限ssthresh设置为出现拥塞时发送方窗口值的一半,然后把拥塞窗口cwnd重置为1,执行慢开始算法。
6)乘法减小和加法增大
乘法减小:网络出现拥塞时,把慢开始门限ssthresh减半(当前的ssthresh的一半),并执行慢开始算法。
加法增大:执行拥塞避免方法
2.快重传和快恢复
1)快重传(尽快重传未被确认的报文段)
首先,要求接收方每收到一个失序的报文段后就立即发出重复确认。(如接收方收到了M1和M2后都分别发出了确认,但接收方没有收到M3但接着收到了M4。此时接收方立即发送对M2的重复确认。)
其次,发送方只要一连收到三个重复确认,就应当立即重传对方尚未收到的报文段M3.
2)快恢复
要点一、当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。
要点二、由于发送方认为网络很可能没有发生拥塞(因为收到了连续的重复确认),把cwnd设置为慢开始门限ssthresh减半后的值,然后开始执行拥塞避免算法
慢开始算法只在TCP连接建立时和网络出现超时才使用。
3.发送方的窗口
发送方窗口的上限值 = Min [rwnd, cwnd]
8.3 随机早期检测RED(IP层影响TCP层的拥塞控制)
1.网络层的分组丢弃策略
网络层的策略对TCP拥塞控制影响最大的就是路由器的分组丢弃策略。
如果路由器队列已满,则后续到达的分组将都被丢弃。这就叫做尾部丢弃策略。
2.全局同步
由于TCP复用IP,若发生路由器中的尾部丢弃,就可能会同时影响到很多条TCP连接,结果就使许多TCP连接在同一时间突然都进入到慢开始状态。全局同步使得全网的通信量突然下降了很多,网络恢复正常后,其通信量又突然增大很多。
3.随机早期检测RED
使路由器的队列维持两个参数,即队列长度最小门限THmin和最大门限THmax。当每一个分组到达时,RED就先计算平均队列长度Lav。RED算法是:
1)若平均队列长度小于最小门限THmin,则把新到达的分组放入队列进行排队
2)若平均队列长度超过最大门限THmax,则把新到达的分组丢弃
3)若平均队列长度在最小门限THmin和最大门限THmax之间,则按照某一概率p将新到达的分组丢弃。
随机体现在3),在检测到网络拥塞的早期征兆时(即路由器的平均队列长度超过一定的门限值时),就先以概率p随机丢弃个别的分组,让拥塞控制只在个别的TCP连接上进行,因而避免发生全局性的拥塞控制。
4.平均队列长度Lav和分组丢弃概率p
Lav = (1-d) x (旧的Lav) +d x (当前的队列长度样本)
p = ptemp / (1- count x ptemp)
ptemp = pmax x (Lav - THmin) / (THmax - THmin)
TCP时面向连接的协议。
运输连接就有三个阶段:连接建立、数据传送和连接释放
运输连接的管理:使运输连接的建立和释放都能正常地进行。
在TCP连接建立过程中要解决以下三个问题:
1)要使每一方能够确知对方的存在
2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳等等)
3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配
9.1 TCP的连接建立
1.TCP规定,SYN=1报文段不能携带数据,但消耗一个序号
2.TCP规定,ACK=1报文段可以携带数据,如果不携带数据则不消耗序号
3.为什么A还要发送一次确认?为了防止已失效的连接请求报文突然又传送到B,因而产生错误。
“已失效的连接请求报文段”
A发出第一个连接请求报文段,在网络中滞留超时,又发出了第二个连接请求。但B收到第一个延迟的失效的连接请求报文段后,就误认为是A又发出了一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立。此时A不会理睬B的确认,也不会发数据,但B一直等A发送数据,B的许多资源就浪费了。
采用三次握手,A不会向B发送确认,因此B就知道A并没有要求建立确认。
9.2 TCP的连接释放
1.TCP规定,FIN报文段基石不携带数据,也消耗一个序号
2.第二次握手后,TCP通知高层应用程序,因而从A到B这个方向的连接就释放,TCP连接处于半关闭状态
3.为什么A在TIME-WAIT状态必须等待2MSL的时间
1)为了保证A发送的最后一个ACK报文段能够到达B。因为ACK可能丢失,此时B可能会超时重传,然后A重传确认,并重新启动2MSL计时器
2)防止“已失效的连接请求报文段”出现在本连接中。可以使本连接持续时间内所产生的所有报文段都从网络中消失。
9.3 TCP的有限状态机