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