第6章地址家族和名字解析
 
 要通过Wi n s o c k建立通信,必须了解如何利用指定的协议为工作站定址。本章将一一说明Wi n s o c k支持的协议以及各协议如何把一个指定家族的地址解析成网络上一台具体的机器。

6.1 IP
网际协议( Internet Protocol, IP)是一种用于互联网的网络协议.
从它的设计看来, I P是一个无连接的协议,不能保证数据投递万
无一失。两个比它高级的协议( T C P和U D P)用于依赖I P协议的数据通信。

6.1.1 TCP
面向连接的通信是通过“传输控制协议”(Transmission Control Protocol, TCP)来完成的。
T C P提供两台计算机之间的可靠无错的数据传输。应用程序利用T C P进行通信时,源和目标之间会建立一个虚拟连接。这个连接一旦建立,两台计算机之间就可以把数据当作一个双向字节流进行交换。

6.1.2 UDP
无连接通信是通过“用户数据报协议”(User Datagram Protocol, UDP)来完成的。U D P不保障可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。
数据传输方法采用的是数据报。
T C P和U D P两者都利用I P来进行数据传输,一般称为T C P / I P和U D P / I P。Wi n s o c k通过A F _ I N E T地址家族为I P通信定址,

6.1.3 定址

Wi n s o c k中,应用通过S O C K A D D R _ I N结构来指定I P地址和服务端口信息,该结构的格式如下:

struct sockaddr_in
{
 short  sin_family;
 u_short sin_port;
 struct in_addr sin_addr;
 char    sin_zero[8];
}

。从本质上说,端口号分为下面这三类:“已知”端口、已注册端口、动态和(或)私用端口。
■ 0 ~ 1 0 2 3由I A N A控制,是为固定服务保留的。
■ 1 0 2 4 ~ 4 9 1 5 1是I A N A列出来的、已注册的端口,供普通用户的普通用户进程或程序使
用。
■ 4 9 1 5 2 ~ 6 5 5 3 5是动态和(或)私用端口。
普通用户应用应该选择1 0 2 4 ~ 4 9 1 5 1之间的已注册端口,
S O C K A D D R _ I N结构的s i n _ a d d r字段用于把一个I P地址保存为一个4字节的数,它是无符号长整数类型。根据这个字段的不同用法,还可表示一个本地或远程I P地址。I P地址一般是
用“互联网标准点分表示法”(像a . b . c . d一样)指定的,每个字母代表一个字节数,从左到右分配一个4字节的无符号长整数。最后一个字段sin_ zero ,只充当填充项的职责,以使S O C K A D D R _ I N结构和S O C K A D D R结构的长度一样。

一个有用的、名为i n e t _ a d d r的支持函数,可把一个点式I P地址转换成一个3 2位的无符号长整数。它的定义如下:
unsigned long inet_addr(
const char FAR *cp
);
这个函数把I P地址当作一个按网络字节顺序排列的3 2位无符号长整数返回
1. 特殊地址
对于特定情况下的套接字行为,有两个特殊I P 地址可对它们产生影响。特殊地址I N A D D R _ A N Y允许服务器应用监听主机计算机上面每个网络接口上的客户机活动。一般情况下,在该地址绑定套接字和本地接口时,网络应用才利用这个地址来监听连接。如果你有一个多址系统,这个地址就允许一个独立应用接受发自多个接口的回应。特殊地址I N A D D R _ B R O A D C A S T用于在一个I P网络中发送广播U D P数据报。要使用这个特殊地址,需要应用设置套接字选项S O _ B R O A D C A S T。

2. 字节排序
针对“大头”(b i g - e n d i a n)和“小头”(l i t t l e - e n d i a n)形式的编号,不同的计算机处理器的表示方法有所不同,这由各自的设计决定。比如, Intel 86处理器上,用“小头”形式来表示多字节编号:字节的排序是从最无意义的字节到最有意义的字节。在计算机中把I P地址和端口号指定成多字节数时,这个数就按“主机字节”(h o s t - b y t e)顺序来表示。但是,如果在网络上指定I P地址和端口号,“互联网联网标准”指定多字节值必须用“大头”形式来表示
(从最有意义的字节到最无意义的字节),一般称之为“网络字节”(n e t w o r k - b y t e)顺序。

我们打算演示一下如何利用上面描述的i n e t _ a d d r 和h t o n s 函数来创建
S O C K A D D R _ I N结构。

