简单的客户-服务器交互过程

来源:互联网 发布:数据之巅涂子沛云盘 编辑:程序博客网 时间:2024/06/15 01:53

一组服务通常由一组原语(primitive)操作来描述。如果协议栈位于操作系统中(大多数是这种情况),则这些服务原语通常是一些系统调用。这些系统调用会进入到内核模式,然后在内核模式中控制操作系统,让操作系统发送必要的分组(包,packet)。

 

在一个简单的面向连接的客户-服务器模型中,可以考虑的原语有:

LISTEN:监听。属于阻塞操作,等待一个进入的连接。服务器执行。

CONNECT:连接。与一个正在等待的对等体建立连接。客户机执行。

RECEIVE:接收。属于阻塞操作,等待一个进入的报文。服务器/客户机执行。

SEND:发送。给对等体发送一个报文。客户机/服务器执行。

DISCONNECT:断链。终止一个连接。客户机/服务器执行。

 

过程如下:

0.服务器首先执行LISTEN,表明已经准备好接收客户发来的连接CONNECT.服务器在执行完LISTEN后,服务器进程被阻塞,直到有连接CONNECT请求到来为止。

1.客户机执行CONNECT,以与服务器建立连接。这个过程,客户机需要知道服务器,也就是目标的地址,如ip地址和端口。客户机在执行完CONNECT后,客户机进程被阻塞,直到有应答为止。

2.服务器收到CONNECT请求时,先后做两件事情:(1)解除监听进程的阻塞;(2)向客户机发送确认ACK报文。通常情况下,执行完(1)后,服务器就会马上执行RECEIVE,以等待客户机的数据请求,而这个时候ACK消息往往还没有到达客户端。RECEIVE调用会阻塞服务器

3.客户机收到ACK报文后,解除阻塞恢复运行状态。此时,客户机和服务器均处于运行状态,一个CONNECT连接建立完毕。连接建立完后,客户端执行SEND,向服务器发送自己的数据请求,并执行RECEIVE,等待服务器的应答。

4.服务器收到SEND后,解除阻塞,处理请求的数据。处理完成之后,利用SEND将请求的答案送回给客户。

5.客户机收到ACK应答后,解除阻塞,然后检查服务器送来的答案。如果客户机还有请求,则继续发送,循环执行3、4。如果客户的任务已经完成,则向服务器发送DISCONNECT断链请求,同时客户机被挂起。

6.服务器收到DISCONNECT后,也会向客户机发送DISCONNECT作为响应,同时释放该连接。

7.客户机收到DISCONNECT后,客户进程恢复运行,该连接被正式断开。

 

 

 

原创粉丝点击