- 2 -
符只是一个和打开的文件相关联的整数。但是(注意后面的话),这个文件可能是一个网络连接,
FIFO,管道,终端,磁盘上的文件或者什么其它的东西。Unix 中所有的东西就是文件!所以,
你想和Internet上别的程序通讯的时候,你将要使用到文件描述符。你必须理解刚才的话。现
在你脑海中或许冒出这样的念头:“那么我从哪里得到网络通讯的文件描述符呢?”,这个问
题无论如何我都要回答:你利用系统调用 socket(),它返回套接字描述符 (socket descriptor),
然后你再通过它来进行send() 和 recv()调用。“但是...”,你可能有很大的疑惑,“如果它是个文
件描述符,那么为什 么不用一般调用read()和write()来进行套接字通讯?”简单的答案是:“你
可以使用!”。详细的答案是:“你可以,但是使用send()和recv()让你更好的控制数据传输。”
存在这样一个情况:在我们的世界上,有很多种套接字。有DARPA Internet 地址 (Internet 套
接字),本地节点的路径名 (Unix套接字),CCITT X.25地址 (你可以将X.25 套接字完全忽略)。
也许在你的Unix 机器上还有其它的。我们在这里只讲第一种:Internet 套接字。
--------------------------------------------------------------------------------
Internet 套接字的两种类型
什么意思?有两种类型的Internet 套接字?是的。不,我在撒谎。其实还有很多,但是
我可不想吓着你。我们这里只讲两种。除了这些, 我打算另外介绍的 "Raw Sockets" 也是非
常强大的,很值得查阅。
那么这两种类型是什么呢?一种是"Stream Sockets"(流格式),另外一种是"Datagram Soc
kets"(数据包格式)。我们以后谈到它们的时候也会用到 "SOCK_STREAM" 和 "SOCK_DGR
AM"。数据报套接字有时也叫“无连接套接字”(如果你确实要连接的时候可以用connect()。) 流
式套接字是可靠的双向通讯的数据流。如果你向套接字按顺序输出“1,2”,那么它们将按顺
序“1,2”到达另一边。它们是无错误的传递的,有自己的错误控制,在此不讨论。
有什么在使用流式套接字?你可能听说过 telnet,不是吗?它就使用流式套接字。你需要
你所输入的字符按顺序到达,不是吗?同样,WWW浏览器使用的 HTTP 协议也使用它们来下
载页面。实际上,当你通过端口80 telnet 到一个 WWW 站点,然后输入 “GET pagename” 的
时候,你也可以得到 HTML 的内容。为什么流式套接字可以达到高质量的数据传输?这是因
为它使用了“传输控制协议 (The Transmission Control Protocol)”,也叫 “TCP” (请参考 RFC-79
3 获得详细资料。)TCP 控制你的数据按顺序到达并且没有错
误。你也许听到 “TCP” 是因为听到过 “TCP/IP”。这里的 IP 是指“Internet 协议”(请参考 RFC-79
1。) IP 只是处理 Internet 路由而已。
那么数据报套接字呢?为什么它叫无连接呢?为什么它是不可靠的呢?有这样的一些事实:
如果你发送一个数据报,它可能会到达,它可能次序颠倒了。如果它到达,那么在这个包的
内部是无错误的。数据报也使用 IP 作路由,但是它不使用 TCP。它使用“用户数据报协议 (Us
er Datagram Protocol)”,也叫 “UDP” (请参考 RFC-768。)
为什么它们是无连接的呢?主要是因为它并不象流式套接字那样维持一个连接。你只要建
立一个包,构造一个有目标信息的IP 头,然后发出去。无需连接。它们通常使用于传输包-包
信息。简单的应用程序有:tftp, bootp等等。
你也许会想:“假如数据丢失了这些程序如何正常工作?”我的朋友,每个程序在 UDP 上有
自己的协议。例如,tftp 协议每发出的一个被接受到包,收到者必须发回一个包来说“我收到
了!” (一个“命令正确应答”也叫“ACK” 包)。如果在一定时间内(例如5秒),发送方没有收到应
答,它将重新发送,直到得到 ACK。这一ACK过程在实现 SOCK_DGRAM 应用程序的时候非
常重要。
--------------------------------------------------------------------------------
网络理论
既然我刚才提到了协议层,那么现在是讨论网络究竟如何工作和一些 关于 SOCK_DGRA
M 包是如何建立的例子。当然,你也可以跳过这一段, 如果你认为已经熟悉的话。
现在是学习数据封装 (Data Encapsulation) 的时候了!它非常非常重 要。它重要性重要到
第 2 页 共 24 页
评论1
最新资源