UDT的整体结构

UDT Socket是UDT中的核心,同时它也是一座桥梁,它将UDT的使用者应用程序与内部实现部分对于数据结构的管理、网络数据的传输连接起来。

应用程序通过它将数据放进发送缓冲待发送,或者借由它来获取从网络接收数据。而与网络进行交互的部分,则从它那里拿到要发送的数据进行发送,或者在收到packet时将packet dispatch给它。

UDT的数据接收部分框架:

UDT的数据发送部分框架:

UDT的一些问题

1. 接口的合理性。

分析了UDT的这许多code,给人的感觉就是,socket接口设计的似乎并不是特别的合理。socket的两种类型,即用于进行数据传输的socket和服务器端用于接受连接的socket,两者之间的差别非常的明显。它们所能提供的操作,它们的状态转换过程都很不一样,服务器端用于接受连接的socket支持listen和accept操作,而用于进行数据收发的socket则不支持;同样用于进行数据收发的socket支持send和recv,服务器端用于接受连接的socket则不支持。但当前的socket接口统一用一个socket来表示。也就是有多种其实毫不相干的职责都被堆在一个socket结构上了。

socket接口这样的设计所带来的问题就是使用起来比较容易混淆,对用户的友好度比较低。即在执行某个操作之后才能通过返回值检测出来,而不能在调用函数时,就通过编译error之类的提前报出来。而实现起来呢,则不得不增添许多额外的状态检查,大大增加了实现的复杂度。

2. 有些地方存在大段大段的重复code。

比如CUDTUnited::updateMux()函数,CUDTUnited的两个bind()函数之间,CUDT::sendmsg()和CUDT::send()中等待发送缓冲区有空间部分的code,CUDT中两个connect()函数中初始化CUDT的操作等等。

3. 在CUDT中竟然用了m_bOpened,m_bListening等8个bool变量来表示UDT Socket的状态,这使得状态管理的复杂度大为增加。

4. Code中还是有一些历史遗留问题,比如DelayWarning/CongestionWarning消息,定时器中对于NAK消息的发送等,这些机制被移除掉,但是又被移除的不是很彻底。

5. 消息类型这种本应该定义为enum或者类似的东西的常量,却是magic number满天飞。

在github上建了一个repo,https://github.com/hanpfei/hudt,目前基本上还是原始的UDT code,后面有机会了希望能有人一起改善现有UDT的一些问题。

Done。

oracle udt 解析,UDT协议实现分析总结相关推荐

  1. UDT协议实现分析——连接的建立

    UDT Server在执行UDT::listen()之后,就可以接受其它节点的连接请求了.这里我们研究一下UDT连接建立的过程. 连接的发起 来看连接的发起方.如前面我们看到的那样,UDT Clien ...

  2. UDT协议实现分析——UDT Socket的创建

    UDT API的用法 在分析 连接的建立过程 之前,先来看一下UDT API的用法.在UDT网络中,通常要有一个UDT Server监听在某台机器的某个UDP端口上,等待客户端的连接:有一个或多个客户 ...

  3. wireshark协议解析器 源码分析 封装调用

    源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...

  4. c oracle udt,Oracle OCI操作UDT相关学习

    1.Oracle数据类型 Oracle的数据类型如下 字符串类型 char nchar varchar2 nvarchar2 数值类型 int number integer smallint 日期类型 ...

  5. python爬虫最为核心的HTTP协议解析,及自定义协议的分析

    机器之间的协议就是机器通信的语法,只有按照这种语法发来的信息,机器之间才能相互理解内容,也可以理解为信息的一种格式. HTTP/IP协议是互联网最为重要的协议,没有HTTP/IP协议,也就没有互联跟不 ...

  6. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  7. Linux内核网络数据包发送(二)——UDP协议层分析

    Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...

  8. HTTPS协议原理分析

    HTTPS协议原理分析 HTTPS协议需要解决的问题 HTTPS作为安全协议而诞生,那么就不得不面对以下两大安全问题: 身份验证 确保通信双方身份的真实性.直白一些,A希望与B通信,A如何确认B的身份 ...

  9. J8583CN解析ISO8583协议报文注意点

    最近在做POS接入涉及到如何正确解析ISO8583协议的问题,遇到了一些很讨厌的问题今天将他们总结一 下写在博客中,供大家参考. 1.  对于小白首先要了解什么是ISO8583协议,请参考该文章htt ...

最新文章

  1. java gc种类_Java GC系列(3):垃圾回收器种类
  2. python dlib学习(九):人脸聚类
  3. 活动 | 5 位大咖,手把手教你玩转数据驱动精细化运营
  4. 真实感水面绘制-资料收集
  5. JZOJ 5925. 【NOIP2018模拟10.25】naive 的瓶子
  6. Mysql 死锁过程及案例详解之显式与隐式锁Explicit Table Lock Implicit Table Lock
  7. C++ 学习之旅(5)——设置Setup文件目录
  8. oracle12c asmfd,Oracle 12C R2-新特性-自动配置ASMFD
  9. 宋体、文件-Ubuntu Linux中配置adb-by小雨
  10. Intel格式与Motorola格式的区别
  11. IT公司老板落水,各部门员工怎么救??
  12. 华为的数字化转型与数据治理
  13. 如何屏蔽Tensorflow输出的调试和警告信息
  14. 车辆运动学和动力学模型
  15. 手机怎样和宽带连接无线路由器设置路由器连接服务器,手机如何设置路由器?...
  16. 一行搞定List<T>中的成员数量统计
  17. 学生管理系统IPO图_玩不起了?海底捞取消大学生69折优惠,海底捞:暂不会调整...
  18. 微信企业支付 服务器根证书,微信支付服务器证书根ca证书有什么用
  19. 实际采用 FleaPHP 的网站
  20. 计算机毕业设计Java大学生兼职平台(源码+系统+mysql数据库+lw文档

热门文章

  1. jqgrid 动态设置单元格不可编辑
  2. 北京将评估特定时段特定区域机动车单双号限行-单双号-限行
  3. 红帽子服务器虚拟化技术只要是,红帽子企业版.Linux.5
  4. 【转】不是眼保健操无用,而是运用的不合理
  5. 地图裁剪器,可以将图片裁剪成瓦片数据,主要用途是将高清卫星图像裁剪成瓦片图,可以做离线地图的开发,基于墨卡托坐标
  6. dx.jar bad class file magic (cafebabe) or version (0034.0000)
  7. Vue2,Webpack的基础配置以及使用脚手架创建工程
  8. 建个网站需要多少钱?你真的知道吗?
  9. 浪潮和思科联合 华为、新华三怎么看?
  10. Anaconda中conda命令或者pip命令使用豆瓣镜像下载包