深入浅出理解套接字

来源:互联网 发布:mac 10.9 安装xcode 编辑:程序博客网 时间:2024/05/21 19:31
      

深入浅出理解套接字

套接字是实现网络通信的底层原理,理解套接字是网络编程的基础。下面,我试着用通俗的语言来描述利用套接字实现网络通信的过程,不对的地方请各位大虾指正。

首先,网络通信是谁和谁的通信呢?常见说法有两种,一是客户端和服务器端,二是主机和主机之间。这两种说法都是正确的,但是比较笼统,不利于理解网络通信本质。实际上,是一台主机上的进程和另一台主机上的进程进行的数据传输。那好,假设我们有两台主机A和B,它们通过网络连接。

现在主机A上有一个进程ProcessA,主机B上有一个进程ProcessB,ProcessA为客户端进程,ProcessB为服务器端进程。这两个进程之间如何通信呢?

很显然,要经过如下三个步骤:1,ProcessA请求连接ProcessB。

2,ProcessB接受ProcessA连接。

3,建立连接,开始通信。

看起来这三个步骤很简单,但是要在网络中实现这几步可不是一件简单的事。首先,对ProcessA来说,ProcessB的地址是什么呢?是主机B的IP地址吗?显然IP是必须要有的,但只有IP是远远不够的,为什么?因为IP地址只是唯一标示了主机,但一台主机上有很多进程,还必须明确标示出是哪个进程才行,这就要用到端口的概念。也就是说,端口是在网络通信时,标示主机上的进程的一个数字,通常为一个16位的整数。这样一来,我们用一个地址结构{IP:端口}就可以让ProcessA找到ProcessB啦。我们将这种地址结构称为套接字地址。这就解决了第一个步骤。

现在,我们假设ProcessA已经和ProcessB建立了连接。那么它们如何传送数据呢?连接建好就相当于两个进程间的管道连通了。那么,进程A可能既要往本地磁盘文件中写数据,又要给ProcessB传数据。它怎么确定数据往哪传呢,很简单,我们在ProcessA中给这个连接建一个标示符,像文件标示符一样,称之为套接字。套接字和特定的网络连接绑定。网络连接用如下数据结构标示:{IPA:端口A,IPB:端口B}。这个数据结构称为套接字地址对。现在我们知道了,套接字就是一种特殊的文件,它和套接字地址对绑定以传输数据。

回头来看第二步。ProcessB肯定也是先建立一个套接字,但是,这个套接字比较特殊,因为它不能直接和一个套接字地址对绑定。它只能先和自己的套接字地址绑定。但是这个套接字可以收到发给自己的连接请求,为什么呢?因为它已经有套接字地址了。等ProcessA发送请求连接数据过来后,连接数据中有ProcessA中的套接字的套接字地址。这样,ProcessB中的套接字就也和套接字地址对绑定了。下面,二者就可以自由通信啦!

 

原创粉丝点击