大家好,又见面了,我是你们的朋友全栈君。
参考书目:计算机网络(第6版 谢希仁)
一、概述
1、三网:电信网络、有线电视网络和计算机网络
2、电路交换、报文交换、分组交换的比较
- 电路交换
公共电话网(PSTN网)和移动网(包括GSM和CDMA网)采用的都是电路交换技术,它的基本特点是采用面向连接的方式,在双方进行通信之前,需要为通信双方分配一条具有固定宽带的通信电路,通信双方在通信过程中一直占用所分配的资源,直到通信结束,并且在电路的建立和释放过程中都需要利用相关的信令协议。这种方式的优点是在通信过程中可以保证为用户提供足够的带宽,并且实时性强,时延小,交换设备成本低,但同时带来的缺点是信道利用率低,一旦电路被建立不管通信双方是否处于通话状态分配的电路一直被占用。
- 报文交换
报文交换是以报文为数据交换的单位,报文携带有目标地址、源地址等信息,在交换结点采用存储转发的传输方式;由于报文长度差异很大,长报文可能导致很大的时延;为了满足各种长度报文的需要并且达到高效的目的,节点需要分配不同大小的缓冲区,否则就有可能造成数据传送的失败,这样对每个节点来说缓冲区的分配也比较困难。另外一个缺点是出错时,整个报文都将重传。
- 分组交换
分组交换仍采用存储转发传输方式,但将一个长报文先分割为若干个较短的分组,然后把这些分组(携带源、目的地址和编号信息)逐个地发送出去。采用分组交换技术,在通信之前不需要建立连接,每个节点首先将前一节点送来的分组收下并保存在缓冲区中,然后根据分组头部中的地址信息选择适当的链路将其发送至下一个节点,这样在通信过程中可以根据用户的要求和网络的能力来动态分配带宽。分组交换比电路交换的信道利用率高,但时延较大。分组转发的带来的问题:排队时延以及增加头部带来的开销。
优点:
优点 | 所采用的手段 |
---|---|
高效 | 在分组传输过程中动态分配传输带宽,对通信链路是逐段占用 |
灵活 | 为每一个分组独立地选择转发路由,以分组为传送单位和查找路由 |
迅速 | 以分组作为传送单位,可以不不先建立连接就能向其他主机发送分组 |
可靠 | 保证可靠性的网络协议;分布式多路由的分组交换网,使网络有很好的生存性 |
总之,若要传送的数据量很大,且其传送时间远大于呼叫时间,则采用电路交换较为合适;当端到端的通路有很多段的链路组成时,采用分组交换传送数据较为合适。从提高整个网络的信道利用率上看,报文交换和分组交换优于电路交换,其中分组交换比报文交换的时延小,尤其适合于计算机之间的突发式的数据通信。
3、计算机网络的性能指标
1)速率:连接在计算机网络上的主机在数字信道上传送数据的速率,也称为数据率或比特率。
2)带宽:网络的通信线路传送数据的能力。即:在单位时间内从网络中的某一个点到另一点所能通过的“最高数据率”。
3)吞吐量:在单位时间内通过某个网络(信道/接口)的数据量。
4)时延:数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。
发送时延:主机或路由器发送数据帧所需要的时间,即:从发送数据帧的第一个比特算起到该帧的最后一个比特发送完毕所需要的时间。
传播时延:电磁波在信道中传播一定的距离需要花费的时间。
处理时延:主机或路由器在收到分组时要花费一定的时间进行处理。例如:分析分组的首部信息、从分组中提取数据部分、进行差错检验或查找适当的路由等等。
排队时延:分组在经过网络传输时,要经过许多路由器。但分组在进入路由器后要先在输入队列中排队等待处理。
注意:对于高速网络链路,我们提高的仅仅是数据的发送速率而不是比特在链路上的传播速率而不是比特在链路上的传播速率。
5)时延带宽积:传播时延*带宽
6)往返时间RTT:从发送方发送数据开始,到发送方收到来自接收方的确认总共经历的时间。
7)利用率:信道利用率和网络利用率两种。
4、协议与划分层次的好处
1)各层之间是独立的
2)灵活性好
3)结构上可分割开
4)易于实现和维护
5)能促进标准化工作:差错控制,流量控制,分段和重装,复用和分用,连接建立和释放
5、接口、协议和服务
接口:下层向上层提供的原语操作
协议:同一层之间,通信双方进行信息交换必须遵守的规则
服务:不同层之间交换信息必须遵守的规则
6、计算机网络系统结构
TCP/IP四层协议:应用层(Telnet,FTP,SMTP),运输层(TCP或UDP),网际层IP,网络接口层
五层协议:应用层,运输层,网络层,数据链路层,物理层
7、网络各层的作用
应用层:为操作系统或网络应用程序提供访问网络服务的接口。
应用层任务是通过应用进程间的交互来完成特定网络应用。
应用层协议的代表包括:FTP、HTTP、SMTP等。
运输层:负责向两个主机中进程之间的通信提供服务。运输层还要处理端到端的差错检测(与数据链路层不同)、拥塞控制、流量控制等问题。
运输层协议的代表包括:TCP(面向连接、可靠数据传输服务,数据传输单位是报文段)、UDP(无连接。尽最大努力的数据传输服务,数据传输单位是用户数据报)等。
网络层:负责对子网间的数据包进行路由选择,为分组交换网上的不同主机提供通信服务。
网络层协议的代表包括:IP、ICMP、IGMP等。
数据链路层:数据的封装成帧、数据的透明传输、数据的差错检测。
数据链路层协议的代表包括:PPP、帧中继等。
物理层:通过传输介质发送和接收二进制比特流。
属于物理层定义的典型规范如RJ-45等。
8、数据如何在网络各层之间传输
物理层,数据链路层,网络层属于OSI模型的低三层,负责创建网络通信连接的链路,传输层,会话层,表示层和应用层是OSI模型的高四层,具体负责端到端的数据通信。当然,并不是所有通信都是要经过OSI的全部七层,如物理接口之间的转接,只需要物理层中进行即可;而路由器与路由器之间的连接则只需网络层以下的三层。
9、在网络各层之间,数据是以什么单位进行传输的
在物理层数据的传输单位称为比特;在数据链路层数据的传输单元称为帧; 在网络层数据的传输单元称为数据包;在传输层数据的传输单元称为报文段。
二、物理层
1、基带调制
1)编码:把数字信号转换为另一种形式的数字信号。
常用编码方式:不归零制,归零制(正脉冲代表1,负脉冲代表0),曼彻斯特编码(位周期中心的向上跳变代表0,向下代表1,反之亦可),差分曼彻斯特编码(每一位的中心处始终有跳变。位开始边界有跳变为0,位开始边界无跳变为1)。
2)基本的带通调制方法
调幅,调频,调相
2、奈氏准则和香农公式的主要区别是什么
奈氏准则:在任何信道中,码元传输的速率是有上限的,传输速率超过此上限,就会出现严重的码间串扰的问题,使接收端对码元的判决(即识别)成为不可能。
香农公式:求出了信息传输速率的极限。
意义在于:只要信息传输速率低于信道的极限信息传输速率,就一定可以找到某种方法来实现无差错的传输。
C=W*log2(1 S/N) ( log2表示以2为底的对数)(bit/s)
W是信道带宽(赫),S是信号功率(瓦),N是噪声功率(瓦)。
香农公式中的S/N 为无量纲单位。如:S/N=1000(即,信号功率是噪声功率的1000倍)
但是,当讨论信噪比(S/N)时,常以分贝(dB)为单位。公式如下:
SNR(信噪比,单位为dB)=10log(S/N)
3、信道复用技术
1)频分复用FDM:所有用户在同样的时间占用不同的带宽频率(频率带宽)
2)TDM:
3)波分复用WDM:
4)码分复用CDM:
码分多址CDMA
三、数据链路层
1、三个基本问题
1)封装成帧:数据部分长度上限—MTU
2)透明传输:用字节填充或字符填充解决透明传输问题。
3)差错检测:CRC循环冗余校验。
CRC运算实际上就是在数据长为k的后面添加供差错检测用的n位冗余码,然后构成帧k n位发送出去。
例子:现假定待传输的数据M = 101001(k = 6),除数p = 1101 (n = 3)比n多一位
这n位冗余码可以用下面的方法得出。
(1)用二进制的模2运算进行(2^n)乘M的运算,相当于在M后面添加n个0。
即M后面添加3个0
(2)现在得到M = 101001000(k n = 9)位的数除以除数p(n = 3)位,
得到商是Q(不关心),余数R =001(n位)R就是冗余码FCS,现在加上FCS后发送的帧是101001001
在接收端把接收到的数据M = 101001001以帧为单位进行CRC检验:把收到的每一个帧都除以相同的除数p(模2运算),然后检查得到的余数R。
如果在传输过程中没有差错,那么经过检验后得到余数R肯定是0。
在数据链路层若仅仅使用CRC差错检验技术,则只能做到对帧的无差错接收。
2、数据链路层拆分为两个子层
1)逻辑链路控制LLC
2)媒体接入控制MAC
3、适配器的作用
计算机与外界局域网的连接是通过通信适配器。NIC(网卡)。
1)进行串行/并行转换
2)对数据进行缓存
3)在计算机的OS安装设备驱动程序。
4、CSMA/CD协议
- 局域网上的计算机称为:主机,工作站,站点,站
以太网采取两种措施方便通信:
1)以太网提供的服务是尽最大努力的交付,即:不可靠的交付。对有差错帧是否需要重传由高层来决定。若高层使用TCP协议,TCP就会发现丢失了一些数据,经过一定时间后,TCP就把这些数据重新传递给以太网进行重传。
总线上只有一台计算机在发送数据,在同一时间只允许一台计算机发送数据。
2)以太网发送的数据都是用曼彻斯特编码的信号。
- CSMA/CD(载波监听多点接入/碰撞检测)协议的要点
1)多点接入:总线型网络,许多计算机以多点接入的方式连接在一根总线上。协议的实质是“载波监听”和“碰撞检测”。
2)载波监听: “发送前先监听”,即每一个站点在发送数据之前先要检测一下总线上是否有其他的站点在发送数据,如果有,则暂时不要发送数据,要等待信道变为空闲时再发送。
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
3)碰撞检测:“边发送边监听”,即适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。
是计算机边发送数据边检测信道上的信号电压大小。当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”
每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
以太网使用截断二进制指数退避算法来确定碰撞后重传的时机。基本退避时间为争用期2t。
以太网规定了一个最短帧长64字节,即512bit。帧间最小间隔为9.6us.
凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。
- CSMA/CD协议的要点归纳如下:
1)准备发送
2)检测信道
3)在发送过程中仍不停地检测信道,即:网络适配器要边发送边监听。分为如下两种可能性
一是发送成功;在争用期内一直未检测到碰撞。这个帧可定能够发送成功。发送完毕后其他什么都不做。然后返回1)
一是发送失败;在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待r倍512bit时间后,返回步骤2)继续检测信道。但若重传达到16次仍不能成功,则停止重传而向上报错。
以太网每发送完一帧一定要把已发送的帧暂时保留一下。如果在争用期内检测出发生了碰撞,那么还要在推迟一段时间后再把这个暂时保留的帧重传一次。
- 为什么以太网有一个最小帧长和最大帧长
设置最小帧长是为了区分开正常和因发生碰撞而异常中止的短帧。
设置最大帧长是为了保证个站都能公平竞争接入到以太网。因为如果某个站发送特长的数据帧,则其他的站就必须等待很长的时间才能发送数据。
5、同步通信与异步通信的区别是什么
同步通信:通信双方必须先建立同步,即双方的时钟要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。
异步通信:异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。
异步通信也可以是以帧作为发送的单位,接收端必须随时做好接收帧的准备。这时,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始,这也称为帧定界。帧定界还包含确定帧的结束位置,这有两种方法:一种是在帧的尾部设有某种特殊的比特组合来标志帧的结束;或者在帧首部中设有帧长度的字段。需要注意的是,在异步发送帧时,并不是说发送端对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,发送端可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的。发送端不需要在发送一帧之前和接收端进行协调(不需要先进行比特同步)。
6、位同步与帧同步的区别
位同步:使接收端接收的每一位信息都与发送端保持同步。
帧同步:识别一个帧的起始和结束位置。
7、数据链路层协议的三个基本问题
1)封转成帧
就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。
2)透明传输
不管什么字符都可以放在帧中传输过去,这样的传输就是透明传输。解决透明传输的问题方法是:发送端的数据链路层在数据中出现控制字符”SOH”或”EOH”的前面插入一个转义字符”ESC”,而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。
3)差错检测
采用的是循环冗余检验(CRC:Cyclic Redundancy Check)的差错检查技术,如果仅仅使用CRC,则只能做到对帧的无差错接收,即接收的帧在传输的过程中没有产生差错,并没有要求数据链路层向网络层提供“可靠传输”的服务。
8、适配器(网卡)的作用
1)适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。
2)由于网络上的数据率和计算机总线上的数据率并不相同,因此在适配器中必须装有对数据进行缓存的存储芯片。
3)适配器还要实现以太网协议。
9、以太网的MAC层
MAC帧的格式
最后一个字段是4字节的帧检验序列FCS(使用CRC检验)
网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发和过滤。网桥依靠转发表来转发帧。
集线器工作在物理层。
10、网桥带来的好处和缺点
好处:
1)过滤通信量,增大吞吐量
2)扩大了物理范围
3)提高了可靠性
4)可互联不同物理层、不同MAX子层和不同速率的以太网
缺点:
1)网桥对接收的帧要先存储和查找转发表,然后才转发,转发之前进行CSMA/CD算法,增加了延迟。
2)MAC子层没有流量控制功能,当网络上负荷很重时,网桥中的缓存的存储空间可能不够而发生溢出,以致产生帧丢失的现象。
3)可能发生广播风暴。
11、透明网桥
“透明”是指以太网上的站点并不知道所发送的帧将经过哪几个网桥,以太网上的站点都看不见以太网上的网桥。透明网桥还是一种即插即用设备。
网桥通过自学习算法处理收到的帧。
四、网络层
1、网络层提供的两种服务:虚电路服务,数据报服务。
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(即:IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。
由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做的较简单,且价格低廉。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
虚电路服务和数据报服务的主要区别:
2、网际协议IP
网际协议IP是TCP/IP体系中最重要的协议之一。与其配套使用的还有三个协议:
1)地址解析协议ARP(Address Resolution Protocol)
2)网际控制报文协议ICMP(Internet Control Message Protocol)
3)网际组管理协议IGMP(Internet Group Management Protocol)
应用层 | 各种应用层协议 | |
---|---|---|
(HTTP,FTP,SMTP等) | ||
网络层 | ICMP IGMP | |
IP | ||
(网际层) | ||
ARP | ||
网络接口层 | 与各种网络接口 | |
物理硬件 | ||
- 将网络互连起来的中间设备:
1)物理层使用的中间设备叫做转发器(repeater)
2)数据链路层使用的中间设备叫做网桥或桥接器(bridge)
3)网络层使用的中间设备叫做路由器(router)
4)在网络层以上使用的中间设备叫做网关(gateway)
当中间设备是转发器或网桥时,这仅仅是把一个网络扩大了,而从网络层的角度看,这仍然是一个网络,一般并不称之为网络互连。网关由于比较复杂,使用得较少。有时把网络层使用的路由器也称之为网关。
虚拟互连网络即为逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是存在的,但是利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用IP协议的虚拟互连网络可简称为IP网。
3.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响应。
假定在一个局域网中计算机A发送ARP请求分组,希望找出计算机B的硬件地址。这时局域网上的所有计算机都能收到这个广播发送的ARP请求分组。试问这时由哪一个计算机使用ARP响应分组将计算机B的硬件地址告诉计算机A
区分两种情况:如果计算机B和计算机A都连接在同一个局域网上,那么就是计算机B发送ARP响应分组。
如果计算机B和计算机A不是连接在同一个局域网上,那么就必须由一个连接在本局域网上的路由器来转发ARP请求分组。这时,该路由器向计算机A发送ARP回答分组,给出自己的硬件地址。
4.分类的IP地址
现在的IP网络使用32位地址,以点分十进制表示,如172.16.0.0。地址格式为:IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址。
IP地址类型:最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。
1)A类IP地址 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。
2)B类IP地址 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
3)C类IP地址 一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
4)D类地址用于多点广播(Multicast)。 D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。224.0.0.0到239.255.255.255用于多点广播 。
5)E类IP地址 以“11110”开始,为将来使用保留。240.0.0.0到255.255.255.254,255.255.255.255用于广播地址
全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下: 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地址的指派范围如下表
私有地址
私有地址包括3组
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
我们买的无线路由器,也要设置局域网,一般为192开头的,比如192.168.0.1或者192.168.199.1(比如极路由就是这个地址)
我们建企业网(单位网络)时,一般是使用私有地址来分配内部主机,小企业使用C类的192.168.0.0网络,中型企业使用172.16.0.0网络,如果还不够用,还有10.0.0.0 网络。
5.IP数据报格式
1)版本:IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。
2)首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。
3)区分服务(服务类型):Type Of Service。占8位,未使用。
4)总长度:IP报文的总长度。报头的长度和数据部分的长度之和。占16位,因此数据报的最大长度为2^16-1=65535字节(实际极少遇到)。
在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段最大长度,这称为最大传送单元MTU。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层规定的MTU值。如:最常用的以太网就规定其MTU值是1500字节。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
IP协议规定,在因特网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。即:假定上层交下来的数据长度有512字节,加上最长的IP首部60字节,再加上4字节的富裕量。否则就要进行分片。
5)标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
6)标志:共3位。R、DF、MF三位。目前只有后两位有效,DF(don’t fragment)位:为1表示不分片,为0表示分片。MF(more fragment):为1表示“更多的片”,为0表示这是最后一片。
7)片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)
IP数据报分片举例1:一数据报总长度3820字节,其数据部分3800字节长,需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分为3个数据报片,其数据部分的长度分别为1400,1400,1000字节。原始数据报首部被复制为各数据片的首部,但必须修改有关字段的值。分片结果如下:
总长度 | 标识 | MF | DF | 片偏移 | |
---|---|---|---|---|---|
原始数据报 | 3820 | 12345 | 0 | 0 | 0 |
数据报片1 | 1420 | 12345 | 1 | 0 | 0 |
数据报片2 | 1420 | 12345 | 1 | 0 | 175 |
数据报片3 | 1020 | 12345 | 0 | 0 | 350 |
举例2:一个长4000B的IP数据报,数据部分3980B,到达了一个路由,需要转发到一个MTU为1500B的链路上,这样就得分片了。分片数目是3片。每个片都是一个数据报。假设标识是777,那么数据报分片结果是:
分片一:标识:777,MF=1,DF=0,片偏移=0,有效数据:1480B(编号0~1479) 分片二:标识:777,MF=1,DF=0,片偏移=185,185*8=1480,有效数据:1480B(编号1480~2959) 分片三:标识:777,MF=0,DF=0,片偏移370,370*8=2960,有效数据:1020B(编号2960~3979)
8)生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。
9)协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
10)首部校验和:计算IP头部的校验和,检查IP报头的完整性。不包括数据部分。
11)源IP地址:标识IP数据报的源端设备。32位
12)目的IP地址:标识IP数据报的目的地址。32位
6.IP层转发分组的流程
1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付给目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就要执行3)进行间接交付。
3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行4)。
4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行5)。
5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行6)。
6)报告转发分组出错。
7.划分子网和构造超网
- IP地址={<网络号>,<子网号>,<主机号>}
- 默认子网掩码:
A类地址的默认子网掩码:255.0.0.0
B类地址的默认子网掩码:255.255.0.0
C类地址的默认子网掩码:255.255.255.0
子网掩码是一个网络或一个子网的重要属性:路由器和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器;
路由表必须包含以下三项内容:目的网络地址,子网掩码和下一跳地址;
- 划分子网后,分组转发的算法:
1)从收到的数据报的首部提取目的IP地址D;
2)先判断是否为直接交付,对路由器直接连接的网络逐个进行检查:用各网段的子网掩码和D逐位相“与”(AND)操作,看结果是否和相应的网络地址匹配;若匹配,则把分组进行直接交付(当然还需要把D转换为物理地址,把数据报封装在MAC帧中发送出去),转发任务结束;否则就是间接交付,执行3);
3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由器中所指明的下一跳路由器;否则,执行4);
4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”(AND操作),其结果为N;若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行5);
5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6);
6)报告转发分组出错;
- 无分类编址CIDR(构成超网)
1)变长子网掩码VLSM:指明在一个划分子网的网络中可同时使用几个不同的子网掩码;
2)无分类域间路由CIDR:
**CIDR消除了传统的A类,B类,C类地址以及划分子网的概念,因而可以更加有效的分配IPv4的地址空间;
**CIDR把32位的IP地址划分为两部分,前面的部分是“网络前缀”用来指明网络,后面的部分则用来指明主机;
**IP地址={<网络前缀>,<主机号>}
**CIDR还使用“斜线记法”或称“CIDR记法”,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数;128.14.35.7/24
**CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”,我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数;
3)CIDR使用32位的地址掩码,地址掩码有一串1和一串0组成,而1的个数就是网络前缀的长度;斜线记法中,斜线后面的数字就是地址掩码中1的个数;
4)128.14.35.7/20=10000000 00001110 00100011 00000111 //红色表示网络前缀:20位
5)斜线记法除了可以表示IP地址外,还可以表示这个地址的网络前缀有几位,剩下的就是主机位;通过简单的计算,还可以得出这个地址块中的最下地址和最大地址;
6)求地址块中最小地址和最大地址:
**找出地址掩码中1和0的交界处发生在地址中的哪一个字节;
**把这一字节的十进制数用二进制表示出来;
** 把主机号数(32-网络前缀号数)的那几位,全部置0就是最小地址,全部置0就是最大地址;
7)路由聚合:一个CIDR地址块中很多地址,在路由表中利用CIDR地址块来查找目的网络;路由聚合也称为构造超网
8)CIDR记法有很多种形式:10.0.0.0/10可简写为:10/10;在网络前缀的后面加一个星号*:00001010 00*,*号表示IP地址中的主机号;
9)构成超网的方法:就是将网络前缀缩短。网络前缀越短,其地址块所包含的地址数就越多;
10)最长前缀匹配:
**路由表中每个项目由“网络前缀”和“下一跳地址”组成,但是在查找路由表时,可能会得到不止一个匹配结果;
**应当从匹配结果中选择具有最长网络前缀的路由;这叫做最长前缀匹配,这是因为网络前缀越长,其地址块就越小,因而路由就越具体。
子网划分
以C类网络为例,原有8位主机位,2的8次方即256个主机地址,默认子网掩码255.255.255.0。
借用1位主机位,产生2个子网,每个子网有126个主机地址;借用2位主机位,产生4个子网,每个子网有62个主机地址……
练习题
把子网掩码为255.255.0.0的网络40.15.0.0分为两个子网,假设第一个子网为40.15.0.0/17,则第二个子网为?
40.15.0.0/17 表示网段是40.15.0.0,子网掩码是17位。
子网掩码为:255.255.128.0,斜杠后面的17表示子网掩码前17位为1.
答案:划分为两个子网的话子网掩码应该为255.255.128.0
第一个子网是40.15.0.0/17,可用地址范围是40.15.0.1~40.15.127.254(第一个为主机地址,最后一个为广播地址,不可用)
第二个子网是40.15.128.0/17,可用地址范围是40.15.128.1~40.15.255.254
解析:
掩码的前两个八位是255,第三个八位是128,有2的一次方个子网(因为第三个八位只有一个1,后面七位都是0),所以ip 地址第三个8位是0000,0000或者1000,0000,即0或者128。
因为第3个8位是1000,0000,可以区分开头第一个数是0还是1, 区分了两个子网。所以这两个子网是40.15.0.0和40.15.128.0
8.ICMP(Internet Control Message Protocol)网际控制报文协议
ICMP 报文有两种:差错报告报文和询问报文。
当运行PING 127.0.0.1时,这个IP数据报将发送给谁
127.0.0.1是环回地址。主机将测试用的IP数据报发送给本主机的ICMP(而不是发送到因特网上)以便进行环回测试。
9.IP协议的定义,主要有什么作用?TCP与UDP呢?
IP协议(Internet Protocol):网际协议,主要提供网际互联的作用。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,在收发数据前,必须和对方建立连接。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议,它是面向非连接的协议,不与对方建立连接,而是直接就把数据包发送过去。
10.RIP协议的特点?RIP的优缺点?RIP用什么来传送?
1)特点
l 仅和相邻路由器交换信息
l 路由器交换的信息是当前本路由器所知道的全部信息,即自己的路由表
l 按固定的时间间隔交换路由信息
2)优缺点
优点:实现简单、开销较小
缺点:限制了网络的规模(因为它能使用的最大距离为15),坏消息传播得慢。
3)RIP用UDP来传送
11.OSPF协议的特点?OSPF用什么来传送?
1)特点
l 向本自治系统中所有路由器发送信息(而RIP是发送给邻居)
l 发送的信息就是与本路由器相邻的所有路由器的链路状态(RIP发送的是整个路由表)
l 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息(而RIP是30秒更新一次)
2)OSPF直接用IP数据报传送
12.链路层广播和IP广播有何区别
链路层广播是用数据链路层协议(第二层)在一个以太网上实现的对该局域网上的所有主机的MAC帧进行广播。
IP广播则是用IP协议通过因特网实现的对一个网络(即目的网络)上的所有主机的IP数据报广播。
13.交换机和路由器各自的实现原理是什么?有什么区别?
实现原理:路由器通过路由决定数据的转发。转发策略称为路由选择。
而交换机则是一种基于MAC地址识别,能完成封转转发数据包功能的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的起始者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。
区别:
l 二者的工作层次不同
交换机工作在数据链路层,而路由器工作在网络层。
l 二者转发所依据的对象不同
交换机是利用MAC地址确定转发数据的目的地址,而路由器则是利用IP地址来确定数据转发的地址。
14.VPN(虚拟专用网),NAT(网络地址转换)
五、运输层
1.运输层向它上面的应用层提供通信服务
它属于面向通信部分的最高层,同时也是用户功能中的最底层。
两个主机进行通信就是两个主机中的应用进程互相通信。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。即:端到端的通信是应用进程之间的通信。
运输层有一个很重要的功能——复用(multiplexing)和分用(demulitiplexing)。复用指在发送方不同的应用进程都可以使用同一个运输层协议传达数据。分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。
网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
运输层对收到的报文进行差错检测。运输层需要提供两种不同的运输协议,即面向连接的TCP和无连接的UDP.
运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
2.运输层的两个主要协议
- UDP:用户数据保协议
(1) UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
(2) UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
(3) UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。
(4) UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。很多的实时应用(如IP电话、实时视频会议等)要去源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太多的时延。UDP正好符合这种要求。
(5) UDP支持一对一、一对多、多对一和多对多的交互通信。
(6) UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
注意:(1) 不使用拥塞控制功能的UDP有可能会引起网络产生严重的拥塞问题。
(2) 一些使用UDP的实时应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。
UDP的首部格式:用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,由四个字段组成,每个字段的长度都是两个字节。各字段的意义如下:
(1) 源端口 源端口号。在需要对方回信时选用。不需要时可用全0。 (2) 目的端口 目的端口号。 这在终点交付报文时必须要使用到。 (3) 长度 UDP用户数据报的长度,其最小值是8(仅有首部) (4) 检验和 检测UDP用户数据报在传输中是否有错。有错就丢弃。
UDP计算校检和的方法和计算IP数据报首部校检和的方法相似。但不同的是:IP数据报的校检和只校检IP数据报的首部,但UDP的校检和使把首部和数据部分一起都校检。
- TCP:传输控制协议
TCP最主要的特点
(1)面向连接的运输层协议;
(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(端到端的通信);
(3)TCP提供可靠交付的服务(高可靠性,确保传输数据的正确性,不出现丢失或乱序);
(4)全双工方式传输;
(5)采用字节流方式,即以字节为单位传输字节序列;
TCP连接:TCP把连接作为最基本的抽象。
TCP连接的端点是个很抽象的套接字,即(IP地址:端口号)。同一个IP地址可以有多个不同的TCP链接,而同一个端口号也可以出现在多个不同的TCP连接中。
- TCP报文段的首部格式 概述:TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节。
源端口和目标端口
各占2个字节,分别写入源端口号和目的端口号。
序列号
占4个字节,表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始。
确认号
占4个字节,是期望收到对方写一个报文段的第一个数据字节的序号。若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。
数据偏移(TCP首部长度)
占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度,由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度。
紧急URG控制位
当URG=1时,表明紧急指针字段有效。它告诉系统此报文中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送。当URG置1时,发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中的紧急指针字段配合使用。
确认ACK控制位
仅当ACK=1时,确认号字段才有效,TCP规定,在连接建立后的所有传送的报文段都必须要ACK置1。
推送PSH控制位
发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位RST控制位
当RST=1时,表明TCP连接中出现了严重差错,必须释放连接,然后再重新建立运输连接。
同步SYN控制位
在连接建立时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受请求。
终止FIN控制位
用来释放一个连接。当FIN=1时,表明此段报文段的发送发的数据已经发送完毕,并要求释放运输连接。
窗口
占2个字节。窗口指的是发送本报文段的接受窗口。窗口值告诉对方:从本报文段首部中的确认好算起,接收方目前允许对方发送的数据量。窗口值作为接收方法让发送方设置其发送窗口的依据。窗口字段明确指出了现在允许对方发送的数据量。窗口值是经常动态变化的。
紧急指针
占2个字节。指出本报文段中紧急数据的字节数。
选项
长度可变,最长可达40字节。当没有使用“选项”时,TCP的首部长度是20字节。
选项部分的应用:
1)MSS最大报文段长度(Maxium Segment Size):指明数据字段的最大长度,数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS值指示自己期望对方发送TCP报文段时那个数据字段的长度。通信双方可以有不同的MSS值。如果未填写,默认采用536字节。MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中。
2)窗口扩大选项(Windows Scaling):由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项。
3)SACK选择确认项(Selective Acknowledgements):用来确保只重传缺少的报文段,而不是重传所有报文段。比如主机A发送报文段1、2、3,而主机B仅收到报文段1、3。那么此时就需要使用SACK选项来告诉发送方只发送丢失的数据。那么又如何指明丢失了哪些报文段呢?使用SACK需要两个功能字节。一个表示要使用SACK选项,另一个指明这个选项占用多少字节。描述丢失的报文段2,是通过描述它的左右边界报文段1、3来完成的。而这个1、3实际上是表示序列号,所以描述一个丢失的报文段需要64位即8个字节的空间。那么可以推算整个选项字段最多描述(40-2)/8=4个丢失的报文段。
4)时间戳选项(Timestamps):可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文。
5)NOP(NO-Operation):它要求选项部分中的每种选项长度必须是4字节的倍数,不足的则用NOP填充。同时也可以用来分割不同的选项字段。如窗口扩大选项和SACK之间用NOP隔开。
3.TCP可靠传输的实现
TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。
ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议,拥有错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和 负面确认及重传(Negative Acknowledgment and Retransmission)等机制。
连续ARQ协议:由于停止等待ARQ协议信道利用率太低,所以需要使用连续ARQ协议来进行改善。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。
发送方采用流水线传输。流水线传输就是发送方可以连续发送多个分组,不必每发完一个分组就停下来等待对方确认。如下图所示:
连续ARQ协议通常是结合滑动窗口协议来使用的,发送方需要维持一个发送窗口,如下图所示:
图(a)是发送方维持的发送窗口,它的意义是:位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方的确认,这样就提高了信道利用率。
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。例如上面的图(b),当发送方收到第一个分组的确认,就把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,则现在可以发送窗口内的第6个分组。
接收方一般都是采用累积确认的方式。也就是说接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认。如果收到了这个分组确认信息,则表示到这个分组为止的所有分组都已经正确接收到了。
累积确认的优点是容易实现,即使确认丢失也不必重传。但缺点是,不能正确的向发送方反映出接收方已经正确收到的所以分组的信息。比如发送方发送了前5个分组,而中间的第3个分组丢失了,这时候接收方只能对前2个发出确认。而不知道后面3个分组的下落,因此只能把后面的3个分组都重传一次,这种机制叫Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。
滑动窗口协议:在发送方和接收方之间各自维持一个滑动窗口,发送方是发送窗口,接收方是接收窗口,而且这个窗口是随着时间变化可以向前滑动的。它允许发送方发送多个分组而不需等待确认。TCP的滑动窗口是以字节为单位的。
如下图所示,发送窗口中有四个概念::已发送并收到确认的数据(不在发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之内)、允许发送但尚未发送的数据(位于发送窗口之内)、发送窗口之外的缓冲区内暂时不允许发送的数据。
接收窗口中也有四个概念:已发送确认并交付主机的数据(不在接收窗口和接收缓冲区之内)、未按序收到的数据(位于接收窗口之内)、允许的数据(位于接收窗口之内)、不允许接收的数据(位于发送窗口之内)。
规则:
1)凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用。
2)只有当发送方A收到了接收方的确认报文段时,发送方窗口才可以向前滑动几个序号。
3)当发送方A发送的数据经过一段时间没有收到确认(由超时计时器控制),就要使用回退N步协议,回到最后接收到确认号的地方,重新发送这部分数据。
4.TCP可靠传输、流量控制和拥塞控制的实现
可靠传输:
l 对于收到的请求,给出确认响应
l 超时重传
流量控制:
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口实现流量控制。
设A向B发送数据。在连接建立时,B告诉A:我的接收窗口rwnd=400。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。TCP窗口单位是字节,不是报文段。
上图中:接收方的主机B进行了三次流量控制。第一次把小黄口减小到rwnd=300,第二次又减到rwnd=100,最后减到rwnd=0,即不允许发送方再发送数据了。
考虑一种特殊的情况,就是接收方若没有缓存足够使用,就会发送零窗口大小的报文,此时发送放将发送窗口设置为0,停止发送数据。之后接收方有足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失的,那么发送方的发送窗口就一直为零导致死锁。
解决这个问题,TCP为每一个连接设置一个持续计时器(persistence timer)。只要TCP的一方收到对方的零窗口通知,就启动该计时器,周期性的发送一个零窗口探测报文段。对方就在确认这个报文的时候给出现在的窗口大小(注意:TCP规定,即使设置为零窗口,也必须接收以下几种报文段:零窗口探测报文段、确认报文段和携带紧急数据的报文段)。
拥塞控制:
所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
- 慢开始(Slow-start)
慢开始的“慢”并不是指增长速率的慢,而是指在TCP开始发送报文段时先设置拥塞窗口为1。
算法流程如下
1)连接建好的开始先初始化cwnd = 1,表明可以传一个SMSS大小的数据。
2)每当收到一个ACK,cwnd ; 呈线性上升
3)每当过了一个RTT,cwnd = cwnd*2; 呈指数让升
4)还有一个慢启动门限ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入拥塞避免。
5)当遇到RTO超时重传时会触发cwnd和ssthresh的调整,ssthresh=max(cwnd/2, 2),cwnd=1,然后重新开始慢启动过程。
- 拥塞避免(Congestion Avoidance)
使拥塞窗口按线性规律增长。
从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使 用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。慢启动门限 ssthresh 的用法如下:
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
分别对图中标示的箭头做如下说明:
1)在标号为1的箭头处,TCP初始连接进行数据交换,开始慢启动,初始cwnd=IW=1,ssthresh=16,在传输轮次0-4阶段进行慢启动过程,cwnd按照1-2-4-8-16的顺序进行指数增长
2)在标号为2的箭头处,cwnd=16=ssthresh,此时触发拥塞避免过程,开始线性增长,在传输轮次4-12阶段,cwnd按照16-17-18-19-20-21-22-23-24进行线性增长。
3)在标号为3的箭头处,TCP发生了RTO重传,认为网络发生拥塞,于是设置ssthresh=cwnd/2=12,cwnd=1重新进行慢启动过程
4)在标号为4的箭头处,TCP从cwnd=1开始重新开始慢启动过程
5)在标号为5的箭头处,当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。
- 快重传(Fast Restrangsmit)
发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待为其设置的重传计时器到期。
- 快恢复(与快重传配合使用)(Fast Recovery)
当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限减半。这是为了预防网络发生拥塞。请注意,接下来不执行慢开始算法。
由于发送方现在认为网络很可能没有发生拥塞(如果网路发生了严重的拥塞,就不会一连有好几个报文段连续达到接收方,就不会导致接收方连续发送重复确认),因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口现在不设置为1),而是把它设置为慢开始门限减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
下图是慢启动和拥塞避免(快重传和快恢复)的一个可视化描述。我们以段为单位来显示cwnd和ssthresh,但它们实际上都是以字节为单位进行维护的。
指数增长—>加法增大—>乘法减小(超时)—>加法增大(快恢复)
一条TCP连接有时会因等待重传计时器的超时而空闲较长的时间,慢开始和拥塞避免无法很好的解决这类问题,因此提出了快重传和快恢复的拥塞控制方法。
快重传算法并非取消了重传机制,只是在某些情况下更早的重传丢失的报文段(如果当发送端接收到三个重复的确认ACK时,则断定分组丢失,立即重传丢失的报文段,而不必等待重传计时器超时)。
例如:M1,M2,M3 —–> M1,M3,缺失M2,则接收方向发送方持续发送M2重复确认,当发送方收到M2的三次重复确认,则认为M2报文丢失,启动快重传机制,重传数据,其他数据发送数据放入队列,待快重传结束后再正常传输。
快恢复算法有以下两个要点:
1)当发送方连续收到接收方发来的三个重复确认时,就执行“乘法减小”算法,把慢开始门限减半,这是为了预防网络发生拥塞。
2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是把cwnd(拥塞窗口)值设置为慢开始门限减半后的值,然后开始执行拥塞避免算法,使拥塞窗口的线性增大。
5.TCP运输连接管理
1)TCP的连接建立(用三次握手建立TCP连接)
为什么A还要发送一次确认呢?
这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误。假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连续请求报文段后,就误认为是A又发出新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。
由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却认为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。
采用三次握手的办法可以防止上述现象的发生。例如在刚才的情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。
2)TCP的连接释放(四次挥手)
**A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的FIN置1,其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1。这时A进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
**B收到连接释放报文段后即发出确认,确认号是ack=u 1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后B就进入了CLOSE-WAIT(关闭等待)状态。因而从A到B这个方向的连接释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收。
**A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
**若B已经没有要向A发送的数据,其应用程序就通知TCP释放连接。这时B发出的连接释放该报文段必须使FIN=1。现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次已发送过的确认号ack=u 1。这时B就进入LAST_ACK(最后确认)状态,等待A的确认。
**A在收到B的连接释放该报文段后,必须对此发出确认。在确认报文段中把ACK置1,确认号ack=w 1,而自己的序号是seq=u 1。然后进入到TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入到CLOSED状态。
为什么A在TIME-WAIT状态必须等待2MSL的时间呢?
**为了保证A发送的最后一个ACK报文段能够到达B
**防止已失效的连接请求报文段出现在本连接中。
六、应用层
1.DNS(Domain Name System)域名系统
1)DNS的工作原理
DNS提供的服务是用来将域名转换为IP地址的工作。它的基本工作原理如下图所示:
2)DNS的工作过程
**在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
**如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
**如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
**如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
**如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
**如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是迭代查询。
2.文件传送协议(FTP)
FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
3.远程终端协议Telnet
4.万维网WWW(World Wide Web):万维网是一个大规模联机式的信息储藏所
URL(统一资源定位符)
5.超文本传输协议(HTTP)
6.电子邮件(SMTP简单邮件传送协议)
7.动态主机配置协议(DHCP)
8.简单网络管理协议(SNMP)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127268.html原文链接:https://javaforall.cn