二、计算机网络

1、电路交换与分组交换的区别?优劣对比

一. 电路交换:

电路交换是以电路连接为目的的交换方式,通信之前要在通信双方之间建立一条被双方独占的物理通道。

电路交换的三个阶段:

(1)建立连接       (2)通信       (3)释放连接

电路交换具有以下优缺点:

优点:

(1)由于通信线路为通信双方用户专用,数据直达,所以传输数据的时延非常小。

(2)通信双方之间的屋里通路一旦建立,双方可以随时通信,实时性强。

(3)双方通信时按发送顺序传送数据,不存在失序问题。

(4)电路交换既适用于传输模拟信号,也适用于传输数字信号。

(5)电路交换的交换设备及控制均比较简单。

缺点:

(1)电路交换平均连接建立时间对计算机通信来说较长。

(2)电路交换家里连接后,物理通路被通信双方独占,即使通信线路空闲,也不能供其他用户使用,因而信道利用率低。

(3)电路交换时,数据直达,不同类型,不同规格,不同速率的终端很难相互进行通信,也难以在通信过程中进行差错控制。

电路交换举例:

二. 分组交换

分组交换是以分组为单位进行传输和交换的,它是一种存储——转发交换方式,即将到达交换机的分组先送到存储器暂时存储和处理,等到相应的输出电路有空闲时再送出。

分组交换具有以下优缺点。

优点:

(1)分组交换不需要为通信双反预先建立一条专用的通信线路,不存在连接建立时延,用户可随时发送分组。

(2)由于采用存储转发方式,加之交换节点具有路径选择,当某条传输线路故障时可选择其他传输线路,提高了传输的可靠性。

(3)通信双反不是固定的战友一条通信线路,而是在不同的时间一段一段地部分占有这条物理通路,因而大大提高了通信线路的利用率。

(4)加速了数据在网络中的传输。因而分组是逐个传输,可以使后一个分组的存储操作与前一个分组的转发操作并行,这种流水线式传输方式减少了传输时间。

(5)分组长度固定,相应的缓冲区的大小也固定,所以简化了交换节点中存储器的管理。

(6)分组较短,出错几率减少,每次重发的数据量也减少,不仅提高了可靠性,也减少了时延。

缺点:

(1)由于数据进入交换节点后要经历存储转发这一过程,从而引起的转发时延(包括接受分组、检验正确性、排队、发送时间等),而且网络的通信量越大,造成的时延就越大,实时性较差。

(2)分组交换只适用于数字信号。

(3)分组交换可能出现失序,丢失或重复分组,分组到达目的节点时,对分组按编号进行排序等工作,增加了麻烦。

综上,若传输的数据量很大,而且传送时间远大于呼叫时间,则采用电路交换较为合适;当端到端的通路有很多段链路组

2、OSI有哪几层,会画出来,知道主要几层的各自作用。

第7层:应用层(ApplicationLayer)

  应用层能与应用程序界面沟通,以达到展示给用户的目的。在此常见的协议有:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

  第6层:表示层(PresentationLayer)

  表示层能为不同的客户端提供数据和信息的语法转换内码,使系统能解读成正确的数据。同时,也能提供压缩解压、加密解密。

  第5层:会话层(SessionLayer)

  会话层用于为通信双方制定通信方式,并创建、注销会话(双方通信)。

  第4层:传输层(TransportLayer)

  传输层用于控制数据流量,并且进行调试及错误处理,以确保通信顺利。而发送端的传输层会为分组加上序号,方便接收端把分组重组为有用的数据或文件。

  第3层:网络层(NetworkLayer)

  网络层的作用是决定如何将发送方的数据传到接收方。该层通过考虑网络拥塞程度、服务质量、发送优先权、每次路由的耗费来决定节点X到节点Y的最佳路径。我们熟知的路由器就工作在这一层,通过不断的接收与传送数据使得网络变得相互联通。

  第2层:数据链路层(DatalinkLayer)

  首先数据链路层的功能在于管理第一层的比特数据,并且将正确的数据发送到没有传输错误的路线中。创建还有辨认数据开始以及退出的位置同时予以标记。另外,就是处理由数据受损、丢失甚至重复传输错误的问题,使后续的层级不会受到影响,所以它运行数据的调试、重传或修正,还有决定设备何时进行传输。设备有:Bridge桥接器switch交换器

  第1层:物理层(PhysicalLayer)

  物理层定义了所有电子及物理设备的规范。其中特别定义了设备与物理媒介之间的关系,这包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器(在SAN中使用的主机适配器)以及其他的设备的设计定义。因为物理层传送的是原始的比特数据流,即设计的目的是为了保证当发送时的信号为二进制“1”时,对方接收到的也是二进制“1”而不是二进制“0”。因而就需要定义哪个设备有几个针脚,其中哪个针脚发送的多少电压代表二进制“1”或二进制“0”,还有例如一个bit需要持续几微秒,传输信号是否在双向上同时进行,最初的连接如何创建和最终如何终止等问题。

  为了更好理解物理层与数据链路层之间的区别,可以把物理层认为是主要的,是与某个单一设备与传输媒介之间的交互有关,而数据链路层则更多地关注使用同一个通讯媒介的多个设备(例如,至少两个设备)之间的互动。物理层的作用是告诉某个设备如何传送信号至一个通讯媒介,以及另外一个设备如何接收这个信号(大多数情况下它并不会告诉设备如何与通讯媒介相连接)。有些过时的物理层标准如RS-232倒是的确使用物理线缆来控制通讯媒介的接入。

  物理层的主要功能和提供的服务如下:

