网络程序设计期末复习题
第一章网络基础
(1)计算机网络程序设计是利用网络应用编程接口编写网络应用程序,实现网络应用进程间的信息交互功能。
(2)网络编程基于网络协议,网络编程接口访问网络协议提供的服务。
(3)简述OSI七层协议的主要功能:
名称 | 层次 | 功 能 |
物理层 | 1 | 实现计算机系统与网络间的物理连接 |
数据链路层 | 2 | 进行数据打包与解包,形成信息帧 |
网络层 | 3 | 提供数据通过的路由 |
传输层 | 4 | 提供传输顺序与相应信息 |
会话层 | 5 | 建立和中止连接 |
表示层 | 6 | 数据转换,确认数据格式 |
应用层 | 7 | 提供用户程序接口 |
(4)网络互联的目的是提供一个无缝的通信系统。为此,必须用互联网协议屏蔽物理网络的具体细节,并提供一个虚拟网络的功能。
(5)每个IP地址被分割成前缀和后缀两部分。前缀用于确定计算机从属的物理网络,后缀则用于确定网络上一台单独的计算机。
(6)IP中主机地址为0的地址表示网络地址。
(7)网络号后跟一个所有位全是1的后缀,就是直接广播地址。
(8)地址解析(Address Resolution)就是将计算机中的协议地址翻译成物理地址(或称MAC地址,即媒体映射地址)。
(9)一个系统的全域名由主机名、域名和扩展名三部分组成,各部分间使用“.”分隔,例如www.sina。
(10)在TCP/IP应用中,域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。
(11)以太网数据帧的长度必须在46~1518字节之间。
(12)TCP和UDP都用一个16位的端口号来表示不同的应用程序。
(13)TCP和UDP把源端口号和目的端口号分别存入报文首部中。
(14)网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入16 bit的帧类型域以指明生成数据的网络层协议。
(15)当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing)。
(16)TCP和UDP采用端口号来识别应用程序。
(17)任何TCP/IP实现所提供的服务都使用通用端口号1~1023。
(18)IEEE 802.3定义了一种具有七个字段的帧(MAC):前导符、起始帧分界符、目标地址、源地址、PDU的长度/类型、数据以及CRC。
(19) IPv4中包含至少12个不同字段,且在没有选项时长度为20个字节,但在包含选项时可达60个字节。
(20)解释IP数据报格式中的标志(FLG)的含义:包括3个1位标志,标识报文是否允许被分段和是否使用了这些域。第一位保留并设为0;第二位标识报文能否被分段,其中0表示报文可以被分段,1表示报文不能被分段;第三位只有在第二位为0时才有意义,这一位标识此报文是否是这一系列分段的最后一个,或者接收应用程序是否还希望有更多的段,0指示报文是最后一个。
(21)分段偏移量(Fragment Offset):指定分段在整个数据报中的位置。接收主机同时使用标志位和分段偏移,以重组被分段的数据报。这个值以64位为单位递增。
(22)生命周期(TTL,Time To Live):代表数据报在被丢弃前能够穿越的最大主机跳数。
(23)TTL的初始值由源主机设置,其理论最大值为255,每经过一个处理节点减1。
(24)IP数据报格式中设置头校验和(Header Checksum)的目的是保证报头的正确性,目的机、网络中的每个网关都要重新计算报头的校验和,如果计算出的校验和与报文所含的校验
和不同,则丢弃该报文。
(25)IP数据报格式中设置填充区(Padding)的目的是为了保证IP头长度是32位的整数倍,要填充额外的0。
(26)ICMP作为IP协议的附属协议,用来与其他主机或路由器交换错误报文和其他重要信息。
(27)IP层协议的另一个附属协议是IGMP(Internet组管理协议),它用来把一个UDP数据报多播或组播到多个主机。
(28)TCP使用IP作为网络层协议。TCP的全称是Transmission Control Protocol,即传输控制协议。
(29)IP首部中的源端口字段和源IP地址的作用是标识发送报文的计算机及应用程序。
(30)IP首部中的目标端口字段和目标IP地址的作用是标识接收报文的计算机及应用程序。
(31)如果将字节流看作在两个应用程序间的单向流动,则TCP用序号字段对每个字节进行
计数。
(32)在动态路由网络中,报文很可能使用不同的路由,因此,报文可能乱序。利用序号字段可以纠正传输导致的乱序,从而重组分段的报文。
(33)确认序号应当是上次已成功收到的数据字节序号加1。只有ACK标志置1时此字段才有效。
(34)发送ACK无需任何代价,因此,一旦连接建立,该字段总是被设置,ACK标志也总是置 1 。
(35)窗口(Window)是16位字段,它表明接收端声明可以接收的TCP数据段的大小,最大为65 535字节。
(36)校验和对整个TCP报文段进行,包括TCP首部和TCP数据。如果收到的内容没有被改变过,双方的计算结果应完全一样,保证了数据的有效性。
进程通信方式(37)校验和(Checksum)是16位的字段,它是一个强制性的字段,由发送端计算存储,由接收端进行验证。
(38)可靠传输服务软件所应具有的特征如下:(1) 面向数据流:数据流(stream)就是两个应用程序间传输的数据。(2) 电路连接:包括连接的建立、通信的开始及连接的结束都要求所建立的连接是可靠的,连接的结束要完美(在连接终止前传送的所有数据均为可靠的)。(3) 带缓冲的传送。(4) 无结构的数据流,即不考虑数据内容。(5) 全双工连接:包含两个独立且方向相反的连接。
(39)TCP提供一个可靠连接的方式是通过三次握手(Three-way Handshake)来完成的。
(40)建立一个TCP连接需要三次握手,而正常终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)特性造成的。
(41)UDP协议只负责接收和传送由上层协议传递的消息,它本身不做任何检测、修改与应答,上层协议需要自己处理这些事务。
(42)UDP的报头格式较简单,主要是地址信息、包的长度和校验信息。与此对应,TCP包的头信息有10多个域。
(43)理论上,IP数据报的最大长度为65 535字节,这是由IP首部16位字段所限制的。去除
20字节的IP首部和8个字节的UDP首部,UDP数据报中用户数据的最大长度为65 507字节。但大多数实现所提供的长度比这个最大值小,这主要是因为存在两个限制因素:一个是因为应用程序可能会受到其程序接口的限制,Socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。现在的大部分系统都默认提供了可读/写大于8192字节的UDP数据报。另一个限制来自于TCP/IP的内核,不同的系统可能存在一些实现特性的差异,使IP数据报长度小于65 535字节。
(44)ARP(Address Resolution Protocol,地址解析协议)和RARP(Reverse Address Resolution Protocol,逆向地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。
(45)源抑制是一个流控制信息,由接收方向源主机发送该信息来请求源主机停止发送数据。当接收主机在其缓冲区快满时发送该信息。
(46)路径重定向是由网关向请求其提供服务的主机发送,用于通知该主机在网络中还有其他距离目的主机更近的网关。
(47)为了防止由于ICMP差错报文响应所引发的广播风暴,协议规定当接收端收到下列报文时不会产生ICMP差错报文:
(1) ICMP差错报文(但ICMP查询报文可能会产生ICMP差错报文)。
(2) 目的地址是广播地址或多播地址的IP数据报。
(3) 作为链路层广播的数据报。
(4) 不是IP数据报第一个分片的数据报。
(5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。
(48)网络通信常常是在多个平台之间进行的,因此网络应用程序必须考虑不同平台之间的异构性,这些差异主要表现在哪些方面?(1)字节顺序。不同的平台以不同的方式存放一个二进制数。最常见的有两种格式:大数在前(big-endian)的字节顺序和小数在前(little-endian)的字节顺序。大数在前的字节顺序是指将一个多字节数的高序字节存储在内存的起始
地址;而小数在前的字节顺序则相反,将低序字节存储在内存的起始地址。因此,作为网络编程人员,必须清楚各种字节顺序间的区别,并采用相应的措施来解决因这种差别所带来的问题。(2)字的长度。不同的实现对于相同的数据类型可能有不同的表示长度。例如32位和64位操作系统中,类型long int的长度是不一样的。(3)字节定界问题。不同的平台上为结构体(struct)或共同体(union)打包的方式也是不同的,这取决于所有数据类型的位数及机器的定界限制。(4)另一种解决该问题的方法是将需要发送的信息的结构在发送前变换成一种统一的格式(转换成一个字符数组),到达接收方后再执行相反的过程。对于数据结构中有比特变量的情况,处理起来更加复杂,因此,在实际网络编程中尽量不要使用比特变量。在很多网络协议的设计中,常常需要填充一些无用的字节以满足四字节定界,从而简化协议的实现。
(49)网络编程应考虑的问题有哪些?(1)并发环境下的网络编程。单进程应用与多进程或多线程应用程序的编程有着很大的区别。在多进程或多线程应用程序中,涉及到资源共享、进程或线程间的同步,因而要复杂得多。在多进程或多线程应用中,使用的系统调用或函数必须是可重入的。不同系统中可重入的系统调用或系统函数是不同的,一般都会有详细的说明。对于那些不可重入的调用或函数,系统如果不提供多线程安全的版本,则应用编程
人员需要避免使用或自己编写相应的函数;(2)异构环境下的网络编程。字节顺序、字的长度、字节定界问题等。(3)阻塞与非阻塞通信。(4)服务类型的选择;(5)差错处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论