• TCP/UDP协议通信--Python高级


    Python高级

    基于UDP协议通信

    特点:无连接(即不需要先建立连接),传输不可靠(丢包,乱序,但概率比较低,随着一些路由器等设备的提升,这种概率变得更低),尽力而为,通信过程和手机短信通信类似,但传输效率非常高(即通信速度很快),

    使用UDP协议发送的数据包可能后发的数据包比先发的数据包先到,但概率比较低

    通信实现步骤:

    1.创建套接字(Socket):相当于买部手机,调用Socket,返回值是个对象

    2.给套接字绑定地址:相当于给手机上号,即给自己准备的地址(IP和端口号),客户端程序可以省略这一步(采用隐式绑定)

    3.通过套接字收发数据:相当于通过手机收发短信

    4.关闭套接字,相当于关闭手机

    基于TCP协议通信

    特点:面向连接,传输可靠(差错校验,重传,拥塞控制,失序处理),通信过程和用手机打电话类似,但传输效率低(即通信速度慢),

    为什么可靠:有校验数据的功能(即差错校验),校验时如果与你发过来的不一样,会要求你重传,拥塞控制,失序处理,当数据包进行切割,当后面的数据包先到时会让其在缓冲区等待,等前面的数据包都到达了再一起交给进程

    TCP的客户端和服务器是不对等的

    TCP服务器(相当于接电话的人)的实现步骤:

    1.创建(监听)套接字,相当于买部手机

    2.给套接字绑定地址,相当于给手机上号

    3.将套接字设置为监听状态,相当于把手机设置为待机状态

    4.接受客户端连接请求(返回一个对应的连接套接字),相当于接受其他人的来电请求

    5.收发数据,相当于互相通话

    6.通信结束关闭套接字(即断开连接),相当于通话结束挂机

    7.关闭监听套接字,相当于关机

    TCP客户端(相当于打电话的人)的实现步骤:

    1.创建套件字,相当于买部手机

    2.给手机绑定地址,可以省略这一步(隐式绑定),相当于给手机上号

    3.连接服务器,相当于拨打其它人电话

    4.收发数据,相当于互相通话

    5.关闭套接字,即断开连接吗,相当于挂断电话

    基于UDP协议通信的特点

    以数据包为单位进行收发的,即每次调用send或sendto就会发出一个数据包(建议单词发送的数据不要超过548字节), 每次调用recvfrom就会接收一个数据包,如果一个只接收了数据包中的一部分份数据,剩下的数据将会丢失

    UDP协议内没有提供流量控制功能,当发送方发送了很多数据包,而接收方没有接收处理,就会导致网络接收缓冲区满了,无法再容纳接收的数据包,从而导致丢包

    基于TCP协议通信的特点

    流式传输, 存在粘包现象,内部具有流量控制和差错校验功能,当接收方没有及时接收处理数据导致网络接收缓冲区满了,TCP协议内部会通知发送方,让其暂停继续发送数据,即send会阻塞调用线程, 当接收方的网络接收缓冲区有空闲空间了就会自动恢复发送操作

    send函数就是将我们要发送的数据放到网络发送缓冲区中而已,所以不要通过它的成功执行判断对方成功接收到数据,要想准确判断对方成功接收到我们发送的数据,最好是让接收方接收到数据后给发送发回复一个确认消息

    粘包现象产生的原因:

    1.TCP协议内部的默认优化机制,在我们调用send发送一份数据时,其实TCP协议并不会立即将这份数据打包发送到网络上去,只是将这份数据放到网络发送缓冲区中排队等候发送,并且会等待一小段时间,如果在等待期间又调用send发送数据,它同样会继续将这份数据放到网络发送缓冲中排队等候处理,如果在等待期间没有调用send发送数据,它就会将网络发送缓冲区中的所有数据打包发送

    2.如果接受方没有及时接收处理数据,发送过来的多个数据包将会在网络接收缓冲区中粘连在一起, 无法区分出不同数据包的界限

    粘包问题解决方法:

    1.取消TCP协议内部的优化机制,不建议采用,很弱智

    2.增加调用send函数的时间间隔,不建议采用,很弱智

    3.应答式通信,

    4.给发送的数据前面加上包头(表示待发送数据的描述信息, 比如数据的长度,哈希值,名称等)

    文件传输通信协议(命名azhe协议)设计:

    1.基于TCP协议

    2.客户端连接服务器成功后,客户端不发送任何消息,服务器端首先将一个文件的描述信息(定长包头,长度为247B)发送给客户端,紧接着发送文件数据给客户端,发完文件数据后断开连接

    3.文件描述信息结构为:文件名(200B,不足则在右边填充空格,UTF-8编码) + 文件大小(15B,不足则在右边填充空格) + 文件MD5值(32B,大写形式)

    UDP数据包最好控制548字节以内就不会拆包

    TCP粘包现象,tcp不会一个包一个包的发送,收到包后会等待,短时间内如果再接收到包,就会将它们粘在一起然后一起发送

     

    扩展

    1.TCP协议不支持广播,它是点对点的

    2.在同台机器上TCP和UDP的端口号可以相同,但相同协议使用相同端口肯定会有问题

    3.看到电线不要只以为是电线,其实是电力网络

    4.网络通信编程也称为socket编程

    5.手机号就是这部手机在移动无限网中的地址

    6.地址不仅仅是IP地址,其实包括IP地址和端口号

    7.传输层打包 ,原端口号和目标端口号

    网络层打包,原IP和目标IP

     

  • 相关阅读:
    四、oracle 用户管理二
    三、oracle 用户管理一
    二、oracle sql*plus常用命令
    数据库的导入导出
    一:oracle系统包—-dbms_output用法
    数据库分类
    Oracle序列号详解
    Windows 下 java(JDK)的安装和环境变量的配置
    win7安装oracle 10g时发生“程序异常终止。发生内部错误”的提示
    对数据库列的操作
  • 原文地址:https://www.cnblogs.com/yanruizhe/p/11305426.html
Copyright © 2020-2023  润新知