在设备与传输媒介之间创建及终止连接。

参与通讯过程使得资源可以在共享的多用户中有效分配。例如,冲突解决机制和流量控制。

对信号进行调制或转换使得用户设备中的数字信号定义能与信道上实际传送的数字信号相匹配。这些信号可以经由物理线缆(例如铜缆和光缆)或是无线信道传送。

应用层 与用户应用进程的接口

表示层 数据格式的转换

会话层 会话管理与数据传输的同步

传输层 端到端经网络透明地传送报文

网络层 分组传送,路由选择

数据链路层 在链路上无差错地传送帧

物理层 经物理媒体透明传送比特流

3、TCP/IP有哪几层,会画出来,知道所有层数的作用,会列举各层主要的协议名称

相比于OSI的七层模型,更常用的是TCP/IP的5层模型。TCP/IP的5层模型是将ISO的七层模型的应用层、表示层、会话层合并为应用层,得到如下图所示的五层模型

4、硬件(MAC)地址的概念及作用

MAC地址(MediaAccessControlAddress),媒体访问控制地址,或称为物理地址,是用来定义网络设备的位置的。在OSI模型中,第三层网络层负责IP地址,第二层数据链结层则负责MAC地址。一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC地址。

5、ARP协议的用途 及算法、在哪一层上会使用arp ?

地址解析协议(AddressResolutionProtocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

  在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。

主机名称         IP地址     MAC地址

A       192.168.38.10 00-AA-00-62-D2-02

B       192.168.38.11 00-BB-00-62-C2-02

C       192.168.38.12 00-CC-00-62-C2-02

D      192.168.38.13 00-DD-00-62-C2-02

E       192.168.38.14 00-EE-00-62-C2-02

…     …      …

  以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARPrequest),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARPresponse):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。

  这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度

6、CRC冗余校验算法,反码和检验算法(这题答案不完整)

循环冗余校验码,是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性

7、如何实现透明传输

所进即所出

透明传输就是在传输过程中,对外界透明,就是说你看不见他是传送网络,不管传输的业务如何,我只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,而不对传输的业务进行处理,所采用的设备只是起一个通道作用,把要传输的内容完好的传到对方。

透明传输不用关心下层协议的传输。

“0比特插入法”对数据实现透明传输

ppp帧起始标志为01111110,包含连续6个1,为了避免信息位中出现连续6个1。发送端连续发送5个1,则插入一个0

8、知道各个层使用的是哪个数据交换设备。(交换机、路由器、网关)

1)交换机

  在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中。

  交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

  交换机被广泛应用于二层网络交换,俗称“二层交换机”。

  交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工作在OSI七层模型中的第二层、第三层、第四层盒第七层,并因此而得名。

  2)路由器

  路由器(Router)是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如网际协议。

  路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。

  3)网关

  网关(Gateway),网关顾名思义就是连接两个网络的设备,区别于路由器(由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器(Router)称为网关,在今天很多局域网采用都是路由来接入网络,因此现在通常指的网关就是路由器的IP),经常在家庭中或者小型企业网络中使用,用于连接局域网和Internet。网关也经常指把一种协议转成另一种协议的设备,比如语音网关。

  在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host)。网关能在网络间转递数据包,但主机不能转送数据包。在主机(又称终端系统,endsystem)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系统,intermediatesystem)只需要到达网际层(Internetlayer),决定路径之后就可以转送。在当时,网关(gateway)与路由器(router)还没有区别。

  在现代网络术语中,网关(gateway)与路由器(router)的定义不同。网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IPgateway)。

  网关是连接两个网络的设备,对于语音网关来说,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收端的时候再通过网关还原成模拟的电话信号,最后才能在电话机上听到。

  对于以太网中的网关只能转发三层以上数据包,这一点和路由是一样的。而不同的是网关中并没有路由表,他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户。

9、路由表的内容

路由表(routingtable)或称路由择域信息库(RoutingInformationBase),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。

