TCP复习整理资料全集打印.doc
《TCP复习整理资料全集打印.doc》由会员分享,可在线阅读,更多相关《TCP复习整理资料全集打印.doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章 操作系统中的TCP/IP软件结构 1 进程问题: A 进程概念:一个进程就是一次计算过程,并且独立于其他计算过程。 B 进程调度策略:CPU对没有被阻塞的进程赋予最高优先级,如多个进程优先级相同则在其中快速切换。 C 进程通信的三种机制: 1. 计数信号量通用进程同步机制 2. 端口 3. 消息传递 D 生产者消费者问题: 1. 生产者生产数据报,放入数据报队列中,消费者从队列中提取数据报,消费数据。 2. 信号量初始化: S1=screate(N); / 初始化生产者信号量 S2=screate(0);/初始化消费者信号量生产者执行:wait(s1) . Singal(s2) 消费者
2、执行:wait(s2) . Singal(s1) 3. 队列全满时生产者阻塞,队列全空时消费者阻塞,其他情况两进程正常运行。 E 端口通信: 端口: 即消息队列,该队列有两个控制访问量,亦适用了信号量机制。 端口全满psend() 进程阻塞,全空precieve()阻塞。 F 消息传送: 消息传送允许一个进程直接将消息发送给另外一个进程。 进程通过send()发送消息,以进程标识号和一个消息做入口参数;receive()等待接收消息,它被阻塞直到某消息到达,调用send()函数的进程持续运行,连续两次调用send()无receive函数接收返回SYSERR,消息无法发送。可以调用recvclr
3、()函数删除等待队列中的所有消息。2. 数据传输问题 A 协议内部数据传输: 一旦IP进程接受了一个传入数据报,它必须决定将其发往何处做进一步处理,根据其内容再将其交付给指定的进程。如:将数据交给TCP或UDP。 B 与操作系统数据传输: 系统具有从各个网络接口读取分组的能力,为每一个网络硬件设备提供一个输入队列,当有分组到达时,发生中断并调用send()给IP进程发送消息,唯一的IP进程从所有队列中提取数据报进行处理。第三章 网络接口层 网络接口层: 管理网络的硬件,完成从IP地址到硬件地址的映射过程,封装并发送分组,接收传入分组并将其发往对应的模块。网络接口的抽象模型,使得上层协议与硬件细
4、节无关.A:伪网络接口问题: 1 使用的是0号 还是1号 ? 0号 2 为什么说伪网络接口在数据传输中有重要作用 ? 伪网络接口既没有与之相关的设备驱动程序,也没有具体的硬件设施。 发往伪网络接口的数据报将转交给本机的协议软件;当协议软件生成一个需要发送出去的数据报时,通过伪网络接口将此数据报传递给IP.设立伪网络接口的优点: 1. 消除了特殊情况的存在,简化了IP程序. 2. 使得本机在路由器表中的表示方法与其他目的站的表示方法完全一致. 3. 使得网络管理员能够像查询其它接口一样方便查询本地接口. B:如何通过网络接口地址求网络号?(P2728页代码) /* ni_in.c 传入分组的多路
5、分解 (2006.4.5) */#include #include #include /#include int arp_in(struct netif*,struct ep*);int rarp_in(struct netif*,struct ep*);int ip_in(struct netif*,struct ep*);int ni_in(struct netif *pni,struct ep *pep,unsigned len) int rv; pep-ep_ifn = pni - &nif0;/用当前端口的地址减去0端口的地址得到端口号 答题重点 pni-ni_ioctets +=
6、len;/累加收到的总字节 /判断是否为广播分组,累加相应的计数器 if (!memcmp(pni-ni_hwa.ha_addr,pep-ep_dst,EP_ALEN) pni-ni_iucast+;/广播包 else pni-ni_inucast+;/非广播包 /多路分解的实现 switch (net2hs(pep-ep_type) case EPT_ARP: rv = arp_in(pni,pep);break; case EPT_RARP: rv = rarp_in(pni,pep);break; case EPT_IP: rv = ip_in(pni,pep);break; defau
7、lt:/不是这三种协议,则抛弃包 pni-ni_iunkproto+; free(pep);/用c库中的free释放,分配的时候也用malloc rv = OK; return rv;第四章 地址的发现与绑定 ARP1,ARP高速缓存结构问题:A,为什么使用单一的高速缓存结构,它的优缺点如何? 答:为了正确的阐述ARP协议规范,并且保证绑定正确且能满足高效性!优点:高速缓存分配能随网络动态的变化。缺点:网络接口的独立性较差,频繁使用的网络接口的绑定占据了大部分高速缓存时,高速缓存总是保持着100%的含量,查找到某表项的概率很小。 B,ARP高速缓存结构问题?structarpentry sho
8、rtae_state;/* 表现状态*/shortae_hwtype;/* 硬件类型*/shortae_prtype;/* 协议类型*/charae_hwlen;/* 硬件地址长度*/charae_prlen;/*协议地址长度*/struct netif *ae_pni;/* 接口结构指针*/intae_queue;/* 此地址的包的队列*/intae_attempts;/* 已发送绑定请求次数*/intae_ttl;/* 生存值*/u_charae_hwaMAXHWALEN;/* 硬件地址*/u_charae_praMAXPRALEN;/* 协议地址*/;ae_state具有三种状态AS_F
9、REE此表项当前空闲,AS_PEDING此表项正在使用,但还未找到绑定,在此种状态中ae_attempts表示该表项请求分组被广播的次数;AS_RESOLVED状态表示此表项正在使用且绑定正确。ae_ttl表示在该表项需要被删除时还能保持多长时间。ae_quee指向分组队列,当相应的ARP相应分组到达后,队列中的分组被发送出去。在ARP高速缓存中,绑定的表项使用数组存储,对应的分组放入ae_quee指针指向的队列中。 C,如何解决当一个IP请求mac时正在响应时,又有新的请求到达的问题?主要为理解P3738页的代码,代码如下,调试部分已去除。#include #include #include
10、 #include structarpentry*arpalloc();structarpentry *arpfind(u_char *, u_short, struct netif *);intarpsend(struct arpentry *);intlocal_out(struct ep *);intnetwrite(struct netif *pni, struct ep *pep, unsigned len)structarpentry *pae; /arp表项指针STATWORDps;if (pni-ni_state != NIS_UP) /判断网络接口状态,如果状态为关,则返回错
11、误freebuf(pep);return SYSERR;pep-ep_len = len; disable(ps);pae = arpfind(u_char *)&pep-ep_nexthop, pep-ep_type, pni); /调用arpfind()函数,如果已绑定返回pae=1未绑定返回pae=0if (pae & pae-ae_state = AS_RESOLVED) /处理已绑定情况memcpy(pep-ep_dst, pae-ae_hwa, pae-ae_hwlen);restore(ps);return write(pni-ni_dev, pep, len);if (IP_C
12、LASSD(pep-ep_nexthop) /判断是否为广播地址restore(ps);return SYSERR;if (pae = 0) /处理未绑定状态pae = arpalloc(); /回答本问题关键点,arpalloc()函数如后面所示pae-ae_hwtype = AR_HARDWARE;pae-ae_prtype = EPT_IP;pae-ae_hwlen = EP_ALEN;pae-ae_prlen = IP_ALEN;pae-ae_pni = pni;pae-ae_queue = EMPTY;memcpy(pae-ae_pra, &pep-ep_nexthop, pae-a
13、e_prlen);pae-ae_attempts = 0;pae-ae_ttl = ARP_RESEND;arpsend(pae);if (pae-ae_queue = EMPTY)pae-ae_queue = newq(ARP_QSIZE, QF_NOWAIT);if (enq(pae-ae_queue, pep, 0) 0)freebuf(pep);restore(ps);return OK;arpalloc()函数如下#include #include #include #include void arpdq(struct arpentry *);struct arpentry *arp
14、alloc()staticintaenext = 0;structarpentry *pae;inti;for (i=0; iae_state = AS_PENDING & pae-ae_queue = 0) /若表项处于AS_PENDING且分组队列大于0则调用arpdq(pae)删除一项并将下一项状态设为AS_PEDING,返回此时的AS_PEDINGarpdq(pae);pae-ae_state = AS_PENDING;return pae;综合上面代码:当有IP请求未完成时,若又有新请求到达,则先调用netwrite在newwrite()函数中先调用appalloc()在判定等待队列
15、是否大于零,若大于零,则删除一项,返回下一项指针,然后将该项各属性赋值再次调用arpsend();发送请求,并将ae_attempts加1。,高速缓存管理问题:, 旧表项删除Arp表项的删除是通过arpalloc();函数实现的,替换策略如下:在为arp高速缓存中的新成员分配空间时,如果存在空表项则选择空表项,不存在则采用循环法删除,即删除代码中静态整形变量aenext指向的项,并把aenext向后移动一个位置,以使下一轮查找跨过新添加的表项。代码注释如下:#include #include #include #include void arpdq(struct arpentry *);str
16、uct arpentry *arpalloc()staticintaenext = 0; /静态整型变量,指向当缓存满时最先被替换的表项structarpentry *pae; /表项数组指针inti;for (i=0; iae_state = AS_PENDING & pae-ae_queue = 0)arpdq(pae); /删除即将被删除表项指向的等待队列pae-ae_state = AS_PENDING; /设置状态为等待绑定return pae; /返回表项指针 B,添加新表项流程:添加新表项主要由arpadd()和arpqsend()两个函数完成,其中arpadd()先读取网络上传
17、来的arp分组,并通过调用arpalloc()函数为新分组分配一个表项,并利用arp分组信息填写该表项,并把该表项状态赋值为AS_RESEOLVED.arpqsend()主要用来发送等待地址转换队列中的分组。Arpqsend()通过遍历队列,取出数据分组调用netwrite()来发送发送分组到网络输出队列中。Arpadd()函数注释如下:/* arpadd.c - arpadd */#include #include #include struct arpentry *arpalloc(void);/*- * arpadd - Add a RESOLVED entry to the ARP c
18、ache * N.B. Assumes interrupts disabled *- */structarpentry *arpadd(struct netif *pni, struct arp *parp)structarpentry*pae;pae = arpalloc(); /分配表项空间 /根据arp分组填写新表项信息pae-ae_hwtype = parp-ar_hwtype;pae-ae_prtype = parp-ar_prtype;pae-ae_hwlen = parp-ar_hwlen;pae-ae_prlen = parp-ar_prlen;pae-ae_pni = pni
19、;pae-ae_queue = EMPTY;memcpy(pae-ae_hwa, SHA(parp), parp-ar_hwlen);memcpy(pae-ae_pra, SPA(parp), parp-ar_prlen);pae-ae_ttl = ARP_TIMEOUT;pae-ae_state = AS_RESOLVED; /设置状态为正确绑定return pae; /返回表项指针 C,arp定时机制:A,为什么事使用定时机制?已有定时机制的缺点,如何改进? 答:定期维护高速缓存表,避免高速缓存表时刻保持高占用性,提高查找速度。已有定时机制主要通过计算最长保留时间和已在高速缓存中存在时间之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCP 复习 整理 资料 全集 打印
限制150内