互联网协议控制块管理与优化

需积分: 50 98 下载量 22 浏览量 更新于2024-08-05 收藏 36.37MB PDF 举报
"TCP/IP详解-实现求精及网络编程接口" 在《TCP/IP详解 卷2:实现》中,作者探讨了如何优化网络协议控制块(PCB)的查找算法,特别是针对TCP和UDP的实现。22.12章节集中讨论了减少`in_pcblookup`函数的线性搜索耗时的问题,这是分用IP数据报时的一个关键步骤。作者指出,原始的线性搜索方法在处理大量连接时效率低下,特别是在面对如联机交易处理系统这类不遵循分组列模型的数据时。 为改善这一情况,书中提到了几种优化策略。首先,TCP和UDP协议维护一个指向最近使用的PCB的指针,形成一个单入口高速缓存,如果收到的数据报匹配这个高速缓存中的信息,就无需进行线性搜索。然而,这种简单的高速缓存对于不规律的数据流可能效果不佳。因此,书中引用了McKenny和Dove (1992) 的建议,即当一个PCB被引用时将其移动到PCB表的前端,以提高后续查找的效率。这种方式被称为"移到最前面"启发式算法。 此外,书中还比较了散列链方法,这种方法通过计算散列函数将PCB组织成散列表,大大提高了查找速度,性能提升了大约一个数量级。同时,Hutchinson和Peterson (1991)的研究表明,相对于线性搜索,散列表在插入接口数量增加时,分用UDP数据报的时间保持常量,而线性搜索则随接口数量增加而增长。 小结部分强调了每个Internet插口与一个相关的Internet PCB关联,其中包含了诸如本地和外部IP地址、路由结构指针等信息。TCP、UDP和原始IP的PCB都存储在各自协议维护的双向链表中。本章深入分析了几个处理PCB的函数,包括`in_pcblookup`、`in_pcbbind`和`in_pcbconnect`,并对它们的作用和应用场景进行了详细阐述。 在第1章的概述中,作者介绍了伯克利联网程序代码的基础,包括源代码的表示方式、代码版本的历史以及两种主要的编程接口——用于编写TCP/IP协议的Unix和非Unix系统接口。通过一个简单的UDP日期/时间服务器交互示例,展示了协议栈的工作原理,引出了核心数据结构和概念,为后续章节的深入讨论奠定了基础。最后,作者提到了本书中源代码的组织结构及其在整体代码库中的位置。