标签:
1.进程通信的方式
2.套接字在通信中的作用
3.进程的寻址方式
4.应用层协议
你每运行一个程序,都会有进程产生,可能是一个,也可能是多个。如果它只能自己一个人封闭孤单的运行,那就太无趣了。人大多数都想与朋友攀谈交流,进程也是如此。那么它们是如何做到的呢?
如果同一主机上运行的进程想互相通信,它们可以通过进程间通信机制来完成,这种机制是由操作系统提供的,就像是自己家乡的方言,同为老乡,交流自然没有任何问题了。那么问题来了,如果我想离开家乡,外出闯荡,与在不同主机上运行的进程通信该怎么办呢?俗话说,在家讲方言,在外说普通话。不同主机上运行的进程要对话,当然要用大家都明白的方式——消息交换,来进行了。不然让一个用win方言的进程与一个用MacOS方言的进程见面时相互说自家方言,岂不让人贻笑大方。那么消息交换是通过什么来进行的呢?答案是:套接字。
套接字=socket
进程间通信是利用socket发送/接受消息来实现的。
从图中不难看出,套接字相当于一个公用的中间语言,让不同的主机可以顺利通话。要让套接字可以成功的做个好翻译,传输基础设施需向进程提供相应的API,供其使用。这里就要涉及到传输协议的选择和相应参数的设置。我们暂不细说。
不同主机上运行的进程如何相互识别,你可能会说简单啊!每台主机不是都有IP吗?顺着IP去找不就行了吗?那门问题又来了,如果你的QQ想与你女朋友的QQ对话,可当信息依据你女朋友的IP地址传过去时,却发现你的女朋友又开了一个可以接受网络信息的进程——LOL客服端。那么,你的信息到底传给哪个进程呢?那你肯定会说传给QQ的网络进程啊,那到底哪个才是QQ的网络进程呢?对!这里我们还需要将相关进程标识一下,让别的进程发送的信息可以顺利到达目的进程。这就是我们所说的进程的标识符(不同主机上的进程相互通信,必须要有这个东西)。标识符由IP地址和端口号(Port number)组成。主机上的不同进程都会被分配相应的端口号,就像每户人家都被分配门牌号一样。比如说:HTTP Server的端口号为:80,Mail Sever的端口号为:25。
没有规矩,不成方圆。网络应用要想正常通信,必须要有好的协议来规范通信才行。网络应用要遵循应用层协议。应用层协议可分为公开协议和私有协议。公开协议由RFC(Request For Comments)定义,允许互操作,如HTTP、SMTP等。私有协议多数是P2P文件共享应用,都开发公司自己制定,非公开。
应用层协议主要是用来规范那些方面的呢?
a.消息的类型(type):请求消息,响应消息。(你必须知道对面是什么,才能做好万无一失的准备)
b.消息的语法(syntax)/格式:消息中有哪些字段,每个字段如何描述。
c.字段的语义(semantics):字段中信息的含义。
d.规则(rules):进程何时发送/响应消息等。
最后,让我们用HTTP协议作为例子,结束这篇文章:
图片看不懂没关系,百度一下,你就知道。
标签:
原文地址:http://blog.csdn.net/u014581901/article/details/50752849