什么是带外数据

2015年3月 同时被 2 个专栏收录
72 篇文章 0 订阅
66 篇文章 0 订阅
什么是带外数据?带外数据是什么意思?
许多传输层都支持带外数据(Out-Of-Band data),有时候也称为快速数据(ExpeditedData).之所以有带外数据的概念,是因为有时候在一个网络连接的终端想“快速”的告诉网络另一边的终端一些信息.这个“快速”的意思是我们的“提示”信息会在正常的网络数据(有时候称为带内数据In-Band data)之前到达网络另一边的终端.这说明,带外数据拥有比一般数据高的优先级.但是不要以为带外数据是通过两条套接字连接来实现的.事实上,带外数据也是通过以有的连接来传输。


不幸的是,几乎每个传输层都有不同的带外数据的处理方法。


带外数据(也称为TCP紧急数据)的讨论,都是基于BSD模型而言的。用户和实现者必须注意,目前有两种互相矛盾的关于RFC 793的解释,也就是在这基础上,带外数据这一概念才被引入的。而且BSD对于带外数据的实现并没有符合RFC 1122定下的主机的要求,为了避免互操作时的问题,应用程序开发者最好不要使用带外数据,除非是与某一既成事实的服务互操作时所必须的。Windows Sockets提供者也必须提供他们的产品对于带外数据实现的语义的文挡(采用BSD方式或者是RFC 1122方式)。规定一个特殊的带外数据语义集已经超出了Windows Sockets规范的讨论范围。


流套接字的抽象中包括了带外数据这一概念,带外数据是相连的每一对流套接字间一个逻辑上独立的传输通道。带外数据是独立于普通数据传送给用户的,这一抽象要求带外数据设备必须支持每一时刻至少一个带外数据消息被可靠地传送。这一消息可能包含至少一个字节;并且在任何时刻仅有一个带外数据信息等候发送。对于仅支持带内数据的通讯协议来说(例如紧急数据是与普通数据在同一序列中发送的),系统通常把紧急数据从普通数据中分离出来单独存放。这就允许用户可以在顺序接收紧急数据和非顺序接收紧急数据之间作出选择(非顺序接收时可以省去缓存重叠数据的麻烦)。在这种情况下,用户也可以“偷看一眼”紧急数据。


某一个应用程序也可能喜欢线内处理紧急数据,即把其作为普通数据流的一部分。这可以靠设置套接字选项中的SO_OOBINLINE 来实现。在这种情况下,应用程序可能希望确定未读数据中的哪一些是“紧急”的(“紧急”这一术语通常应用于线内带外数据)。为了达到这个目的,在Sockets 的实现中就要在数据流保留一个逻辑记号来指出带外数据从哪一点开始发送.select()函数可以用于处理对带外数据到来的通知。


传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方。为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道。linux系统的套接字机制支持低层协议发送和接受带外数据。但是TCP协议没有真正意义上的带外数据。为了发送重要协议,TCP提供了一种称为紧急模式(urgent mode)的机制。TCP协议在数据段中设置URG位,表示进入紧急模式。接收方可以对紧急模式采取特殊的处理。很容易看出来,这种方式数据不容易被阻塞,并且可以通过在我们的服务器端程序里面捕捉SIGURG信号来及时接受数据。这正是我们所要求的效果。

由于TCP协议每次只能发送和接受带外数据一个字节,所以,我们可以通过设置一个数组,利用发送数组下标的办法让服务器程序能够知道自己要监听的端口以及要连接的服务器IP/port。由于限定在1个字节,所以我们最多只能控制255个port的连接,255个内网机器(不过同一子网的机器不会超过255J),同样也只能控制255个监听端口,不过这些已经足够了。


为什么TCP OOB(紧急数据)一次只能发送一个字节?(http://www.zhihu.com/question/27736455,只有知乎上的一个问题,没有回答。。。)
如果接收方TCP协议栈,收到一个报文,其URG标识为1,但其L7 SDU-LEN大于1,那么,它只会将最后一个字节作为紧急数据,其它字节作为正常数据,是这样吗?这样做的目的是什么?不太理解TCP协议这样做的设计目的。紧急数据只是用在最初的TELNET场景?转为TELNET单字节紧急事件发送处理?



来源:

http://www.fundfund.cn/news/20100325/201032556059.htm

http://baike.baidu.com/link?url=EVmlTlwCMbDDLcacgjlkdKiwzzuMVoHAqjUR5UOBMxCfgRpHZOjXK-l9p7UJeYm5XqccSdRzMLv7EF1m-mfeT_

  • 5
    点赞
  • 0
    评论
  • 6
    收藏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值