07计算机1班用TCP/IP进行网际互连第二卷设计实现与内核乔胜强Pfqk考试题型:20分单选共10题,10分多选共5题,20分填空(概念及代码)20分综合共2题30分简答题(写代码,问答)共6题重点章节:2.5进程间的通信1、进程之间的同步通信(生产者与消费者之间的通信)?解:进程之间相互通信的机制使用以下三种机制:计数信号量(semaphore)、端口和消息传递。为了防止进程之间相互干扰,所有允许多个进程并发执行的协议软件必须使用信号量来实现互斥操作。所有应受保护的代码段提供—个信号量其初始值均为1即:S=screate(1);在访问一个长度为N的队列时,需要两个信号量来调度生产者和消费者、这两个信号量初始化如下:S1=screate(N);S2=screate(0);生产者执行:消费者执行:Wait(s1);Wait(s2);…insertiteminnextavailabeslot……extractoldestitemfromqueue…Signal(s2);Signal(s1);信号量保证了当队列全满时生产者进程被阻塞,而当队列全空时,消费者进程被阻塞。除此之外生产者和消费者可以正常运行。2、数据报在协议软件之间的传送流程?(向上或向下)协议软件内部和上层操作系统应用程序的数据传输是如何完成的?解:lP协议与传输协议之间的数据报传递:由一个独立的进程来处理传入的TCP报文段。由于IP和TCP作为各自独立的进程执行,因而IP和TCP必须利用进程间的通信机制来通信。IP调用Psend将报文段存放在端口内,而TCP调用preceive来读取端口中的报文段。UDP模块不作为独立进程存在。它是由一些常规过程组成,IP进程通过调用来处理传入的UDP数据报。向高层协议传递分组:系统应用了队列以及消息传送原语,以实现进程之间通信的同步。当一个携带IP数据报的分组到达后,中断过程必须将该分组置入队列中,并调用send函数通知IP进程已有一个数据报到达。如果此时IP进程手头没有分组可处理,则调用receive函数等待下一个数据报的到达。每一个网络设备都有一个相对应的输入队列,而唯一的IP进程从所有的队列中提取数据报进行处理。向应用程序的传递操作:由于每个应用程序都作为一个独立的进程执行,它必须利用由系统提供的通信原语,才能与实现协议的进程协调。输出过程中应用程序和网络硬件之间的信息流动过程:一个应用程序,作为一个独立进程执行,调用系统例程向TCP传递数据流,或者向UDP传递数据报a、对于UDP输出处理,运行某个应用程序的进程进入操作系统,执行一段UDP过程,申请一个IP数据报,填写相应的目的地址,将UDP数据封装在IP数据报中,然后将IP数据报传递给IP进程,由IP进程发送出去。DataLink帧头传输层头UDP/TCPIP头应用数据版本号头长度服务类型分组总长度标识标志分段偏移生存时间协议分组头校验和源地址目的地址选项最大64KBytes07计算机1班用TCP/IP进行网际互连第二卷设计实现与内核乔胜强b、对于TCP输出,3、伪网络接口与(本地接口)问题如:伪网络接口是0号还是1号?设置伪网络接口的目的:为了消除IP进程之间的特殊性。(为什么说伪网络接口在数据传输中有重要作用)解:4、如何通过网络接口地址求网络号?(P27~28页代码)5、ARP高速缓存:为什么使用单一ARP高速缓存?单缓存的优缺点即对ARP所有的项目共用一个缓存的优缺点?6、ARP高速缓存的结构?(静态数组每一个项对应一个队列)p42(如何改进)已知IP请求mac时当一个请求响应未完成又有新的请求到达如何解决?(即理解37~38页代码)7、ARP高速缓存管理问题(P42、43页代码):如何进行旧表项删除?(对高速缓存表项的分配,使用循环法来进行旧表项的删除,用怎样用全局变量实现循环法?)添加新表项的流程?8、ARP定时机制:为什么使用定时机制?已有协议定时机制的优缺点?如何改进?9、作为解决电子欺骗问题的另一种解决方案即:在范例软件中增加一个判断语句,以保证ARP分组中SHA字段的物理地址与物理帧中的物理地址一致。这两种方案的优缺点各是什么?10、IP设计思想?为什么要统一输入队列?11、输出过程:在进行输出时,在求IP地址对应的网络地址,返回的报文段没有到达时该怎样处理?(放到对应的队列再等到返回时一起发送出去)12、校验和的计算问题:IP校验和的计算?及和UDP,TCP数据报校验和计算的区别?(IP的校验是对头部校验,对TCP和UDP的校验是对所有项目的校验以及伪首部的校验)代码13、关于表格的定时机制(P64)(不断循环,睡眠一段时间后再进行计算,)怎样改进这种机制?14、选路过程?15、IP数据报的处理流程(由某一网络接口进入到另一网络接口输出的过程)(流程图)16、选路表的结构、选路算法、选路表的数据结构以及桶散列结构?散列值是如何计算的以及Key值的计算,为什么要这样做?P7217、IP选项处理(P82、83代码)?发送本地生成数据报问题?(P61、62页代码)18、增加一个路由是地址是如何计算的?新路由加入流程即产生新路由后如何放入路由表中的?19、路由删除问题以及RTFREE和rtfree的区别?20、网络中的最长前缀匹配是什么?答:它是选择路由表入口的算法:在路由表中选择一个入口时,一个目的地址可能匹配多于一个的路由选择表入口,这时应当选择具有最长网络前缀的入口。21、分片的算法是如何实现的即如何分片?如何计算每片的大小、首尾是如何计算处理的?答:分片:如果分组的长度小于网络的MTU,就调用netwrite来发送数据报并返回调用者。如果仅用一个分组无法发送该数据包,那么将数据报顺序划分为能够装入分组中的数据报片。首先计算分片的最大可能长度,然后将数据报顺序划分为一连串最大长度的数据报分片,最后剩余的数据(不管还剩余多长)被装入末尾数据报分片。每片大小的计算=(pni—ni_mtu—IP_HLEN(pip))&~7,即可发送的最大可能长度等于MTU减去IP首部,然后截短成最近的8的倍数。尾部处理:在发送末尾数据报片前,如果末尾数据报片的长度与其他数据报片的长度相同,07计算机1班用TCP/IP进行网际互连第二卷设计实现与内核乔胜强则不会发送最后这个数据包报片;而在发送末尾数据报片是,仅对原数据报做适当更改,而不再把生成的数据报片复制到一个缓冲区中。22、重组中如何测试一个完整的数据报?在offMAXLRGBUF中为什么不是或=?如何处理不一致?P95答:测试:在证实了指定的某个数据报片链表正处于使用状态后,通过一个循环来遍历链表中的每个数据报片。首先偏移量为0开始,即off=0,然后利用变量off来查看它当前指向的数据报片所处的位置是否正确,即查看当前数据片的偏移量是否与off值相符,如果off小于当前数据报片偏移量,那么必定还有尚未到达的数据报片,则还不能被重组;如果偏移量与off相等,那么将off值加上当前数据报片的长度,计算出下一个数据报片的偏移量。当证实所有的数据报片已被全部收集齐,则通过判断来保证数据报可以被装入一个大缓冲区中。原因:因为当offMAXLRGBUF时,则表明该数据报大于大缓冲区的容量,而当或=时,他能被装入到缓冲区中,并且在被发送给应用程序时能够在连续的存储空间中进行重组。处理:丢弃23、成对通信使用的端口和多对一通信使用的端口的区别有哪些?应用范围有何不同?各自的优缺点是什么?答:24、什么是TCP?TCP的序号问题?数据报的序号的确定为什么只用相减就可以?答:TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议序号问题:由于TCP报文段首部的序号字段具有固定长度(32比特),因而允许序号在达到序列空间的尽头时,绕回到0,重新开始,则此时需要比较两个序号以决定一个报文段中的序号是大于还是小于另一个报文段的序号。原因:计算机无法做到极快的生成输出数据,而导致在数据报超时之前绕经了整个序列空间,利用相减时,他可以假设两个序列值之间的差距永远不会大于序列空间值的一半。25、在序列空间的比较中,在进行简单的相减判断之前还是之后?为什么这样做?这样做的理论基础是什么?26、TCP的状态变迁图P4727、TCP的阻塞问题如何解决?28、在Socket编程中面向连接过程是如何建立的?面向连接与非面向连接是怎样的?答:在Socket编程中面向连接过程首先要启动服务器,通过调用socket()建立一个套接字,然后调用bind(),将该套接字和本地网络地址联系在一起;再调用listen(),使套接字做好侦听的准备,并规定其请求队列的长度;最后调用accept()来接收连接。客户在建立套接字后就可以调用connect(),与服务器建立连接。连接一旦建立,客户机和服务器之间就通过调用read()和write()接收和发送数据。数据传送结束,双方调用close()关闭套接字。在Socket编程中无连接服务:也必须先启动服务器,否则客户机的请求不能传送给服务器。采用无连接服务的客户机通常不调用connect(),因此在数据发送前,客户机与服务器之间尚未建立全相关,但各自通过socket()和bind()建立了半相关。在发送数据时,发送方除指定本地套接字外,还需要指定接收方的套接字,从而在数据收发过程中动态建立全相关。29、Socket建立流程以及通用模型?答:面向连接的套接字建立流程accept()阻塞,等待客户数据处理服务请求close()write()read()请求数据建立连接应答数据write()socket()connect()客户机close()read()Socket()bind()listen()服务器07计算机1班用TCP/IP进行网际互连第二卷设计实现与内核乔胜强30、在Socket中Select的作用?利用select()函数,通过检查套接口是否可写来判断连接请求是否完成;30、如何用Socket进行TCP和UDP的服务器的编程?31、化为交换机的配置命令(4--6分)?32、环回地址必须是127.0.0.1吗?33、当IP将接收到的TTL字段减1,发现它为0时,将会发生什么结果?34、重定向时,如何判断主机在与网关直联的网络中?35、下图是用科来网络分析系统截取的一个数据包,试着分析并回答问题?a.协议类型有两个值:0x0806和0x0800,这到底是一个什么协议的数据包,为什么有两个值?b.硬件类型为1表示什么,操作类型为1表示什么?c.目标物理地址也有两个值:FF:FF:FF:FF:FF:FF和00:00:00:00:00:00,为什么,各说明什么?