Socat套接字中的TCP编程模式-与UDP编程模式-

TCP编程模式针对面向连接的网络应用,这类应用在传输层采用的是TCP协议。通信双方在传输数据前需要建立连接,在传输数据结束后需要释放连接。服务器是提供某种网络服务的应用进程,它通过熟知端口号向客户机提供服务。服务器的熟知端口始终处于侦听状态,不断检查是否有客户机发送的连接请求。客户机与服务器在建立连接时经过三次握手:客户机首先向服务器发送连接请求,服务器接收连接请求并向客户机返回响应,客户机再向服务器发送对该响应的确认。

TCP编程模式相对固定。客户机与服务器之间要进行通信,需要依次调用Socket接口提供的不同函数。但是,服务器编程比客户机编程要复杂得多,这是因为服务器需要并发处理多个服务请求。图2-8给出了TCP编程模式的工作流程。其中,客户机首先调用socket()函数建立套接字,然后调用connect()函数请求与服务器建立连接,在连接建立后可以调用send()与recv()函数分别发送与接收数据,最后调用closesocket()函数关闭套接字。

服务器首先调用socket()函数建立套接字,然后调用bind()函数将某个端口与套接字相绑定,再调用listen()函数在套接字绑定的端口上侦听连接建立请求。当服务器侦听到有连接建立请求到达时,调用accept()函数创建新的临时套接字与客户机建立连接,同时服务器使原有的套接字返回侦听状态。服务器使用新创建的子线程与客户机建立连接。在连接建立后可以调用send()与recv()函数分别发送与接收数据,最后调用closesocket()函数关闭临时套接字与原有套接字。

客户机向服务器发送服务请求完全是随机的,并且可能有多个客户机同时发送请求。服务器需要随时通过熟知端口来侦听服务请求,并且要具备同时处理多个并发请求的能力,这是服务器与客户机设计中的最大区别。服务器并发处理的解决方案基本分为两种:并发服务器与重复服务器。这两种方案分别适合于不同的服务类型。其中,并发服务器(Concurrent Server)采用的是工作在后台的守护进程(daemon),当有服务请求到达时将会激活该进程来进行处理。

并发服务器本身始终要处于等待并侦听的状态。当服务器接收到客户机发送的服务请求时,它根据该请求的进程号去激活子进程提供服务,而服务器自身会回到等待状态继续侦听请求。在这里,并发服务器自身被称为主(master)服务器,它激活的子进程被称为从(slave)服务器。因此,服务器必须拥有一个全网熟知的进程地址。图2-9给出了并发服务器的工作原理。由于不同的从服务器可以并发、独立地处理不同客户机的服务请求,因此并发服务器比较适合于面向连接的服务类型。


(点击查看大图)图2-8 TCP编程模式的工作流程
UDP编程模式

UDP编程模式针对无连接的网络应用,这类应用在传输层采用的是UDP协议,通信双方在传输数据前不需要建立连接。服务器是提供某种网络服务的应用进程,它通过熟知端口向客户机提供服务。服务器的熟知端口始终处于侦听状态,不断检查是否有客户机发送的连接请求。服务器采用重复服务器方式处理多个服务请求。

UDP编程模式也相对固定。客户机与服务器之间进行通信,需要依次调用Socket接口提供的不同函数。但是,服务器编程比客户机编程要复杂得多。图2-10给出了UDP编程模式的工作流程。客户机与服务器都首先调用socket()函数建立套接字,然后调用sendto()与recvfrom()函数分别发送或接收数据,最后调用closesocket()函数关闭套接字。服务器在发送与接收数据之前,调用bind()函数将某个端口与套接字绑定。



图2-10 UDP编程模式的工作流程
重复服务器(Interactive Server)采用请求队列来存储到达的服务请求,并根据先到先服务的原则顺序处理服务请求。重复服务器处理客户机请求的数量受队列长度的限制,但是可以有效控制对服务请求的处理时间,因此它比较适合于无连接的服务类型。图2-11给出了重复服务器的工作原理。客户机与服务器首先形成自己的半相关的三元组,客户机根据服务器的熟知端口建立全相关的五元组。

图2-11 重复服务器的工作原理
摘自http://book.51cto.com/art/201007/209377.htm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值