SOCKETADDR_IN InternetAddr;
int nPortId = 5150;
InternetAddr.sin_family = AF_INET;
InternetAddr.sin_addr.s_addr = inet_addr("198.198.10.216");
InternetAddr.sin_port = htonl(nPortId);

6.1.4 创建套接字
创建一个I P套接字的好处是便于应用能够通过T C P、U D P和I P协议进行通信。如要用T C P协议打开一个I P套接字,需调用带有地址家族A F _ I N E T和套接字类型S O C K _ S T R E A M的s o c k e t函数或W S A S o c k e t函数,并把协议字段设成0,方式如下:
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,0);

s = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
要利用U D P协议打开I P套接字,只须指定套接字类型,用这个指定的套接字类型代替s o c k e t函数中的S O C K _ S T R E A M和上面的W S A S o c k e t调用。还可以打开一个套接字通过I P直接通信。这是把套接字类型设成S O C K _ R AW来完成的。

6.1.5 名字解析
Wi n s o c k应用打算通过I P和主机通信时,必须知道这个主机的I P地址。依用户看来, I P地址是不容易记的。在指定机器时,许多人更愿意利用一个易记的、友好的主机名而不是I P地址。Wi n s o c k提供了两个支持函数,它们有助于用户把一个主机名解析成I P地址。
Wi n d o w s套接字g e t h o s t b y n a m e和WSAAsynGetHostByName API函数从主机数据库中取回与指定的主机名对应的主机信息。两个函数均返回一个H O S T E N T结构.


6.3 IPX/SPX
“互联网包交换”(I P X)协议是一个常见协议,一般为承担Novell NetWa r e客户机/服务器联网服务的计算机所用。。I P X提供两个进程间的无连接通信;因此,如果一个工作站发出一个数据包,该协议无法保证这个数据包会准确无误地投递到目标地点。如果应用程序需要数据投递保证,但仍坚持使用I P X,它就会选用一个比I P X高级的协议,比如说“顺序分组交换”
(S P X)和SPX II协议,这两个协议中, S P X包通过I P X发送。Wi n s o c k为应用程序提供了在Wi n d o w s平台上通过I P X进行通信的能力(它们是Windows 95、Windows 98、Windows NT以及Windows 2000)

6.6 ATM
异步传输模式(AT M)协议是目前已有的最新协议之一, Windows 98和Windows 2000平台上的Winsock 2均支持它。AT M通常用于L A N和WA N上的高速联网,也用于各种类型的通信,比如说要求高速通信的语音、视频和数据等。一般说来, AT M利用网络上的虚拟连接(V C)来提供服务质量( Q O S)保证。正如大家即将看到的那样,Wi n s o c k能够通过AT M地址家族来使用AT M网络上的虚拟连接。AT M网络(如图6 - 1所示)一般由通过交换机(它们将
AT M网络桥接在一起)连接的端点(或计算机)构成。
针对AT M协议编程时,需要明白这几点。首先, AT M是一个媒体类型,而不是一个真正的协议。也就是说, AT M类似于直接在以太网上写入以太帧。和以太网一样, AT M协议没有提供流控制。它是一个面向连接的协议,要么提供消息模式,要么提供流模式。这还意味着如果数据不能快速发送出去,发送应用则可能溢出本地缓冲。同样地,接收应用必须频繁投递收到的数据:否则,接收缓冲填满之时,任何一个另外接入的数据都可能被丢弃。如果你的应用需要流控制,方法之一是在AT M上使用I P协议(它只是运行于AT M网络上的I P协议)。
这样一来,应用便紧跟在上面描述的I P地址家族之后。当然, AT M的确提供了比I P好的一些好处,比如说“根式多播方案”(第1 2章将对此进行说明);然而,要根据自己的应用需要来决定最适合你的那种协议。

6.8 小结
这一章论述了Wi n s o c k支持的协议地址家族,说明了各个家族特有的定址属性。针对每个地址家族,我们还讨论了如何创建套接字和如何设置套接字地址结构,以便开始通过协议进行通信。下一章,我们将描述适用于Wi n s o c k的基本通信技术,并把它们应用到本章讨论的所有地址家族上。

Posted on 2006-09-06 20:04 艾凡赫 阅读(379) 评论(0)  编辑 收藏 引用 所属分类: 网络编程

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理