路由表使用了和利用地图投递包裹相似的思想。只要网络上的一个节点需要发送数据给网络上的另一个节点,它就必须要知道把数据发送到哪。设备不可能直接连接到目的节点,它需要找到另一个方式去发送数据包。在局域网中,节点也不知道如何发送IP包到网关。将数据包发到正确的地址是一个复杂的任务,网关需要记录发送数据包的路径信息。路由表就存储着这样的路径信息,就如地图一样,是一个记录路径信息,并为需要这些信息的节点提供服务的数据库。

路由表参数说明:

  Destination:目的网段

  mask:子网掩码

  interface:到达该目的地的本路由器的出口ip

  gateway:下一跳路由器入口的ip,路由器通过interface和gateway定义一调到下一个路由器的链路,通常情况下,interface和gateway是同一网段的

  metric:跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由

10、分组转发算法。

未找到合适答案,

11、IP报文的格式,格式的各个字段的含义要理解。

IP数据包由报头和数据两部分组成。报头的前一部分是固定长度,共20字节。在报头的固定部分的后面是可选部分——IP选项和填充域。

首部各字段的含义如下

1、版本

占4位,指IP协议的版本。

2、报头长度

占4位,该字段的单位是32位字(1个32位字长是4字节),因此当IP报头长度为1111时,报头长度就达到最大值60字节。当IP分组的首部长度不是4字节的整数倍是,就需要对填充域加以填充。最常用的报头长度为20位(报头长度值为0101),这时不使用任何选项。

3、区分服务(服务类型)

占8位,在一般情况下都不使用这个字段。

4、总长度

指报头和数据之和的长度,单位是字节。总长度字段为16位,故IP数据报的最大长度为65535。

每一种数据链路层都有其自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU。当IP数据报封装成链路层的帧时,此数据报的总长度不能超过对应MTU的值。若数据报长度超过对于MTU的值,就将数据报进行分片处理,此时数据报首部中的“总长度“字段是指分片后的每一个分片的报头长度和数据长度之和。

5、标识

占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并赋给标识字段。当数据报进行分片处理后,每个分片的标识值都与原数据报的标识值相同,则在接收端具有相同标识值的分片就能最终正确的重装成为原来的数据报。

6、标志

占3位,但目前只有两位有意义。

最低位记为MF。MF=1即表示后面”还有分片“的数据包。MF=0表示这已是若干数据包片中的最后一个。

中间位记为DF,意思是”不能分片“。只有当DF=0时才允许分片。

7、片偏移

占13位。表示每个数据报的分片在原数据报中的相对位置。片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节的整数倍。

8、生存时间

占8位。表示数据报在网络中的寿命。最初以秒为TTL值为单位,现在以跳数为单位,则目前的最大数据为255.

9、协议

占8位,指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给那个处理过程。

TCP对应协议字段值6;UDP对应协议字段值17

10、首部校验和

占16位,该字段只校验数据报的报头,但不包括数据部分。

11、源地址

占32位

12、目的地址

占32位

12、MTU的概念,啥叫路径MTU? MTU发现机制,TraceRoute(了解)。

最大传输单元(MaximumTransmissionUnit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。

  因特网协议允许IP分片,这样就可以将数据包分成足够小的片段以通过那些最大传输单元小于该数据包原始大小的链路了。这一分片过程发生在网络层(OSI模型的第三层),第四层为传输层,传输层是OSI模型中最重要的一层,这里是根据窗口控制传输,而非MTU。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。

  除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割。例如,以太网无法接收大于1500字节的数据包。发送方节点的传输层将数据分割成较小的数据片,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组,该过程即被称为排序。它使用的是将分组发送到链路上的网络接口的最大传输单元的值。

  以太网MTU值为1500字节。

13、RIP协议的概念及算法

 路由信息协议(RoutingInformationProtocol,RIP)是一种使用最广泛的内部网关协议(IGP)。(IGP)是在内部网络上使用的路由协议(在少数情形下,也可以用于连接到因特网的网络),它可以通过不断的交换信息让路由器动态的适应网络连接的变化,这些信息包括每个路由器可以到达哪些网络,这些网络有多远等,RIP属于网络层。

14、ICMP协议的主要功能

ICMP协议的概念

所谓ICMP协议,全称是InternetControl Message Protocol,中文意思是Internet控制消息协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP协议的应用

要使用该协议,我们可以进行相应的ICMP设置,比如在WindowsXP中,首先打开“网络连接”,右键单击启用Internet连接防火墙的“网络连接”,选择“属性”打开属性窗口。接着,选择“高级”选项卡,单击右下角“设置”按钮。然后,在高级设置窗口中选择“ICMP”选项卡,在其中就可以进行相应的设置,包括允许传入的回显请求等。

我们在网络中经常会使用到ICMP协议,只不过我们觉察不到而已。比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

ICMP的作用

ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death”攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。

15、组播和广播的概念,IGMP的用途。(环回地址、广播地址)

1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。

2.多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。  IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。

3.广播:“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。  广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。  在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

=================================================================

当前的网络中有三种通讯模式:单播、广播、组播,其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景。

1.单播:

主机之间一对一的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用单播模式,具体的说就是IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。

单播的优点:

1)服务器及时响应客户机的请求

