• TCP/IP通信程序设计的丰富多样性


     

    TCP/IP通信程序设计的丰富多样性



    刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程
    序,据此一些人可能会认为TCP/IP编程很简单。其实不然,
    TCP/IP
    编程具有较为丰富的内容。其编程的丰富性主要体现在
    通信方式和报文格式的多样性上。


    一。通信方式

    主要有以下三大类:

    (
    )SERVER/CLIENT方式

    1.
    一个Client方连接一个Server方,或称点对点(peer to peer)
    2.
    多个Client方连接一个Server方,这也是通常的并发服务器方式。
    3.
    一个Client方连接多个Server方,这种方式很少见,主要
    用于一个客户向多个服务器发送请求情况。


    (
    )连接方式

    1.
    长连接

    Client
    方与Server方先建立通讯连接,连接建立后不断开,
    然后再进行报文发送和接收。这种方式下由于通讯连接一直
    存在,可以用下面命令查看连接是否建立:

    netstat –f inet|grep 
    端口号(5678)

    此种方式常用于点对点通讯。


    2.
    短连接

    Client
    方与Server每进行一次报文收发交易时才进行通讯连
    接,交易完毕后立即断开连接。此种方式常用于一点对多点
    通讯,比如多个Client连接一个Server.


    (
    )发送接收方式

    1.
    异步

    报文发送和接收是分开的,相互独立的,互不影响。这种方
    式又分两种情况:

    (1)
    异步双工:接收和发送在同一个程序中,有两个不同的
    子进程分别负责发送和接收
    (2)
    异步单工:接收和发送是用两个不同的程序来完成。

    2.
    同步

    报文发送和接收是同步进行,既报文发送后等待接收返回报文。
    同步方式一般需要考虑超时问题,即报文发上去后不能无限等
    待,需要设定超时时间,超过该时间发送方不再等待读返回报
    文,直接通知超时返回。 


    实际通信方式是这三类通信方式的组合。比如一般书上提供的
    TCP/IP
    范例程序大都是同步短连接的SERVER/CLIENT程序。有的
    组合是基本不用的,比较常用的有价值的组合是以下几种:

    同步短连接Server/Client
    同步长连接Server/Client
    异步短连接Server/Client
    异步长连接双工Server/Client
    异步长连接单工Server/Client

    其中异步长连接双工是最为复杂的一种通信方式,有时候经
    常会出现在不同银行或不同城市之间的两套系统之间的通信。
    比如金卡工程。由于这几种通信方式比较固定,所以可以预
    先编制这几种通信方式的模板程序。


    .报文格式

    通信报文格式多样性更多,相应地就必须设计对应的读写报文的接
    收和发送报文函数。

    (
    )阻塞与非阻塞方式 

    1.
    非阻塞方式

    读函数不停地进行读动作,如果没有报文接收到,等待一段时间后
    超时返回,这种情况一般需要指定超时时间。

    2.
    阻塞方式

    如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。



    (
    )循环读写方式
     

    1.
    一次直接读写报文

    在一次接收或发送报文动作中一次性不加分别地全部读取或全部
    发送报文字节。

    2.
    不指定长度循环读写

    这一般发生在短连接进程中,受网络路由等限制,一次较长的报
    文可能在网络传输过程中被分解成了好几个包。一次读取可能不
    能全部读完一次报文,这就需要循环读报文,直到读完为止。

    3.
    带长度报文头循环读写

    这种情况一般是在长连接进程中,由于在长连接中没有条件能够
    判断循环读写什么时候结束,所以必须要加长度报文头。读函数
    先是读取报文头的长度,再根据这个长度去读报文.实际情况中,
    报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须
    转换成ASCII,常见的报文头码制有:
    (1)n
    个字节的ASCII
    (2)n
    个字节的BCD
    (3)n
    个字节的网络整型码



    以上是几种比较典型的读写报文方式,可以与通信方式模板一起
    预先提供一些典型的API读写函数。当然在实际问题中,可能还
    必须编写与对方报文格式配套的读写API.

     

     

    长连接 短连接 区别

     

     

    1. 长连接与短连接是对tcp协议而言的,tcp存在建立和释放,udp本身就不需要连接。

    2. tcp建立连接需要三次握手 假设客户机a要连接服务器b,经过下面三个步骤就建立了连接:
    a-->SYN-->b
    b-->SYN/ACK-->a
    a-->ACK-->b

    3. 释放连接要四个步骤:
    a-->ACK/FIN-->b
    b-->ACK-->a
    b-->ACK/FIN-->a
    a-->ACK-->b

    4. 举例说:如果客户端调用memcache connect建立连接,那么在你这个脚本运行结束后这个连接将自动断开(客户端会发送ACK/FIN过去,完成释放连接的四个步骤),即使你没有主动去close()关闭这个连接。
    如果客户端调用了memcache里的pconnect 建立连接,而且你没有主动调用close()关闭这连接,它会在脚本结束后还存在。(也就是说不会发ACK/FIN过去)

     

    什么是长连接短连接

    解释1

    所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,  
    所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接

     

    解释2

    长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。  
    而短连接就是只有在有数据传输的时候才进行连接,客户-服务器通信/传输数据完毕就关闭连接。

     

    解释3

    长连接和短连接这个概念好像只有移动的CMPP协议中提到了,其他的地方没有看到过。  
    通信方式  
     
    各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对 CMPP消息的发送。  
     
    现阶段,要求ISMG之间必须采用长连接的通信方式,建议SPISMG之间采用长连接的通信方式。

     

    解释4

    短连接:比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。  
     
    长连接:有些服务需要长时间连接到服务器,比如CMPP,一般需要自己做在线维持。

    6.1        长连接
    通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。
        参数CTN原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3
        网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3
      消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建
    议为16,即接收方在应答前一次收到的消息最多不超过16条。


    6.2        短连接
    通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。
        网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3

  • 相关阅读:
    python 版本 jaeger-client 导入失败 jaeger-client-python
    kubernetes ingress 重定向地址错误
    win10 多用户登录
    kubernetes监控prometheus配置项解读
    最新版 源码编译 docker
    alpine 容器优化
    kubernetes 中安装 heapster 问题
    github开源文章生成pdf
    jmeter分布式测试
    Cucumber(1)
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1821256.html
Copyright © 2020-2023  润新知