Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1499407
  • 博文数量: 148
  • 博客积分: 2234
  • 博客等级: 大尉
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 21:34
个人简介

未来很长。

文章存档

2017年(7)

2016年(4)

2015年(1)

2014年(6)

2013年(31)

2012年(99)

分类: 系统运维

2012-08-14 20:55:11

将电话系统与面向连接的 Socket 机制相比,有着惊人相似的地方。以一个国家级的电
话网为例。电话的通话双方相当于相互通信的两个进程;通话双方所在的地区(享有一个
全局唯一的区号)相当于一个网络,区号是它的网络地址;区内的一个单位的交换机相当
于一台主机,主机分配给每个用户的局内号码相当于 Socket 号(下面将谈到)
任何用户在通话之前,首先要占有一部电话机,相当于申请一个 Socket 号;同时要知
道对方的电话号码,相当于对方有一个 Socket。然后向对方拨号呼叫,相当于发出链接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)
。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求)
,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是向电话机发出信号和从电话机接受信号的过程,相当于向 Socket 发送数据和从 Socket 接受数据。通话结束后,一方挂起电话机,相当于关闭 Socket撤销链接。

在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的
过程、话音传输的过程以及整个电话系统的技术细节对它都是透明的,这也与 Socket 机制
非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。
至此,我们对 Socket 进行了直观的描述。抽象出来,Socket 实质上提供了进程通信的
端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互
通信的。正如打电话之前,双方必须各自拥有一台电话机一样。

每一个 Socket 都用一个半相关描述:
{协议,本地地址,本地端口}
一个完整的 Socket 则用一个相关描述
{协议,本地地址,本地端口,远程地址,远程端口}
每一个 Socket 有一个本地的唯一 Socket 号,由操作系统分配。
最重要的是,Socket 是面向客户-服务器模型而设计的,针对客户和服务器程序提供
不同的 Socket 系统调用。客户随机申请一个 Socket 号(相当于一个想打电话的人可以在任何一台入网的电话上拨叫呼叫)
;服务器拥有全局公认的 Socket,任何客户都可以向它
发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)
Socket 利用客户— 服务器模式巧妙的解决了进程之间建立通信连接的问题。服务器
Socket 为全局所公认非常重要。两个完全随机的用户进程之间,因为没有任何一方的 Socket
是固定的,就像打电话却不知道别人的电话号码,要通话是不可能的。

阅读(3220) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

hfm_honey2012-08-16 14:08:02

恩,谢谢您的建议,可能我的比喻还不是那么的形象,我会好好努力,进一步学习!谢谢您!

Bean_lee2012-08-15 21:51:46

UNP2中有一些很有意思的比喻,和打电话进行比较的。
socket 好比电话机
bind 好比分了个电话号码
listen 好比装了响铃的功能。
connect 好比拨号功能,很有意思。