2)服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。

单播的缺点:

1)服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。

2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞。而将主干扩展20倍几乎是不可能。

2.广播:

主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。

广播的优点:

1)网络设备简单,维护简单,布网成本低廉

2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。

广播的缺点:

1)无法针对每个客户的要求和时间及时提供个性化服务。

2)网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。

3)广播禁止允许在Internet宽带网上传输。

3.组播:

主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。

组播的优点:

1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。

2)由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。

3)此协议和单播协议一样允许在Internet宽带网上传输。

组播的缺点:

1)与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。

2)现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中

16、Ping协议的实现原理,ping 命令格式

原理:ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。

命令格式:ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]

[-r count] [-s count] [[-jhost-list] | [-k host-list]]

[-w timeout] target_name

17、子网划分的概念,子网掩码

划分目的

1.节约IP地址,避免浪费。

2.限定广播的传播。

3.保证网络的安全。

4.有助于覆盖大型地理区域

划分方法

1可按子网划分,也可按组机数目划分

例:

对B类网络135.41.0.0/16需要划分为20个能容纳200台主机的网络(即:子网)。2的4次方<20<2的5次方,所以,子网位只须占用5位主机位就可划分成32个子网,可以满足划分成20个子网的要求。B类网络的默认子网掩码是255.255.0.0,转换为二进制为11111111.11111111.00000000.00000000。现在子网又占用了5位主机位,根据子网掩码的定义,划分子网后的子网掩码应该为11111111.11111111.11111000.00000000,转换为十进制应该为255.255.248.0

128<200<256,即2^7<200<2^8,也就是说,在B类网络的16位主机位中,保留8位主机位,其它的16-8=8位当成子网位,可以将B类网络135.41.0.0划分成256(2^8)个能容纳256-1-1=254台(去掉全0全1情况)主机的子网。此时的子网掩码为11111111.11111111.11111111.00000000,转换为十进制为255.255.255.0。

18、IP地址的分类,如何划分的,及会计算各类地址支持的主机数

主机数-2 全0对应当前主机  全1广播

A类IP地址 地址范围1.0.0.1-126.255.255.254

B类IP地址地址范围128.1.0.1-191.254.255.254

C类IP地址范围192.0.1.1-223.255.254.25

D类IP组播

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

19、DNS的概念,用途,DNS查询的实现算法

