logo资料库

Linux/Unix 网络编程.pdf(中文版)

第1页 / 共335页
第2页 / 共335页
第3页 / 共335页
第4页 / 共335页
第5页 / 共335页
第6页 / 共335页
第7页 / 共335页
第8页 / 共335页
资料共335页,剩余部分请下载后查看
目录
第一章 概论
第二章 UNIX/Linux模型
第三章 进程控制
第四章 进程间通讯
第五章 通信协议简介
第六章 Berkeley套接字
第七章 网络安全性
第十章 远程命令执行
第十一章 远程注册
第十二章 远程过程调用
第十三章 远程磁带访问
第十四章 WWW上HTTP协议
附录A 有关网络通信的服务和网络库函数
附录B Vi使用简介
附录C Linux下C语言使用与调试简介
第一章 概论 ..................................................................................................................1 1.1 网络的历史.......................................................................................................1 1.2 OSI 模型...........................................................................................................3 1.3 Internet 体系模型..............................................................................................4 1.4 客户/服务器模型...............................................................................................5 1.4 UNIX 的历史 ...................................................................................................7 1.4.1 Unix 诞生前的故事 .................................................................................7 1.4.2 UNIX 的诞生..........................................................................................8 1.4.3 1979 – UNIX 第七版 ............................................................................. 10 1.4.4 UNIX 仅仅是历史吗?............................................................................. 11 1.5 Linux 的发展.................................................................................................. 11 1.5.1 Linux 的发展历史 .................................................................................. 12 1.5.2 什么叫 GNU? ...................................................................................... 12 1.5.3 Linux 的特色 ........................................................................................ 13 1.5.4 硬件需求............................................................................................... 14 1.5.5 Linux 可用的软件 ................................................................................. 14 1.5.6 为什么选择 Linux ? ............................................................................ 15 1.6 Linux 和 Unix 的发展 .................................................................................... 15 第二章 UNIX/Linux 模型...............................................................................................17 2.1 UNIX/Linux 基本结构.......................................................................................17 2.2 输入和输出......................................................................................................19 2.2.1 UNIX/Linux 文件系统简介 ......................................................................19 2.2.2 流和标准 I/O 库......................................................................................20 2.3 进程 ................................................................................................................21 第三章 进程控制 ..........................................................................................................22 3.1 进程的建立与运行 ...........................................................................................22 3.1.1 进程的概念 ............................................................................................22 3.1.2 进程的建立 ............................................................................................22 3.1.3 进程的运行 ............................................................................................24 3.1.4 数据和文件描述符的继承 .......................................................................29 3.2 进程的控制操作...............................................................................................31 3.2.1 进程的终止 ............................................................................................31 3.2.2 进程的同步 ............................................................................................32 3.2.3 进程终止的特殊情况 ..............................................................................33 3.2.4 进程控制的实例 .....................................................................................33 3.3 进程的属性......................................................................................................38 3.3.1 进程标识符 ............................................................................................38 3.3.2 进程的组标识符 .....................................................................................39 3.3.3 进程环境................................................................................................40 3.3.4 进程的当前目录 .....................................................................................42 3.3.5 进程的有效标识符..................................................................................43 3.3.6 进程的资源 ............................................................................................44 3.3.7 进程的优先级.........................................................................................45 3.4 守护进程 .........................................................................................................46
3.4.1 简介.......................................................................................................46 3.4.2 守护进程的启动 ............................................................................................46 3.4.3 守护进程的错误输出 ..............................................................................46 3.4.4 守护进程的建立 .....................................................................................48 3.5 本章小结 .........................................................................................................49 第四章 进程间通信.......................................................................................................50 4.1 进程间通信的一些基本概念 .............................................................................50 4.2 信号 ................................................................................................................50 4.2.1 信号的处理 ............................................................................................52 4.2.2 信号与系统调用的关系...........................................................................54 4.2.3 信号的复位 ............................................................................................55 4.2.4 在进程间发送信号..................................................................................56 4.2.5 系统调用 alarm()和 pause()......................................................................58 4.2.6 系统调用 setjmp()和 longjmp().................................................................62 4.3 管道 ................................................................................................................63 4.3.1 用 C 来建立、使用管道 ..........................................................................65 4.3.2 需要注意的问题 .....................................................................................72 4.4 有名管道 .........................................................................................................72 4.4.1 有名管道的创建 .....................................................................................72 4.4.2 有名管道的 I/O 使用...............................................................................73 4.4.3 未提到的关于有名管道的一些注意 .........................................................75 4.5 文件和记录锁定...............................................................................................75 4.5.1 实例程序及其说明..................................................................................75 4.5.2 锁定中的几个概念..................................................................................78 4.5.3 System V 的咨询锁定..............................................................................78 4.5.4 BSD 的咨询式锁定 .................................................................................79 4.5.5 前面两种锁定方式的比较 .......................................................................81 4.5.6 Linux 的其它上锁技术 ............................................................................81 4.6 System V IPC ...................................................................................................84 4.6.1 ipcs 命令 ................................................................................................85 4.6.2 ipcrm 命令..............................................................................................86 4.7 消息队列(Message Queues)...........................................................................86 4.7.1 有关的数据结构 .....................................................................................86 4.7.2 有关的函数 ............................................................................................89 4.7.3 消息队列实例——msgtool,一个交互式的消息队列使用工具 ..................94 4.8 信号量(Semaphores) .........................................................................................97 4.8.1 有关的数据结构 .....................................................................................98 4.8.2 有关的函数 ............................................................................................99 4.8.3 信号量的实例——semtool,交互式的信号量使用工具...........................103 4.9 共享内存(Shared Memory) ..............................................................................109 4.9.1 有关的数据结构 ...................................................................................109 4.9.2 有关的函数 .......................................................................................... 110 4.9.3 共享内存应用举例——shmtool,交互式的共享内存使用工具................... 112 4.9.4 共享内存与信号量的结合使用 .............................................................. 114
第五章 通信协议简介 .................................................................................................120 5.1 引言 ..............................................................................................................120 5.2 XNS(Xerox Network Systems)概述..............................................................120 5.2.1 XNS 分层结构......................................................................................120 5.3 IPX/SPX 协议概述........................................................................................122 5.3.1 网际包交换(IPX) .............................................................................122 5.3.2 排序包交换(SPX).............................................................................124 5.4 Net BIOS 概述................................................................................................124 5.5 Apple Talk 概述 ..............................................................................................125 5.6 TCP/IP 概述...................................................................................................126 5.6.1 TCP/IP 结构模型 ..................................................................................126 5.6.2 Internet 协议(IP)...............................................................................127 5.6.3 传输控制协议(TCP) .........................................................................132 5.6.4 用户数据报文协议................................................................................134 5.7 小结 ..............................................................................................................135 第六章 Berkeley 套接字 ............................................................................................. 136 6.1 引言 ............................................................................................................. 136 6.2 概述 ............................................................................................................. 136 6.2.1 Socket 的历史...................................................................................... 136 6.2.2 Socket 的功能...................................................................................... 136 6.2.3 套接字的三种类型............................................................................... 138 6.3 Linux 支配的网络协议................................................................................... 141 6.3.1 什么是 TCP/IP? ................................................................................... 141 6.4 套接字地址................................................................................................... 142 6.4.1 什么是 Socket? .................................................................................. 142 6.4.2 Socket 描述符...................................................................................... 142 6.4.3 一个套接字是怎样在网络上传输数据的?............................................ 143 6.5 套接字的一些基本知识 ................................................................................. 144 6.5.1 基本结构............................................................................................. 144 6.5.2 基本转换函数...................................................................................... 145 6.6 基本套接字调用............................................................................................ 147 6.6.1 socket() 函数....................................................................................... 147 6.6.2 bind() 函数 ......................................................................................... 148 6.6.3 connect()函数 ...................................................................................... 150 6.6.4 listen() 函数........................................................................................ 151 6.6.5 accept()函数 ........................................................................................ 152 6.6.6 send()、recv()函数 ............................................................................... 154 6.6.7 sendto() 和 recvfrom() 函数 ................................................................. 155 6.6.8 close()和 shutdown()函数...................................................................... 156 6.6.9 setsockopt() 和 getsockopt() 函数 ......................................................... 157 6.6.10 getpeername()函数.............................................................................. 157 6.6.11 gethostname()函数.............................................................................. 158 6.7 DNS 的操作.................................................................................................. 158 6.7.1 理解 DNS............................................................................................ 158
6.7.2 和 DNS 有关的函数和结构 .................................................................. 158 6.7.3 DNS 例程............................................................................................ 159 6.8 套接字的 Client/Server 结构实现的例子.......................................................... 160 6.8.1 简单的流服务器 .................................................................................. 161 6.8.2 简单的流式套接字客户端程序 ............................................................. 163 6.8.3 数据报套接字例程(DatagramSockets)............................................... 165 6.9 保留端口 ...................................................................................................... 169 6.9.1 简介.................................................................................................... 169 6.9.2 保留端口............................................................................................. 170 6.10 五种 I/O 模式................................................................................................. 179 6.10.1 阻塞 I/O 模式 .................................................................................... 179 6.10.2 非阻塞模式 I/O.................................................................................. 180 6.10.3 I/O 多路复用 ..................................................................................... 181 6.10.4 信号驱动 I/O 模式 ............................................................................. 182 6.10.5 异步 I/O 模式 .................................................................................... 185 6.10.6 几种 I/O 模式的比较.......................................................................... 186 6.10.7 fcntl()函数 ......................................................................................... 186 6.10.8 套接字选择项 select()函数.................................................................. 187 6.11 带外数据..................................................................................................... 190 6.11.1 TCP 的带外数据 ................................................................................ 190 6.11.2 OOB 传输套接字例程(服务器代码 Server.c) ................................... 193 6.11.3 OOB 传输套接字例程(客户端代码 Client.c).................................... 196 6.11.4 编译例子 ........................................................................................... 199 6.12 使用 Inetd(Internet 超级服务器) ............................................................... 199 6.12.1 简介.................................................................................................. 199 6.12.2 一个简单的 inetd 使用的服务器程序 hello inet service.......................... 199 6.12.3 /etc/services 和 /etc/inetd.conf 文件 ..................................................... 200 6.12.4 一个复杂一些的 inetd 服务器程序 ...................................................... 201 6.12.5 一个更加复杂的 inetd 服务器程序 ...................................................... 203 6.12.6 程序必须遵守的安全性准则............................................................... 205 6.12.7 小结.................................................................................................. 205 6.13 本章总结 .................................................................................................... 205 第七章 网络安全性.....................................................................................................206 7.1 网络安全简介 ................................................................................................206 7.1.1 网络安全的重要性................................................................................206 7.1.2 信息系统安全的脆弱性.........................................................................207 7.2 Linux 网络不安全的因素 ................................................................................209 7.3 Linux 程序员安全........................................................................................... 211 7.3.1 系统子程序 ..........................................................................................212 7.3.2 标准 C 函数库.......................................................................................214 7.3.3 书写安全的 C 程序................................................................................216 7.3.4 SUID/SGID 程序指导准则......................................................................217 7.3.5 root 程序的设计....................................................................................218 7.4 小结 ..............................................................................................................219
第八章 Ping 例程 .......................................................................................................220 8.1 Ping 命令简介 ................................................................................................220 8.2 Ping 的基本原理.............................................................................................220 8.3 小结 ..............................................................................................................221 第九章 tftp 例程.........................................................................................................222 9.1 tftp 协议简介..................................................................................................222 9.2 tftp 的使用 .....................................................................................................222 9.3 tftp 的原理 .....................................................................................................223 9.3 tftp 的基本结构 ..............................................................................................223 9.4 小节 ..............................................................................................................225 第十章 远程命令执行 .................................................................................................226 10.1 引言 ............................................................................................................226 10.2 rcmd 函数和 rshd 服务器...............................................................................227 10.3 rexec 函数和 rexecd 服务器...........................................................................233 第十一章 远程注册.....................................................................................................235 11.1 简介.............................................................................................................235 11.2 终端行律和伪终端........................................................................................235 11.3 终端方式字和控制终端.................................................................................239 11.4 rlogin 概述....................................................................................................242 11.5 窗口环境......................................................................................................242 11.6 流控制与伪终端方式字.................................................................................243 11.7 rlogin 客户程序.............................................................................................245 11.8 rlogin 服务器 ................................................................................................246 第十二章 远程过程调用..............................................................................................249 12.1 引言 ............................................................................................................249 12.2 远程过程调用模型 .......................................................................................249 12.3 传统过程调用和远程过程调用的比较 ...........................................................250 12.4 远程过程调用的定义....................................................................................252 12.5 远程过程调用的有关问题.............................................................................252 12.5.1 远程过程调用传送协议.......................................................................253 12.5.2 Sun RPC ...........................................................................................254 12.5.3 Xerox Courier ....................................................................................254 12.5.4 Apollo RPC........................................................................................255 12.6 stub 过程简介...............................................................................................256 12.7 rpcgen 简介 ..................................................................................................256 12.8 分布式程序生成的例子 ................................................................................257 12.8.1 我们如何能够构造出一个分布式应用程序...........................................257 12.9 小结 ............................................................................................................283 第十三章 远程磁带的访问 ..........................................................................................284 13.1 简介 ............................................................................................................284 13.2 Linux 磁带驱动器的处理 ..............................................................................285 13.3 rmt 协议.......................................................................................................285 13.4 rmt 服务器设计分析 .....................................................................................286 第十四章 WWW 上 HTTP 协议.................................................................................. 290
14.1 引言............................................................................................................ 290 14.2 HTTP 客户请求........................................................................................... 290 14.2.1 客户端 .............................................................................................. 290 14.2.2 服务器端........................................................................................... 290 14.2.3 Web 请求简介.................................................................................... 291 14.2.4 HTTP – HyperText Transfer Protocol 超文本传输协议 ........................... 295 14.3 Web 编程 .................................................................................................... 297 14.4 小结 ........................................................................................................... 301 附录 A 有关网络通信的服务和网络库函数...................................................................302 附录 B Vi 使用简介.....................................................................................................319 B.1 Vi 基本观念...................................................................................................319 B.1.1 进入与离开..........................................................................................319 B.1.2 Vi 输入模式 .........................................................................................319 B.2 Vi 基本编辑...................................................................................................320 B.2.1 删除与修改..........................................................................................320 B.3 Vi 进阶应用...................................................................................................320 B.3.1 移动光标 .............................................................................................320 B.3.2 进阶编辑命令 ......................................................................................322 B.3.3 文件命令 .............................................................................................322 附录 C Linux 下 C 语言使用与调试简介 ......................................................................324 C.1 C 语言编程 ...................................................................................................324 C.2 什么是 C? .....................................................................................................324 C.3 GNU C 编译器...............................................................................................324 C.3.1 使用 GCC ............................................................................................324 C.3.2 GCC 选项 ............................................................................................325 C.3.3 优化选项 .............................................................................................325 C.3.4 调试和剖析选项...................................................................................325 C.3.5 用 gdb 调试 GCC 程序..........................................................................326 C.4 另外的 C 编程工具 ........................................................................................330 C.4.1 Xxgdb..................................................................................................330 C.4.2 Calls ....................................................................................................331 C.4.3 cproto ..................................................................................................332 C.4.4 Indent ..................................................................................................333 C.4.5 Gprof...................................................................................................334 C.4.6 f2c 和 p2c ............................................................................................335 附录 D Ping 源码 ........................................................................................................336 附录 E TFTP 服务器程序源码 .....................................................................................362
第 1 章 概论 - 1 - 第一章 概论 1.1 网络的历史 所谓计算机网络就是通过通信线路互相连接的计算机的集合。它是由计算机及外围设 备,数据通讯和中断设备等构成的一个群体。目前,计算机网络大部分都是多台计算机之 间能互连,通信,达到资源共享目的的网络系统,它是电子计算机及其应用技术与通讯技 术日益发展且两者密切结合的产物。 计算机的通信通常有两种方式: 1.通过双绞线,同轴电缆,电话线或光缆等有形传输介质而互相实现通信; 2.通过激光,微波,地球卫星等无形介质实现无线通讯。 后者是今后发展的主要方向,因为 90 年代以后,出现了各种各样的微型电脑(笔记 本电脑),无线网络在以后一定会进一步发展。 计算机网络的研制开始于 60 年代中期,至今以有 20 多年的历史。其网络技术发展 及应用已经十分普及,已经渗透到各个领域,并正在日益显示着它对信息化社会所带来的 影响和深远的意义。 在网络发展上,最早出现的是分布在很大的地理范围内的远程网络 (Wide Area Network,WAN),例如美国国防部高级研究计划局首先研制的 ARPA 网,它从 1969 年 建立,至今已经发展成为跨越几大洲的巨型网络。 70 年代中期由于微型计算机的出现和微处理器的出现,以及短程通讯技术的迅猛发 展,两者相辅相成,又促进以微机为基础的各种局域网络(Local Area Network,LAN)的 飞快发展,1975 年美国 Xerox 公司首先推出了 Ethernet,与此时英国剑桥大学研制成剑桥 环网,他们是 LAN 的代表。 LAN 与 WAN 有所区别,其特点为: l 有限的地理范围,通常网内的计算机限于一栋大楼,楼群或一个企业及单位。 l 较高的通讯速率,大多在每秒 1-100M bps ,而 WAN 大多在几十 Kbps。 l 通讯介质多样。 l 通常为一个部门所拥有。 特别是 80 年代以来,以微机为基础,LAN 技术有了极其迅速的发展。 90 年代计算机网络化大趋势尤为明显。具称 1978 年全世界约有 700 万人每天使用计 算机,而到 1998 年上升到 5000 万人,目前全世界已经拥有超过一亿台的计算机,预计每 天上机人数可达 2 亿以上。计算机的性能价格比以每年 25%的速度在提高。微机的应用已 经渗透到国民经济的各个部门,乃至家庭和个人。这标志着正步入信息时代,世界范围内 的社会信息数据正在每年增长 40%到 45%的年增长率在增加,这就是迫切实现网络化的动 力源泉。据称,约有 65%的计算机要联网或已经联网,以求彼此通信,达到资源共享的目
- 2 - 标。 Linux 网络编程 90 年代计算机网络化更加向深度和广度方向发展。人们要求网络传输的内容范围增 加,诸如数据之外,还需传输声音,图形,图象和文字,这就是以网络为基础的多媒体技 术,使网络的应用广度更加扩大,并最终为信息化社会的实现所必须的网络连接奠定基础。 当前国际 LAN 的市场上,两雄称霸,龙争虎斗的局面,将可能持续相当长一段时间。 正如大家知道的那样,80 年代后期美国 Novell 公司先是以“一花独秀,压倒群芳” 之势占据了国际 LAN 市场 60%以上,一路领先,扶摇直上,尤其是 NetWare 386 V3.11 版 推出后,受到普遍的注目;随后,国际上的软件公司龙头老大 Microsoft 公司先后推出了 LAN Manager V1.0(即 LAN 3+ Open)、LAN Manager V2.0 和 V2.1,后来居上,成为世界 LAN 的两大支柱之一。1992 年 10 月 Microsoft 又抢先发布了 LAN Manager V2.2,以更加 领先于 Novell 的 NetWare 386 V3.11,但后者立即随后推出了 NetWare 4.0。可见“龙争虎 斗”,瓜分市场的情景。 Novel LAN 采取了“将网络协议软件与网络操作系统 NetWare 紧密结合起来”的设 计构想,可达到节省开销,提高运行效率之目标。Novell LAN 最大的特点是与其底层的网 卡的无关性,即是说 NetWare 可以虚拟的在所有流行的 LAN 上面运行,使它成为一个理 想的开发网络应用软件的平台,吸引了广大用户软件人员为之开发越来越多的网络应用软 件。反过来又推动其发展,同时 Novell LAN 采取了开放协议技术(OPT),允许各种网络 协议紧密结合,进而在 NetWare 386 V3.11 版中采用了 NLM 模块的组合技术,可以实现异 机种联网的难题。此外,Novell LAN 不需专用服务器,占用工作站内存最小,使用方便, 功能强,效率高,兼容性强,可靠性高,保密性强,容错性好。尤其在 NetWare 386 V3.11 版中实现了服务器软件的“分布式结构策略”、“横向信息共享”、“报文传送”技术、增添 了“TCP/IP 栈”、实现了“SNA 协议”和“开放式数据链路接口”等一系列新技术,使 Novell LAN 更深入人心,扩大了市场。 与此同时,Microsoft 公司的 LAN Manager V2.1 和 V2.2 版除了具备 Novel LAN 一些 通常的优点之外,还采用了“客户机/服务器”(Client/Server)的先进内网络体系结构, 以及基于多用户,多任务并发操作系统 OS/2 作为服务器的强大功能,并以 OS/2,Unix, VMS 和 Windows NT 作为开发平台,更便于异类机种联网和异网互连。由于 LAN Manager 与 Windows 紧密结合,使它有更好的性能价格比。 在网络化技术迅速发展的今天,使用性强的TCP/IP 协议立下了汗马功劳。起先,TCP/IP (Transmission Control Protocol/Internet Protocol)是美国国防部于 70 年代提出的重大决策 之一,将网络(当时主要是中大型机连成的网络)互连起来,并按 TCP/IP 协议实现异网 之间“数据通讯和资源共享”,接着美国国防部高级计划局(DARPA)于 70 年代末提出了 一系列的国际互连(Internet)技术。使得在科学研究,军事和社会生活迫切需要的大范围 实现资源共享和交换信息得以实现。 TCP/IP 协议的基本思想是通过网间连接器(Gateway)将各种不同的网络连接起来, 在各个网络的低层协议之上构造一个虚拟的大网,是用户与其他网的通讯就像与本网的主 机通讯一样方便。 国际标准化组织 (ISO) 对网络标准提出了 OSI/RM(开放系统互连七层协议的参考模 型),这七层自低向高分别为物理层,数据链路层,网络层,传输层,会话层,表示层和 应用层。而自此之前,DARPA 提出的 TCP/IP 仅仅提供了高四层标准,对低三层没有定义,
分享到:
收藏