一.Socket:
1.Socket的中文是“套接字”。
2.TCP/IP协议使用的套接字分为3类:流式套接字、 数据报套接字、 原始套接字。
(1)流式套接字:SOCK——STREAM
向应用提供面向连接的、可靠的通信流,数据发送无差错、无重复且保证接收到数据的顺序性。
流式套接字最典型的的应用是BBS和HTTP服务。以BBS应用为例,用户通过TELNET协议和服务器建立连接,在浏览论坛帖子的交互过程中,数据总是顺序地在源端和目的端之间传输的。
流式套接字的通信能力是有TCP协议保证,
(2)数据报套接字:SOCK--DGRAM
向应用提供的是无连接的服务。数据以报文的形式发送,且不能保证数据的无差错和顺序到达。使用数据报套接字的例子包括DNS(Domain Name Service域名服务)和NFS(网络文件系统)等。
数据报套接字的一个显著优点是在于它的开销较小,适合于网络广播和组播等需要一对多发送数据的场合和频繁交互的应用(如DNS)。数据包套接字依赖UDP协议提供服务,这是他具有上诉属性的原因。
进程要正常工作,而数据报套接字不能保证传输的正确性,因此应用程序内必须建有差错消除机制,广泛采用的策略是发送端确定一个等待时间,如果在等待时间内没有接受接收端的确定报文,就接着发送欲发送的报文,直到接受接收端的确认为止。
(3).原始套接字--SOCK--RAW
应用程序中一般极少使用原始套接字。它功能强大,但操作比较复杂。它可以访问底层的协议(如IP,ICMP),一般用于协议的开发。常用的DOS程序ping可以用原始套接字实现。
二.客户机/服务器模式
TCP/IP应用的主要工作模式是客户机/服务器(Client/Server,简称C/S模式)在两个不同进程的通信过程中,一方发出服务请求,一方提供服务,通常称他们为“客户进程”和“服务进程”。显然,两个进程之间的通信实际上是基于通信协议的进程的同步过程,服务过程作为资源的提供者,为众多主机上的客户进程提供服务,服务进程要先于客户进程开启,在某一确定的网络地址(IP地址+端口号)等待客户进程的请求,如有请求到达,服务进程采取某种方式(并发服务或者重复服务)为客户进程提供服务,直到客户进程关闭,然后服务进程继续等待下一个请求服务的进程。
服务器通常采用并发服务的方式。所谓并发服务,就是服务进程在有客户请求到来时,激活新的进程来专门为此客户请求提供服务,并在客户终止请求后杀死该进程,与此同时,原先的进程可以继续在原来的端口等待下一个客户的连接。Socket编程接口为新的请求创建专门的服“数据套接字”,并发服务器根据该套接字创建专门的服务进程。并发服务的最大优点是及时响应请求,虽然创建新进程会增加系统开销。与此相对应的是重复服务,它利用“数据套接字”,在监听的进程上直接进行服务。
三.流式套接字的工作流程:
服务器
|
创建流式套接字
|
将S和本地地址和端口绑定 客户机
| |
监听,等待连接请求 创建流式套接字
--------| |
|接受客户连接,创建客户套接字ns 《---建立连接---》利用CS和远程服务器建立连接
| | |
|利用ns和客户进程通信,提供服务 《--请求/应答--》利用CS和服务器进程通信,
|(是否激活新进程依靠服务器类型而定) 完成数据传输
| | |
|关闭NS,如果是并发服务,还需要退出该进程 关闭套接字CS,结束TCP会话
|--- >|
关闭套接字,停止服务
四.数据报套接字服务的工作流程:
服务器 客户机
| |
创建数据报套接字S 创建流式套接字CS
| |
将S与本地地址和端口绑定 利用CS和远程服务器进行连接
| |
相应客户请求,完成数据传输 利用CS和服务器进程通信,完成数据传输
| |
关闭套接字S,停止服务 关闭套接字CS,结束UDP会话
五.堵塞和非堵塞:
Socket调用有两种基本模式:堵塞模式和非堵塞模式。
堵塞模式:进程调用某一Socket函数后由于某种原因不能马上完成,这是调用进程就一直等待,直到函数返回为止。
非堵塞模式在调用Socket函数后马上返回,等待调用完成时系统自动会以消息的方式通知调用进程,绝大部分Bekeley Socket调用都是堵塞调用,由于UNIX是抢先式多任务操作系统,在进程阻塞时,系统会将CPU的使用权交给等到的其它进程。这样不会堵塞其它进程的执行。而WINDOWS操作系统是非抢占式的,进程不会主动放弃对CPU的控制权,因此一个等待阻塞调用返回的进程会阻塞整个系统。Windows Socket规范根据WINDOWS平台的具体特点,在BSD Socket基础上扩充了非阻塞的Socket调用模式,使Socket编程更加符合Windows系统消息驱动的特性
1.Socket的中文是“套接字”。
2.TCP/IP协议使用的套接字分为3类:流式套接字、 数据报套接字、 原始套接字。
(1)流式套接字:SOCK——STREAM
向应用提供面向连接的、可靠的通信流,数据发送无差错、无重复且保证接收到数据的顺序性。
流式套接字最典型的的应用是BBS和HTTP服务。以BBS应用为例,用户通过TELNET协议和服务器建立连接,在浏览论坛帖子的交互过程中,数据总是顺序地在源端和目的端之间传输的。
流式套接字的通信能力是有TCP协议保证,
(2)数据报套接字:SOCK--DGRAM
向应用提供的是无连接的服务。数据以报文的形式发送,且不能保证数据的无差错和顺序到达。使用数据报套接字的例子包括DNS(Domain Name Service域名服务)和NFS(网络文件系统)等。
数据报套接字的一个显著优点是在于它的开销较小,适合于网络广播和组播等需要一对多发送数据的场合和频繁交互的应用(如DNS)。数据包套接字依赖UDP协议提供服务,这是他具有上诉属性的原因。
进程要正常工作,而数据报套接字不能保证传输的正确性,因此应用程序内必须建有差错消除机制,广泛采用的策略是发送端确定一个等待时间,如果在等待时间内没有接受接收端的确定报文,就接着发送欲发送的报文,直到接受接收端的确认为止。
(3).原始套接字--SOCK--RAW
应用程序中一般极少使用原始套接字。它功能强大,但操作比较复杂。它可以访问底层的协议(如IP,ICMP),一般用于协议的开发。常用的DOS程序ping可以用原始套接字实现。
二.客户机/服务器模式
TCP/IP应用的主要工作模式是客户机/服务器(Client/Server,简称C/S模式)在两个不同进程的通信过程中,一方发出服务请求,一方提供服务,通常称他们为“客户进程”和“服务进程”。显然,两个进程之间的通信实际上是基于通信协议的进程的同步过程,服务过程作为资源的提供者,为众多主机上的客户进程提供服务,服务进程要先于客户进程开启,在某一确定的网络地址(IP地址+端口号)等待客户进程的请求,如有请求到达,服务进程采取某种方式(并发服务或者重复服务)为客户进程提供服务,直到客户进程关闭,然后服务进程继续等待下一个请求服务的进程。
服务器通常采用并发服务的方式。所谓并发服务,就是服务进程在有客户请求到来时,激活新的进程来专门为此客户请求提供服务,并在客户终止请求后杀死该进程,与此同时,原先的进程可以继续在原来的端口等待下一个客户的连接。Socket编程接口为新的请求创建专门的服“数据套接字”,并发服务器根据该套接字创建专门的服务进程。并发服务的最大优点是及时响应请求,虽然创建新进程会增加系统开销。与此相对应的是重复服务,它利用“数据套接字”,在监听的进程上直接进行服务。
三.流式套接字的工作流程:
服务器
|
创建流式套接字
|
将S和本地地址和端口绑定 客户机
| |
监听,等待连接请求 创建流式套接字
--------| |
|接受客户连接,创建客户套接字ns 《---建立连接---》利用CS和远程服务器建立连接
| | |
|利用ns和客户进程通信,提供服务 《--请求/应答--》利用CS和服务器进程通信,
|(是否激活新进程依靠服务器类型而定) 完成数据传输
| | |
|关闭NS,如果是并发服务,还需要退出该进程 关闭套接字CS,结束TCP会话
|--- >|
关闭套接字,停止服务
四.数据报套接字服务的工作流程:
服务器
| |
创建数据报套接字S 创建流式套接字CS
| |
将S与本地地址和端口绑定 利用CS和远程服务器进行连接
| |
相应客户请求,完成数据传输 利用CS和服务器进程通信,完成数据传输
| |
关闭套接字S,停止服务 关闭套接字CS,结束UDP会话
五.堵塞和非堵塞:
Socket调用有两种基本模式:堵塞模式和非堵塞模式。
堵塞模式:进程调用某一Socket函数后由于某种原因不能马上完成,这是调用进程就一直等待,直到函数返回为止。
非堵塞模式在调用Socket函数后马上返回,等待调用完成时系统自动会以消息的方式通知调用进程,绝大部分Bekeley Socket调用都是堵塞调用,由于UNIX是抢先式多任务操作系统,在进程阻塞时,系统会将CPU的使用权交给等到的其它进程。这样不会堵塞其它进程的执行。而WINDOWS操作系统是非抢占式的,进程不会主动放弃对CPU的控制权,因此一个等待阻塞调用返回的进程会阻塞整个系统。Windows Socket规范根据WINDOWS平台的具体特点,在BSD Socket基础上扩充了非阻塞的Socket调用模式,使Socket编程更加符合Windows系统消息驱动的特性
2343





