`
放羊的星星
  • 浏览: 4867 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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
 
分享到:
评论

相关推荐

    socat-1.7.3.0-windows

    socat 被称为是NC的plus,plus版,号称NC的最强的衍生版本。socat是一款双向数据流通道工具。具有许多强大的功能:端口的连接、端口侦听、收发文件、传递shell、端口转发、端口扫描等 此为2018年二月最新Windows版本...

    socat-1.7.3.2-1.1.el7.x86_64.rpm

    socat-1.7.3.2-1.1.el7.x86_64.rpm安装包,linux下安装RabbitMQ所需依赖包

    socat-1.7.2.3-1.el6.x86_64.rpm

    socat-1.7.2.3-1.el6.x86_64.rpm

    socat-1.7.3.2-2.el7.x86_64.rpm.7z

    rabbitmq离线安装 - 语言库 erlang-21.2.6-1.el7.x86_64.rpm - 依赖 socat-1.7.3.2-2.el7.x86_64.rpm - rabbitmq 服务器 rabbitmq-server-3.7.13-1.el7.noarch.rpm

    factorish-syslog:一个基于 socat 的小型系统日志服务器

    工厂/系统日志关于一个非常简单的基于socat的 syslog 服务器,旨在侦听TCP 、 UDP或 UNIX 套接字/syslog/sock并将任何消息打印到stdout以便它们被日志系统接收,并且可以通过诸如工具进行访问。用法 $ docker run -d...

    socat-1.7.3.3.tar.gz

    这些数据通道包含文件、管道、设备(终端或调制解调器等)、插座(Unix,IP4,IP6 - raw,UDP,TCP)、SSL、SOCKS4客户端或代理CONNECT。 Socat支持广播和多播、抽象Unix sockets、Linux tun/tap、GNU readline 和 ...

    socat-1.7.1.0-1.el3.rf.x86_64.rpm

    RabbitMQ安装需要的安装包,socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6

    socat-1.7.3.2-2.el7.x86_64.zip

    socat-1.7.3.2 zip包中为rpm包

    socat1.7.2.1-windows.zip

    socat的地址类型很多,有ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,等等。 socat 官方文档 http://www.dest-unreach.org/socat/doc/socat.html#EXAMPLES socat LINUX版本下载 ...

    socat-1.7.3.2-5.el7.lux.x86_64.rpm

    linux7 系统安装rabbitmq必须的安装包socat-1.7.3.2-5.el7.lux.x86_64.rpm

    socat-1.7.4.1-1.el8.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    socat-1.5.0.0 类似于Netcat的工具

    类似于Netcat的工具,可以工作于许多协议之上,运行于文件、管道、设备(终端或调制解调器等等)、socket(Unix、IP4、IP6-raw、UDP、TCP)、Socks4客户端、代理服务器连接、或者SSL等等之间。它提供forking、...

    32+64位socat,Android版,arm+arm64,android手机可用,android反向shell工具

    如 IP、TCP、 UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。 android反向shell工具。 本zip包含socat arm版本 和 arm64版本,可以push到android设备运行。 例如: adb push socat /data/local...

    socat-1.7.0.1.tar.gz

    or a pseudo terminal), a socket (UNIX, IP4, IP6 - raw, UDP, TCP), an SSL socket, proxy CONNECT connection, a file descriptor (stdin etc.), the GNU line editor (readline), a program, or a ...

    socat-1.7.3.2-2.el7.x86_64.rpm

    使用方法请关注blog: https://blog.csdn.net/wenwst

    socat源码加了中文注释

    公司要求做socat源代码二次开发的时候,花了一周时间通读代码,写上了注释,添加了-M参数用于在端口无法打开的时候超时退出(不影响其他功能),在linux操作系统上编译通过,并做了测试

    socat-1.7.3.3-2.el8.x86_64.rpm

    安装rabbitmq时所需版本,三个资源已全部上传(这是其中一个,进我主页可以下其他两个),没有版本冲突,可以放心下载

    远程控制工具socat

    强烈推荐的远程控制工具 集成 nc lcx ,从国外网站下载下来的 杀毒软件不会认为是病毒...被控制端 socat tcp-connect:1234 exec:cmd,pty,stderr 控制端 socat tcp-listen:1234 - 这是远程控制的例子,其他自己研究吧

    socat-1.7.3.4-arm.tar.bz2

    socat1.7.3.4 交叉编译文件 ,交叉编译工具使用的是arm-linux-gnueabihf-gcc 4.9.支持imx6系列,直接可以运行的。

Global site tag (gtag.js) - Google Analytics