DNS(DomainNameSystem,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

20、TCP与UDP的概念,相互的区别及优劣

TCP--Transmission Control Protocol--传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议。面向连接指的是在进行数据传输之前必须有三次握手建立连接的过程,在数据传输结束之后,必须有拆除连接的过程。可靠指的是提供有序数据传输、超时重发、丢弃重复数据、数据检错、流量控制等功能。

UDP --UserDatagram Protocol--用户数据报协议,是一种简单的面向数据报的传输层协议。是不可靠的,不面向连接的。不面向连接是指,没有连接,终止连接的过程;不可靠是指没有超时重传,数据检错,流量控制等。

综上,TCP / UDP 的区别主要在于:

1.连接性:

TCP基于连接;UDP基于无连接。

2.传输模式:

TCP使用流模式,能保证数据顺序;UDP使用数据报模式,不能保证数据顺序。

3.数据可靠性:

TCP能保证数据的正确;UDP不能保证,会有丢包,重复数据包等情况。

4.资源占用:

TCP多;UPD少。

21、UDP报文的格式,字段的意义

用户数据报协议UDP只在IP的数据报服务之上增加了端口功能和差错检测功能,UDP只能提供不可靠的交付,其报文格式如下所示:

UDP报文中有两个部分:数据部分和首部,首部部分很简单,只有8个字节,由四个字段组成,每个字段都是两个字节。各个字段意义分别是:

  • 源端口号,这是在源主机上运行的进程所使用的端口号,如果源主机是客户端(发起请求的一方),则在大多数情况下这个端口号是临时端口号,如果源主机是服务器端(发送响应时),则在大多数情况下这个端口号时熟知端口号。
  • 目的端口号,这是在目的主机上运行的进程所使用的端口号,如果目的主机是客户端(发起请求的一方),则在大多数情况下这个端口号是临时端口号,服务器需要将这个临时端口号复制下来,如果目的主机是服务器端(发送响应时),则在大多数情况下这个端口号时熟知端口号。
  • 长度,定义了用户数据报的总长度,首部加上数据,数据部分的长度范围时0~65507。
  • 检验和,这个字段用来检验这个用户数据报(首部加上数据)出现的差错。

22、TCP 报文的格式,字段的意义

源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。

  序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

  确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

  数据偏移——占4bit,它指出TCP报文段的数据起始处距离CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。

  保留字段——占6bit,保留为今后使用,但目前应置为0。

  紧急比特URG——当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

  确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

  复位比特RST(Reset) —— 当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

  同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。

  终止比特FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

  窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。

  检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

  紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

  选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。

  填充字段——这是为了使整个首部长度是4字节的整数倍。

23、TCP通过哪些措施,保证传输可靠

TCP通过下列方式来提供可靠性:

1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。 (将数据截断为合理的长度)

2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 (超时重发)

3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。 (对于收到的请求,给出确认响应)

(之所以推迟,可能是要对包做完整校验)

4、 TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。 (校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据)

5、既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

(对失序数据进行重新排序,然后才交给应用层)

6、既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。

(对于重复数据,能够丢弃重复数据)

7、TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。

(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)

TCP使用的流量控制协议是可变大小的滑动窗口协议。

字节流服务::

  两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。

TCP对字节流的内容不作任何解释::

TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。

24、三次握手,四次断开过程

三次握手:

  第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

  握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。

  与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。

  第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。

  第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

  第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

  第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

25、TIME_WAIT状态的概念及意义

注:主动、被动 与 服务器、客户端没有明确的对应关系。

这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四次握手过程。

1、建立连接协议(三次握手)

(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。

(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。

(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。

2、连接终止协议(四次握手)

   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

 (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。

 (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

 (3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。

 (4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

CLOSED: 这个没什么好说的了,表示初始状态。

LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。

SYN_RCVD:这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。

SYN_SENT:这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

ESTABLISHED:这个容易理解了,表示连接已经建立了。

FIN_WAIT_1:这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。

FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。

TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

CLOSE_WAIT:这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以 close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。

LAST_ACK:这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

最后有2个问题的回答,我自己分析后的结论(不一定保证100%正确)

1、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这 是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一 个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2、 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为: 虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到 ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于 LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的 ACK报文。

26、滑动窗口协议 与停止等待协议的区别

滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输

当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。

停止等待协议(stop and wait) 最基础的数据链路层协议,在通信时,当收方收到一个正确的数据帧后,便会向发送方发送一个确认帧ACK,表示发送的数据正确接收。当发送方收到确认帧后才能发送一个新的数据帧,这样就实现了接收方对发送方的流量控制.

27、TCP的流量控制和拥塞控制实现原理(会画拥塞控制的典型图)

1.为什么出现滑动窗口?

TCP协议在工作时,如果发送端的TCP协议软件每传输一个数据分组后,必须等待接收端的确认才能够发送下一个分组,由于网络传输的时延,将有大量时间被用于等待确认,导致传输效率低下。为此TCP在进行数据传输时使用了滑动窗口机制。依靠滑动窗口机制解决传输效率和流量控制问题

2.什么是滑动窗口?

TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动。

通俗的理解,窗的下面是连续的一些列分组,发送窗口的尺寸就是准备好了可以发送的分组的数量。窗口左端标志最新收到ACK的分组,窗口左端标志收到ACK的分组,窗口右端标志在这左边的都可以发送出去。

传完或者接受一个分组后,就向右一下。

3.socket缓冲区和滑动窗口的关系是什么?

一、TCP的滑动窗口大小实际上就是socket的接收缓冲区大小的字节数

二、对于server端的socket一定要在listen之间设置缓冲区大小,因为,accept时新产生的socket会继承监听socket的缓冲区大小。对于client端的socket一定要在connet之前设置缓冲区大小,因为connet时需要进行三次握手过程,会通知对方自己的窗口大小。在connet之后再设置缓冲区,已经没有什么意义。

三、由于缓冲区大小在TCP头部只有16位来表示,所以它的最大值是65536,但是对于一些情况来说需要使用更大的滑动窗口,这时候就要使用扩展的滑动窗口,如光纤高速通信网络,或者是卫星长连接网络,需要窗口尽可能的大。这时会使用扩展的32位的滑动窗口大小。

四、滑动窗口听移动规则:

1、窗口合拢:在收到对端数据后,自己确认了数据的正确性,这些数据会被存储到缓冲区,等待应用程序获取。但这时候因为已经确认了数据的正确性,需要向对方发送确认响应ACK,又因为这些数据还没有被应用进程取走,这时候便需要进行窗口合拢,缓冲区的窗口左边缘向右滑动。注意响应的ACK序号是对方发送数据包的序号,一个对方发送的序号,可能因为窗口张开会被响应(ACK)多次。

2、窗口张开:窗口收缩后,应用进程一旦从缓冲区中取出数据,TCP的滑动窗口需要进行扩张,这时候窗口的右边缘向右扩张,实际上窗口这是一个环形缓冲区,窗口的右边缘扩张会使用原来被应用进程取走内容的缓冲区。在窗口进行扩张后,需要使用ACK通知对端,这时候ACK的序号依然是上次确认收到包的序号。

3、窗口收缩,窗口的右边缘向左滑动,称为窗口收缩,Host Requirement RFC强烈建议不要这样做,但TCP必须能够在某一端产生这种情况时进行处理。

流量控制:

流量控制方面主要有两个要点需要掌握。一是TCP利用滑动窗口实现流量控制的机制;二是如何考虑流量控制中的传输效率。

所谓流量控制,主要是接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。主要的方式就是返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

拥塞控制:

当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

慢启动和拥塞避免是属于TCP发送方必须(MUST)要实现的,防止TCP发送方向网络传入大量的突发数据造成网络阻塞。

拥塞窗口(congestionwindow,cwnd),是指发送方在接收到对方的ACK确认前向允许网络发送的数据量,数据发送后,拥塞窗口缩小;接收到对方的ACK后,拥塞窗口相应增加,拥塞窗口越大,可发送的数据量越大。拥塞窗口初始值的RFC2581中被规定为不超过发送方MSS的两倍,而且不能超过两个TCP包,在RFC3390中更新了初始窗口大小的设置方法。

通告窗口(advertisedwindow,rwnd),是指接收方所能接收的没来得及发ACK确认的数据量,接收方数据接收后,通告窗口缩小;发送ACK后,通告窗口相应扩大。

慢启动阈值(slow startthreshold, ssthresh),用来判断是否要使用慢启动或拥塞避免算法来控制流量的一个参数,也是随通信过程不断变化的。

当cwnd < ssthresh时,拥塞窗口值已经比较小了,表示未经确认的数据量增大,需要启动慢启动算法;当cwnd > ssthresh时,可发送数据量大,需要启动拥塞避免算法。

拥塞窗口cwnd是根据发送的数据量自动减小的,但扩大就需要根据对方的接收情况进行扩大,慢启动和拥塞避免算法都是描述如何扩大该值的。

在启动慢启动算法时,TCP发送方接收到对方的ACK后拥塞窗口最多每次增加一个发送方MSS字节的数值,当拥塞窗口超过sshresh后或观察到拥塞才停止算法。

启动拥塞避免算法时,拥塞窗口在一个连接往返时间RTT内增加一个最大TCP包长度的量,一般实现时用以下公式计算:

cwnd += max(SMSS*SMSS/cwnd, 1)            (2.1)

SMSS为发送方MSS。

TCP发送方检测到数据包丢失时,需要调整ssthresh,一般按下面公式计算:

ssthresh = max (FlightSize / 2,2*SMSS)    (2.2)

其中FlightSize表示已经发送但还没有被确认的数据量。

慢启动

当启动一个新的连接或者在拥塞后重新发送报文段时,以一个报文段作为拥塞窗口的初始值,以后每次收到一个确认之后,将拥塞窗口增加一倍;

拥塞避免

在慢启动技术的基础上,增加一个拥塞窗口的增加条件。当拥塞窗口的大小达到上次拥塞是窗口大小的一半时,以后窗口中所有的报文段都确认后,窗口大小增加1,而不是1倍;

加速递减

一旦发现丢失报文段,立即将拥塞窗口的大小减半,直到窗口大小为1。对于保留在发送窗口中的报文段,其超时定时器的时限增加1倍。

28、TCP的快速重传与快速恢复算法

快速重传(fast retransmit)和快速恢复(fastrecovery)

TCP接收方收到错序的TCP包时要发送复制的ACK包回应,提示发送方可能出现网络丢包;发送方收到连续3个重复的ACK包后启动快速重传算法,根据确认号快速重传那个可能丢失的包而不必等重传定时器超时后再重传,普通的重传是要等到重传定时器超时还没收到ACK才进行的。这个算法是TCP发送方应该(SHOULD)实现的,不是必须。TCP发送方进行了快速重传后进入快速恢复阶段,直到没再接收重复的ACK包。

快速重传和快速恢复具体过程为:

1. 当收到第3个重复的ACK包时,ssthreh值按公式2.2重新设置;

2. 重传丢失的包后,将拥塞窗口cwnd设置为sshresh+3*SMSS,人工扩大了拥塞窗口;

3. 对于每个接收到的重复的ACK包,cwnd相应增加SMSS,扩大拥塞窗口;

4. 如果新的拥塞窗口cwnd值和接收方的通告窗口值允许的话,可以继续发新包;

5. 当收到下一个ACK确认了新数据时,将cwnd大小调整为sshresh,减少窗口;对接收方

来说,接收到重发的TCP包后就要发此ACK确认当前接收的数据。

29、TFTP 与 FTP的区别

TFTP使用UDP/IP协议,它是一种不可靠的传输方法。FTP使用TCP/IP协议,它是可靠的传输方法

30、阻塞方式和非阻塞方式,阻塞connect与非阻塞connect。(比较难,有兴趣可以了解)

 IO操作中涉及的2个主要对象为程序进程、系统内核。以读操作为例,当一个IO读操作发生时,通常经历两个步骤:

  1,等待数据准备

  2,将数据从系统内核拷贝到操作进程中

  例如,在socket上的读操作,步骤1会等到网络数据包到达,到达后会拷贝到系统内核的缓冲区;步骤2会将数据包从内核缓冲区拷贝到程序进程的缓冲区中。

阻塞(blocking)与非阻塞(non-blocking)IO

  IO的阻塞、非阻塞主要表现在一个IO操作过程中,如果有些操作很慢,比如读操作时需要准备数据,那么当前IO进程是否等待操作完成,还是得知暂时不能操作后先去做别的事情?一直等待下去,什么事也不做直到完成,这就是阻塞。抽空做些别的事情,这是非阻塞。

  非阻塞IO会在发出IO请求后立即得到回应,即使数据包没有准备好,也会返回一个错误标识,使得操作进程不会阻塞在那里。操作进程会通过多次请求的方式直到数据准备好,返回成功的标识

31、HTTP基本格式。(java程序员必须掌握)

1.http请求

请求消息由3个部分组成,请求行、请求头域、请求体

(1)请求行

请求行以一个方法开头,空格分开,后面跟着URI和协议的版本,再接上CRLF(回车换行,只允许这个组合在末尾出现)

GET /form.html HTTP/1.1(CRLF)

请求的方法:

GET 请求获取Request-URI所标识的资源

POST 在Request-URI所标识的资源后附加新的数据

HEAD 请求获取由Request-URI所标识的资源的响应消息报头

PUT 请求服务器存储一个资源,并用Request-URI作为其标识

DELETE 请求服务器删除Request-URI所标识的资源

TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT保留将来使用

OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求

(2)请求头

后面统一讲

2.http响应

响应消息也由3个部分组成,状态行、响应头域、响应体

(1)状态行

协议版本 状态码 状态码的描述 回车换行

HTTP/1.1200 OK(CRLF)

状态码由三位数字组成,第一位表示响应的类型,且有5中类型

1:提示信息--请求已收到,继续处理

2:成功信息--表示消息已被成功接收、理解、接受

3:重定向--要完成请求,需进一步的操作

4:客服端错误--请求有语法错误或者无法实现

5:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK //客户端请求成功

400BadRequest //客户端请求有语法错误,不能被服务器所理解

401Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403Forbidden //服务器收到请求,但是拒绝提供服务

404 NotFound //请求资源不存在,eg:输入了错误的URL

500Internal Server Error//服务器发生不可预期的错误

503Server Unavailable //服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

三、设计模式

1、各种常用模式的用途,使用方法(类图)

工厂模式(FactoryPattern)、单例模式(Singleton Pattern)、适配器模式(Adapter Pattern)、享元模式(FlyweightPattern)、以及观察者模式(Observer Pattern)

工厂模式(Factory Pattern)专门负责实例化大量公共接口的类,工厂模式可以动态的决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类

单例模式(Singleton Pattern)  保证整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。

适配器模式(Adapter Pattern)  把一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作。

享元模式(Flyweight Pattern)以共享的方式高效地支持大量的细粒度对象。享元模式能够做到共享的关键是区分内蕴状态和外蕴状态,其中内蕴状态存储在享元内部,不会随环境的改变而有所不同,而外蕴状态时随环境的改变而改变的,外蕴状态不能影响内蕴状态,它们是相互独立的。

观察者模式(Observer Pattern) 提供了避免组件之间紧密耦合的另一种方法,它将观察者模式和被观察者模式的对象分开。

2、单例模式的双重检查实现。

未找到合适的答案

3. MVC模式

MVC模式概述

模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI设计思路中扮演着非常重要的角色。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式在一种解决方案中结合起来,用来解决许多设计问题。MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Control(控制器)。它们各自处理自己的任务:

(1)模型:模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。

(2)视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图。

(3)控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。

MVC模式将它们分离以提高系统的灵活性和复用性,不使用MVC模式,用户界面设计往往将这些对象混在一起。MVC模式实现了模型和视图的分离,这带来了几个好处。

(1)一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。

(2)模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。

(3)提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑和数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。

视图中用户的输入被控制器解析后,控制器改变状态激活模型,模型根据业务逻辑维护数据,并通知视图数据发生变化,视图得到通知后从模型中获取数据刷新自己。

基础篇完结!!!
PS :若发现答案错误之处,请在下面留言。

基础篇:操作系统、计算机网络、设计模式(二)(附参考答案)相关推荐

  1. c malloc 头文件_C/C++笔试题:主要考察C/C++语言基础概念算法及编程,附参考答案...

    1.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数: 答:char *strcpy(char *strDest, const char *strSrc) { if ...

  2. 2020最新软件测试面试题汇总【内附参考答案】,拼多多面试官看了都说,卧槽!!!

    2020最新软件测试面试题汇总[内附参考答案] 测试技术面试题 1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通 ...

  3. 8万字205道Android经典面试题总结(附参考答案),经典好文

    本人目前在一家知名外企担任架构师,在深耕Android领域的八年来,我曾在多家外企和互联网公司担任Android技术面试官,前后累计面试了有三百位左右候选人,对于行业和企业的招聘要求相对清楚,也非常熟 ...

  4. [转载] JAVA语言程序设计(基础篇)第十版课后题答案(第一章)

    参考链接: Java中的Scanner和nextChar() JAVA语言程序设计(基础篇)第十版课后题答案 第一章 第二题 /** Created by ysy on 2018/7/6. */ pu ...

  5. Java面试题目大汇总(附参考答案)

    足足准备了长达3个月的面试,终于在上周拿到了阿里的offer! 博主汇总整理了一份我面试之前看的一些Java面试题目,可以说是非常详细! 分享给大家,希望对正在面试Java岗位的朋友有帮助哈~~ (文 ...

  6. 两台具有独立操作系统的计算机,第1章计算机网络习题与思考题参考答案

    <第1章计算机网络习题与思考题参考答案>由会员分享,可在线阅读,更多相关<第1章计算机网络习题与思考题参考答案(4页珍藏版)>请在人人文库网上搜索. 1.第 1 章 计算机网络 ...

  7. mysql数据库应用题库_MySQL数据库及应用题库附参考答案.docx

    MySQL数据库及应用题库附参考答案.docx MySQLMySQL 数据库及应用题库附数据库及应用题库附参考参考答案答案 仅供参考 第一章测验 1 单选 计算机进行数据处理经历了从低级到高级的 __ ...

  8. ibm java英语面试_IBMJava英文面试题(附参考答案)

    IBMJava英文面试题(附参考答案) IBMJava英文面试题(附参考答案). 1.what is oracle.what is major differenece oracle8i and ora ...

  9. 第二章计算机网络答案,计算机网络第二章作业参考答案

    计算机网络第二章作业参考答案 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 2. A noiseless 8-kHz channel ...

  10. [转载]单片机习题和试题库之六  读程序(附参考答案)

    原文地址:单片机习题和试题库之六  读程序(附参考答案)作者:小董 1.写出下列指令执行的结果 (1). MOV A,#20H MOV R0,#20H MOV @R0,A ANL   A,   #0F ...

最新文章

  1. vmlinux、 Image, zImage、 uImage 的区别
  2. Linux下Oracle 12c的卸载
  3. codeforces:812(div2):总结
  4. 【普通の随笔】6.30
  5. gitlab 安装gitlabrunner 无法连接tiller_谈一谈GitLab Runner是个什么东东?
  6. x86汇编语言——基本概念
  7. ubuntu14.04中安装open jdk1.8以及报错解决分析
  8. .net 访问共享文件夹
  9. 夏时制英国和中国的时差是多少?伦敦与北京时差是多少?
  10. java list逆序_Java使用ListIterator逆序ArrayList
  11. JDK对Http协议的Keep-Alive的支持,以JDK8为例
  12. Java——使用多线程模拟真实高并发业务并保证安全性(一)
  13. Android听筒模式和免提模式的切换
  14. 做一名开源社区的扫地僧——从Bug report到Google Summer of Code(GSoC):从200个bug到5000美金
  15. 深度学习优化函数详解-- Nesterov accelerated gradient (NAG)
  16. 简要介绍语音识别技术在各领域的应用
  17. JUST-HLL战队 电控视觉培训 第一周
  18. 手机电脑卖不动,AR\VR和自动驾驶也不给力;苹果的未来在哪里?
  19. 火山PC_QQ登录源码(QQ互联)
  20. electron调用python_electron教程(一): electron的安装和项目的创建

热门文章

  1. 如何在iPhone和iPad上的Safari中阻止网站
  2. 数学一年级应用题_小学一年级数学下册应用题练习题归纳
  3. 计算机cad查询,CAD的查询功能
  4. python爬虫批量抓取新浪微博用户ID及用户信息、微博内容
  5. 2009年数学建模B题
  6. About g2o安装与使用
  7. 各个学习英文网站的汇总
  8. html map背景图,用地图做背景墙竟然这么美!这个秘密你造吗?
  9. zeek(bro) 脚本学习 一
  10. /id_xndu5otm2mdq0.html,WEUI应用之JS常用信息提示弹层的封装