新書推薦:

《
小狗心理疗愈日记 史努比陪你找到自我主体性 走出艰难时刻
》
售價:HK$
46.2

《
心灵银行 脑科学轻松创造真正的改变 世界级催眠大师约翰卡帕斯送给普通人改写命运的秘密武器
》
售價:HK$
74.8

《
被偷走的尊严:美国保守派的失落、耻辱与奋起(三联·哈佛燕京学术丛书)
》
售價:HK$
85.8

《
尖叫的数学:令人惊叹的数学之美:修订新版(从数学的角度发现不一样的逻辑和处世哲学。随书附赠手账本。)
》
售價:HK$
63.8

《
数学老师没教过的数学
》
售價:HK$
46.2

《
法国在乍得的战争:在非洲的军事干预与非殖民化
》
售價:HK$
107.8

《
西学东渐记(插图本)
》
售價:HK$
85.8

《
新民说·保罗·策兰与勒内·夏尔书信集(1954—1968
》
售價:HK$
75.9
|
| 編輯推薦: |
《TCP/IP详解》是已故网络专家、著名技术作家W. Richard Stevens的传世之作,内容详尽且具权威性,被誉为TCP/IP领域的不朽名著。本书是《TCP/IP详解》三卷本的第2卷,重点关注TCP/IP的实现问题。书中介绍了一个实际的TCP/IP实现,并给出了这一实现的完整源代码,大约有15 000行C代码。此外,几乎每章都提供精选的习题,并在附录中提供了部分习题的答案。 这一卷要求读者对TCP/IP的工作原理以及操作系统原理有初步的了解。对TCP/IP不是很熟悉的读者应先阅读《TCP/IP详解》的第1卷,该书对TCP/IP协议族有比较透彻的描述。 《TCP/IP详解》对于网络应用的开发人员、网络管理员以及任何想了解TCP/IP运行原理的人员来说,都是极好的权威参考书。无论是初学者还是功底深厚的网络领域高手,这套书都应是案头必备。
|
| 內容簡介: |
|
本书完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点。本书适用于希望理解TCP/IP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。
|
| 關於作者: |
加里?R. 赖特(Gary R. Wright)研究TCP/IP多年。他是Connix公司的董事长,Connix公司的总部在康涅狄格州,主要提供Internet接入和咨询服务。 W. 理查德 史蒂文斯(W. Richard Stevens)(1951—1999)是国际知名的Unix和网络专家,备受赞誉的技术作家。生前著有《TCP/IP 详解》(三卷本)、《UNIX网络编程》(两卷本)以及《UNIX环境高级编程》,均为不朽的经典著作。
译者:
陆雪莹: 陆雪莹,女,1973年1月出生。1994年7月毕业于南京通信工程学院无线通信专业,获工学学士学位。1997年2月于南京通信工程学院计算机软件专业毕业,并获硕士学位。1997年9月至今,任南京通信工程学院计算机教研室教员,同时于解放军理工大学攻读军事通信学博士学位,讲师职称,主要研究方向:智能化网络管理,计算机网络分布式处理。曾参加国家“863”项目,并参加编写专业著作2本,翻译专业著作3本,在各级学术刊物上发表论文5篇。 蒋慧: 蒋慧,女,1973年2月出生。1995年毕业于南京通信工程学院计算机系,获计算机应用专业工学学士学位。1998年于南京通信工程学院计算机软件专业毕业,并获硕士学位。1998年9月至今,于解放军理工大学攻读博士学位。自1995年以来,在国内外重要学术刊物和会议上发表8篇论文,其中2篇论文被IEEE国际会议录用。已出版3本有关网络的译作。目前从事软件需求工程、网络协议验证形式化方法以及函数式语言等方面的研究。 谢希仁: 谢希仁,中国人民解放军理工大学(南京)计算机系教授,全军网络技术研究中心主任,博士研究生导师,1952年毕业于清华大学电机系电信专业。所编写的《计算机网络》于1992年获全国优秀教材奖。1999年再版的《计算机网络》第二版为普通高等教育“九五”国家级重点教材。近来还主持翻译了Comer写的《TCP/IP网际互联》计算机网络经典教材一套三卷本(电子工业出版社1998年出版),Harnedy写的《简单网络管理协议教程》(电子工业出版社1999年出版)。
|
| 目錄:
|
出版者的话 译者序 前言 第1章 概述1 1.1 引言1 1.2 源代码表示1 1.2.1 将拥塞窗口设置为11 1.2.2 印刷约定2 1.3 历史2 1.4 应用编程接口3 1.5 程序示例4 1.6 系统调用和库函数6 1.7 网络实现概述6 1.8 描述符7 1.9 mbuf与输出处理11 1.9.1 包含插口地址结构的mbuf11 1.9.2 包含数据的mbuf12 1.9.3 添加IP和UDP首部13 1.9.4 IP输出14 1.9.5 以太网输出14 1.9.6 UDP输出小结14 1.10 输入处理15 1.10.1 以太网输入15 1.10.2 IP输入15 1.10.3 UDP输入16 1.10.4 进程输入17 1.11 网络实现概述(续)17 1.12 中断级别与并发18 1.13 源代码组织20 1.14 测试网络21 1.15 小结22 第2章 mbuf:存储器缓存24 2.1 引言24 2.2 代码介绍27 2.2.1 全局变量27 2.2.2 统计28 2.2.3 内核统计28 2.3 mbuf的定义29 2.4 mbuf结构29 2.5 简单的mbuf宏和函数31 2.5.1 m_get函数32 2.5.2 MGET宏32 2.5.3 m_retry函数33 2.5.4 mbuf锁34 2.6 m_devget和m_pullup函数34 2.6.1 m_devget函数34 2.6.2 mtod和dtom宏36 2.6.3 m_pullup函数和连续的协议首部36 2.6.4 m_pullup和IP的分片与重组37 2.6.5 TCP重组避免调用m_pullup39 2.6.6 m_pullup使用总结40 2.7 mbuf宏和函数的小结40 2.8 Net/3联网数据结构小结42 2.9 m_copy和簇引用计数43 2.10 其他选择47 2.11 小结47 第3章 接口层49 3.1 引言49 3.2 代码介绍49 3.2.1 全局变量49 3.2.2 SNMP变量50 3.3 ifnet结构51 3.4 ifaddr结构57 3.5 sockaddr结构58 3.6 ifnet与ifaddr的专用化59 3.7 网络初始化概述60 3.8 以太网初始化61 3.9 SLIP初始化64 3.10 环回初始化65 3.11 if_attach函数66 3.12 ifinit函数72 3.13 小结73 第4章 接口:以太网74 4.1 引言74 4.2 代码介绍75 4.2.1 全局变量75 4.2.2 统计量75 4.2.3 SNMP变量76 4.3 以太网接口77 4.3.1 leintr函数79 4.3.2 leread函数79 4.3.3 ether_input函数81 4.3.4 ether_output函数84 4.3.5 lestart函数87 4.4 ioctl系统调用89 4.4.1 ifioctl函数90 4.4.2 ifconf函数91 4.4.3 举例94 4.4.4 通用接口ioctl命令95 4.4.5 if_down和if_up函数96 4.4.6 以太网、SLIP和环回97 4.5 小结98 第5章 接口:SLIP和环回100 5.1 引言100 5.2 代码介绍100 5.2.1 全局变量100 5.2.2 统计量101 5.3 SLIP接口101 5.3.1 SLIP线路规程:SLIPDISC101 5.3.2 SLIP初始化:slopen和slinit103 5.3.3 SLIP输入处理:slinput105 5.3.4 SLIP输出处理:sloutput109 5.3.5 slstart函数111 5.3.6 SLIP分组丢失116 5.3.7 SLIP性能考虑117 5.3.8 slclose函数117 5.3.9 sltioctl函数118 5.4 环回接口119 5.5 小结121 第6章 IP编址123 6.1 引言123 6.1.1 IP地址123 6.1.2 IP地址的印刷规定123 6.1.3 主机和路由器124 6.2 代码介绍125 6.3 接口和地址小结125 6.4 sockaddr_in结构126 6.5 in_ifaddr结构127 6.6 地址指派128 6.6.1 ifioctl函数130 6.6.2 in_control函数130 6.6.3 前提条件:SIOCSIFADDR、SIOCSIFNETMASK和SIOCSIFDSTADDR132 6.6.4 地址指派:SIOCSIFADDR133 6.6.5 in_ifinit函数133 6.6.6 网络掩码指派:SIOCSIFNETMASK136 6.6.7 目的地址指派:SIOCSIFDSTADDR137 6.6.8 获取接口信息137 6.6.9 每个接口多个IP地址138 6.6.10 附加IP地址:SIOCAIFADDR139 6.6.11 删除IP地址:SIOCDIFADDR140 6.7 接口ioctl处理141 6.7.1 leioctl函数141 6.7.2 slioctl函数142 6.7.3 loioctl函数143 6.8 Internet实用函数144 6.9 ifnet实用函数144 6.10 小结145 第7章 域和协议146 7.1 引言146 7.2 代码介绍146 7.2.1 全局变量147 7.2.2 统计量147 7.3 domain结构147 7.4 protosw结构148 7.5 IP 的domain和protosw结构150 7.6 pffindproto和pffindtype函数155 7.7 pfctlinput函数157 7.8 IP初始化157 7.8.1 Internet传输分用157 7.8.2 ip_init函数158 7.9 sysctl系统调用159 7.10 小结161 第8章 IP:网际协议162 8.1 引言162 8.2 代码介绍163 8.2.1 全局变量163 8.2.2 统计量163 8.2.3 SNMP变量164 8.3 IP分组165 8.4 输入处理:ipintr函数167 8.4.1 ipintr概观167 8.4.2 验证168 8.4.3 转发或不转发171 8.4.4 重装和分用173 8.5 转发:ip_forward函数174 8.6 输出处理:ip_output函数180 8.6.1 首部初始化181 8.6.2 路由选择182 8.6.3 源地址选择和分片184 8.7 Internet检验和:in_cksum函数186 8.8 setsockopt和getsockopt系统调用190 8.8.1 PRCO_SETOPT的处理192 8.8.2 PRCO_GETOPT的处理193 8.9 ip_sysctl函数193 8.10 小结194 第9章 IP选项处理196 9.1 引言196 9.2 代码介绍196 9.2.1 全局变量196 9.2.2 统计量197 9.3 选项格式197 9.4 ip_dooptions函数198 9.5 记录路由选项200 9.6 源站和记录路由选项202 9.6.1 save_rte函数205 9.6.2 ip_srcroute函数206 9.7 时间戳选项207 9.8 ip_insertoptions函数210 9.9 ip_pcbopts函数214 9.10 一些限制217 9.11 小结217 第10章 IP的分片与重装218 10.1 引言218 10.2 代码介绍219 10.2.1 全局变量220 10.2.2 统计量220 10.3 分片220 10.4 ip_optcopy函数223 10.5 重装224 10.6 ip_reass函数227 10.7 ip_slowtimo函数237 10.8 小结238 第11章 ICMP:Internet控制报文协议239 11.1 引言239 11.2 代码介绍242 11.2.1 全局变量242 11.2.2 统计量242 11.2.3 SNMP变量243 11.3 icmp结构244 11.4 ICMP 的protosw结构245 11.5 输入处理:icmp_input函数246 11.6 差错处理249 11.7 请求处理251 11.7.1 回显询问:ICMP_ECHO和 ICMP_ECHOREPLY252 11.7.2 时间戳询问:ICMP_TSTAMP和 ICMP_TSTAMPREPLY253 11.7.3 地址掩码询问:ICMP_MASKREQ和ICMP_MASKREPLY253 11.7.4 信息询问:ICMP_IREQ和ICMP_IREQREPLY255 11.7.5 路由器发现:ICMP_ROUTERADVERT和ICMP_ROUTERSOLICIT255 11.8 重定向处理255 11.9 回答处理257 11.10 输出处理257 11.11 icmp_error函数258 11.12 icmp_reflect函数261 11.13 icmp_send函数265 11.14 icmp_sysctl函数266 11.15 小结266 第12章 IP多播268 12.1 引言268 12.2 代码介绍269 12.2.1 全局变量270 12.2.2 统计量270 12.3 以太网多播地址270 12.4 ether_multi结构271 12.5 以太网多播接收273 12.6 in_multi结构273 12.7 ip_moptions结构275 12.8 多播的插口选项276 12.9 多播的TTL值277 12.9.1 MBONE278 12.9.2 扩展环搜索278 12.10 ip_setmoptions函数278 12.10.1 选择一个明确的多播接口:IP_MULTICAST_IF280 12.10.2 选择明确的多播TTL: IP_ MULTICAST_TTL281 12.10.3 选择多播环回:IP_MULTICAST_LOOP281 12.11 加入一个IP多播组282 12.11.1 in_addmulti函数285 12.11.2 slioctl和loioctl函数:SIOCADDMULTI和SIOCDELMULTI287 12.11.3 leioctl函数:SIOCADDMULTI和SIOCDELMULTI288 12.11.4 ether_addmulti函数288 12.12 离开一个IP多播组291 12.12.1 in_delmulti函数292 12.12.2 ether_delmulti函数293 12.13 ip_getmoptions函数295 12.14 多播输入处理:ipintr函数296 12.15 多播输出处理:ip_output函数298 12.16 性能的考虑301 12.17 小结301 第13章 IGMP:Internet组管理协议303 13.1 引言303 13.2 代码介绍304 13.2.1 全局变量304 13.2.2 统计量304 13.2.3 SNMP变量305 13.3 igmp结构305 13.4 IGMP的protosw的结构306 13.5 加入一个组:igmp_joingroup函数306 13.6 igmp_fasttimo函数308 13.7 输入处理:igmp_input函数311 13.7.1 成员关系查询:IGMP_HOST_MEMBERSHIP_QUERY312 13.7.2 成员关系报告:IGMP_HOST_MEMBERSHIP_REPORT313 13.8 离开一个组:igmp_leavegroup函数314 13.9 小结315 第14章 IP多播选路316 14.1 引言316 14.2 代码介绍316 14.2.1 全局变量316 14.2.2 统计量317 14.2.3 SNMP变量317 14.3 多播输出处理(续)317 14.4 mrouted守护程序318 14.5 虚拟接口321 14.5.1 虚拟接口表322 14.5.2 add_vif函数324 14.5.3 del_vif函数326 14.6 IGMP(续)327 14.6.1 add_lgrp函数328 14.6.2 del_lgrp函数329 14.6.3 grplst_member函数330 14.7 多播选路331 14.7.1 多播选路表334 14.7.2 del_mrt函数335 14.7.3 add_mrt函数336 14.7.4 mrtfind函数337 14.8 多播转发:ip_mforward函数338 14.8.1 phyint_send函数343 14.8.2 tunnel_send函数344 14.9 清理:ip_mrouter_done函数345 14.10 小结346 第15章 插口层348 15.1 引言348 15.2 代码介绍349 15.3 socket结构349 15.4 系统调用354 15.4.1 举例355 15.4.2 系统调用小结355 15.5 进程、描述符和插口357 15.6 socket系统调用358 15.6.1 socreate函数359 15.6.2 超级用户特权361 15.7 getsock和sockargs函数361 15.8 bind系统调用363 15.9 listen系统调用364 15.10 tsleep和wakeup函数365 15.11 accept系统调用366 15.12 sonewconn和soisconnected函数369 15.13 connect系统调用372 15.13.1 soconnect函数374 15.13.2 切断无连接插口和外部地址的关联375 15.14 shutdown系统调用375 15.15 close系统调用377 15.15.1 soo_close函数377 15.15.2 soclose函数378 15.16 小结380 第16章 插口I/O381 16.1 引言381 16.2 代码介绍381 16.3 插口缓存381 16.4 write、writev、sendto和sendmsg系统调用384 16.5 sendmsg系统调用387 16.6 sendit函数388 16.6.1 uiomove函数389 16.6.2 举例390 16.6.3 sendit代码391 16.7 sosend函数392 16.7.1 可靠的协议缓存393 16.7.2 不可靠的协议缓存393 16.7.3 sosend函数小结401 16.7.4 性能问题401 16.8 read、readv、recvfrom和recvmsg系统调用401 16.9 recvmsg系统调用402 16.10 recvit函数403 16.11 soreceive函数405 16.11.1 带外数据406 16.11.2 举例406 16.11.3 其他的接收操作选项407 16.11.4 接收缓存的组织:报文边界407 16.11.5 接收缓存的组织:没有报文边界408 16.11.6 控制信息和带外数据409 16.12 soreceive代码410 16.13 select系统调用421 16.13.1 selscan函数425 16.13.2 soo_select函数425 16.13.3 selrecord函数427 16.13.4 selwakeup函数428 16.14 小结429 第17章 插口选项431 17.1 引言431 17.2 代码介绍431 17.3 setsockopt系统调用432 17.4 getsockopt系统调用437 17.5 fcntl和ioctl系统调用440 17.5.1 fcntl代码441 17.5.2 ioctl代码443 17.6 getsockname系统调用444 17.7 getpeername系统调用445 17.8 小结447 第18章 Radix树路由表448 18.1 引言448 18.2 路由表结构448 18.3 选路插口456 18.4 代码介绍456 18.4.1 全局变量458 18.4.2 统计量458 18.4.3 SNMP变量459 18.5 Radix结点数据结构460 18.6 选路结构463 18.7 初始化:route_init和rtable_init函数465 18.8 初始化:rn_init和rn_inithead函数468 18.9 重复键和掩码列表471 18.10 rn_match函数473 18.11 rn_search函数480 18.12 小结481 第19章 选路请求和选路消息482 19.1 引言482 19.2 rtalloc和rtalloc1函数482 19.3 宏RTFREE和rtfree函数484 19.4 rtrequest函数486 19.5 rt_setgate函数491 19.6 rtinit函数493 19.7 rtredirect函数495 19.8 选路消息的结构498 19.9 rt_missmsg函数501 19.10 rt_ifmsg函数503 19.11 rt_newaddrmsg函数504 19.12 rt_msg1函数505 19.13 rt_msg2函数507 19.14 sysctl_rtable函数510 19.15 sysctl_dumpentry函数514 19.16 sysctl_iflist函数515 19.17 小结517 第20章 选路插口518 20.1 引言518 20.2 routedomain和protosw结构518 20.3 选路控制块519 20.4 raw_init函数520 20.5 route_output函数520 20.6 rt_xaddrs函数530 20.7 rt_setmetrics函数531 20.8 raw_input函数532 20.9 route_usrreq函数534 20.10 raw_usrreq函数535 20.11 raw_attach、raw_detach和raw_disconnect函数539 20.12 小结540 第21章 ARP:地址解析协议542 21.1 介绍542 21.2 ARP和路由表542 21.3 代码介绍544 21.3.1 全局变量544 21.3.2 统计量544 21.3.3 SNMP变量546 21.4 ARP结构546 21.5 arpwhohas函数548 21.6 arprequest函数548 21.7 arpintr函数551 21.8 in_arpinput函数552 21.9 ARP定时器函数557 21.9.1 arptimer函数557 21.9.2 arptfree函数557 21.10 arpresolve函数558 21.11 arplookup函数562 21.12 代理ARP563 21.13 arp_rtrequest函数564 21.14 ARP和多播569 21.15 小结570 第22章 协议控制块572 22.1 引言572 22.2 代码介绍573 22.2.1 全局变量574 22.2.2 统计量574 22.3 inpcb的结构574 22.4 in_pcballoc和in_pcbdetach函数575 22.5 绑定、连接和分用577 22.6 in_pcblookup函数581 22.7 in_pcbbind函数584 22.8 in_pcbconnect函数589 22.9 in_pcbdisconnect函数594 22.10 in_setsockaddr和in_setpeeraddr函数595 22.11 in_pcbnotify、in_rtchange和in_losing函数595 22.11.1 in_rtchange函数598 22.11.2 重定向和原始插口599 22.11.3 ICMP差错和UDP插口600 22.11.4 in_losing函数601 22.12 实现求精602 22.13 小结602 第23章 UDP:用户数据报协议605 23.1 引言605 23.2 代码介绍605 23.2.1 全局变量606 23.2.2 统计量606 23.2.3 SNMP变量607 23.3 UDP 的protosw结构607 23.4 UDP的首部608 23.5 udp_init函数609 23.6 udp_output函数609 23.6.1 在前面加上IP/UDP首部和mbuf簇612 23.6.2 UDP检验和计算和伪首部612 23.7 udp_input函数616 23.7.1 对收到的UDP数据报的一般确认616 23.7.2 分用单播数据报619 23.7.3 分用多播和广播数据报622 23.7.4 连接上的UDP插口和多接口主机625 23.8 udp_saveopt函数625 23.9 udp_ctlinput函数627 23.10 udp_usrreq函数628 23.11 udp_sysctl函数633 23.12 实现求精633 23.12.1 UDP PCB高速缓存633 23.12.2 UDP检验和634 23.13 小结635 第24章 TCP:传输控制协议636 24.1 引言636 24.2 代码介绍636 24.2.1 全局变量636 24.2.2 统计量637 24.2.3 SNMP变量640 24.3 TCP 的protosw结构641 24.4 TCP的首部641 24.5 TCP的控制块643 24.6 TCP的状态变迁图645 24.7 TCP的序号646 24.8 tcp_init函数650 24.9 小结652 第25章 TCP的定时器654 25.1 引言654 25.2 代码介绍655 25.3 tcp_canceltimers函数657 25.4 tcp_fasttimo函数657 25.5 tcp_slowtimo函数658 25.6 tcp_timers函数659 25.6.1 FIN_WAIT_2和2MSL定时器660 25.6.2 持续定时器662 25.6.3 连接建立定时器和保活定时器662 25.7 重传定时器的计算665 25.8 tcp_newtcpcb算法666 25.9 tcp_setpersist函数668 25.10 tcp_xmit_timer函数669 25.11 重传超时:tcp_timers函数673 25.11.1 慢起动和避免拥塞675 25.11.2 精确性677 25.12 一个RTT的例子677 25.13 小结679 第26章 TCP输出680 26.1 引言680 26.2 tcp_output概述680 26.3 决定是否应发送一个报文段682 26.4 TCP选项691 26.5 窗口大小选项 692 26.6 时间戳选项692 26.6.1 哪个时间戳需要回显,RFC 1323算法694 26.6.2 哪个时间戳需要回显,正确的算法695 26.6.3 时间戳与延迟ACK695 26.7 发送一个报文段696 26.8 tcp_template函数707 26.9 tcp_respond函数708 26.10 小结710 第27章 TCP的函数712 27.1 引言712 27.2 tcp_drain函数712 27.3 tcp_drop函数712 27.4 tcp_close函数713 27.4.1 路由特性713 27.4.2 资源释放716 27.5 tcp_mss函数717 27.6 tcp_ctlinput函数722 27.7 tcp_notify函数723 27.8 tcp_quench函数724 27.9 TCP_REASS宏和tcp_reass函数724 27.9.1 TCP_REASS宏725 27.9.2 tcp_reass函数727 27.10 tcp_trace函数732 27.11 小结736 第28章 TCP的输入737 28.1 引言737 28.2 预处理739 28.3 tcp_dooptions函数745 28.4 首部预测747 28.5 TCP输入:缓慢的执行路径752 28.6 完成被动打开或主动打开752 28.6.1 完成被动打开753 28.6.2 完成主动打开756 28.7 PAWS:防止序号回绕760 28.8 裁剪报文段使数据在窗口内762 28.9 自连接和同时打开768 28.10 记录时间戳770 28.11 RST处理770 28.12 小结772 第29章 TCP的输入(续)773 29.1 引言773 29.2 ACK处理概述773 29.3 完成被动打开和同时打开774 29.4 快速重传和快速恢复的算法775 29.5 ACK处理778 29.6 更新窗口信息784 29.7 紧急方式处理786 29.8 tcp_pulloutofband函数788 29.9 处理已接收的数据789 29.10 FIN处理791 29.11 最后的处理793 29.12 实现求精795 29.13 首部压缩795 29.13.1 引言796 29.13.2 首部字段的压缩799 29.13.3 特殊情况801 29.13.4 实例802 29.13.5 配置803 29.14 小结803 第30章 TCP的用户需求805 30.1 引言805 30.2 tcp_usrreq函数805 30.3 tcp_attach函数814 30.4 tcp_disconnect函数815 30.5 tcp_usrclosed函数816 30.6 tcp_ctloutput函数817 30.7 小结820 第31章 BPF:BSD 分组过滤程序821 31.1 引言821 31.2 代码介绍821 31.2.1 全局变量821 31.2.2 统计量822 31.3 bpf_if结构822 31.4 bpf_d结构825 31.4.1 bpfopen函数826 31.4.2 bpfioctl函数827 31.4.3 bpf_setif函数830 31.4.4 bpf_attachd函数831 31.5 BPF的输入832 31.5.1 bpf_tap函数832 31.5.2 catchpacket函数833 31.5.3 bpfread函数835 31.6 BPF的输出837 31.7 小结838 第32章 原始IP839 32.1 引言839 32.2 代码介绍839 32.2.1 全局变量839 32.2.2 统计量840 32.3 原始 IP的protosw结构840 32.4 rip_init函数842 32.5 rip_input函数842 32.6 rip_output函数844 32.7 rip_usrreq函数846 32.8 rip_ctloutput函数850 32.9 小结852 结束语853 附录A 部分习题的解答854 附录B 源代码的获取872 附录C RFC 1122 的有关内容874 参考文献895
|
| 內容試閱:
|
简介 本书描述并给出了TCP/IP实现引用的源代码—加利福尼亚大学伯克利分校的计算机系统研究组(CSRG)的实现。历史上,它曾以4.x BSD系统(伯克利软件发行)发布。这个实现第一次发布是在1982年,经过了很多重大的改变和改进,并且其中很多特性被引入到其他Unix和非Unix系统中。这不是一个没有多大意义的实现,而是天天在世界上成千上万个系统上运行的TCP/IP实现的基础。这个实现还提供路由功能,显示主机和路由器的TCP/IP实现间的区别。 我们描述这个实现并给出TCP/IP内核实现的完整源代码,大约15 000行C代码。在本文中描述的是4.4BSD-Lite版本。这个代码在1994年4月公开,包含很多增强的联网部分,它们被添加到1988年的4.3BSD Tahoe版、1990年的4.3BSD Reno版和1993年的4.4BSD版(附录B介绍了如何获得这些源代码)。4.4BSD版提供最新的TCP/IP特征,如多播和长肥管道支持(用于高宽带、长时延路径)。图1-1提供了伯克利联网代码的各种版本的其他细节。 本书适用于希望理解TCP/IP的实现细节的广大读者:编写网络应用的程序员,负责利用TCP/IP维护计算机系统和网络的系统管理员,以及任何想理解大块的重要代码是如何满足一个真实操作系统的程序员。 本书的组织结构 下图显示的是所涉及的各种协议和子系统。每个方框旁的斜体数字指出方框中的论题在哪一章讨论。 我们采用自底向上的方法来讨论TCP/IP协议族,从数据链路层开始,然后是网络层(IP、ICMP、IGMP、IP路由选择和多播路由选择),接下来是插口层,最后以运输层(UDP、TCP和原始IP)结束。 预期的读者 本书假设读者对TCP/IP的工作原理有基本的理解。不熟悉TCP/IP的读者应该参考本套书中的第1卷[Stevens 1994],那本书对TCP/IP协议组进行了全面的描述。在本书中对第1卷的引用均为卷1。本书还假设读者对操作系统原理有基本的理解。 我们用数据结构方法来描述这个协议的实现。即,除了给出源代码外,每章还包括源代码使用和维护的数据结构的图与说明。我们显示了这些数据结构是如何适用于TCP/IP和内核使用的其他数据结构的。通篇使用大量的图表—超过250个图表。 这种数据结构方法允许读者采用各种方式使用本书。对所有实现细节感兴趣的读者可以从头到尾阅读全书,看完所有的源代码。可能只想理解协议的实现细节的其他读者,可通过理解所有数据结构并阅读所有文字达到目的,而不必看完所有的源代码。 我们预料很多读者会对书中的特定部分感兴趣并且想直接进入那一章。因此,通篇提供了很多向前或向后的引用,沿着完整的索引,允许单独学习某一章。在各章的结尾都提供了习题,并在附录A中给出大多数习题的答案作为自学的参考,使本书能发挥最大的作用。 源代码版权 本书中出现的所有代码,除了图1-2和图8-27,都是来自4.4BSD-Lite发行版。这个软件是公开的,可从很多地方获得(参见附录B)。 源代码的所有部分都包含下列版权声明。
Gary R.Wright 米德尔顿,康涅狄格 W. Richard Stevens 图森,亚利桑那 1994年11月
我们愿意向广大的读者推荐W. Richard Stevens关于TCP/IP的经典著作(共3卷)的中译本。本书是其中的第2卷:《TCP/IP详解 卷2:实现》。 大家知道,TCP/IP已成为计算机网络事实上的标准。在关于TCP/IP的论著中,最有影响的就是两部著作。一部是Douglas E. Comer写的《用TCP/IP进行网际互连》,一套共3卷,而另一部就是Stevens写的这3卷书。这两套巨著都很有名,各有其特点。无论是从事计算机网络教学的教师还是进行计算机网络科研的技术人员,这两套书都应当是必读的。 这套书的特点是内容丰富,概念清楚且准确,讲解详细,例子很多。作者在书中举出的所有例子均在作者安装的计算机网络上做过实际验证。各章都留有一定数量的习题。在附录A作者对部分习题给出了解答,而且书后还给出了许多经典的参考文献,并一一写出评注。 第2卷是第1卷的继续和深入。读者在学习这一卷时,应当先具备第1卷所阐述的关于TCP/IP的基本知识。本卷的特点是使用大量的源代码来讲述TCP/IP协议族中的各协议是怎样实现的。这些内容对于编写TCP/IP网络应用程序的程序员和负责维护基于TCP/IP协议的计算机网络的系统管理员来说,应当是必读的。 参加本书翻译的有:谢钧(序言和第1~7章),蒋慧(第8~14章,第22~23章),吴礼发(第15~17章),端义峰(第18~19章),胥光辉(第20~21章),陆雪莹(第24~32章以及全部附录)。全书由谢希仁教授审校。 限于水平,翻译中不妥或错误之处在所难免,敬请广大读者批评指正。
|
|