monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
阅读:2653回复:4

OOB祥解!

楼主#
更多 发布于:2002-05-07 19:28
看了很多资料终于明白了什么是OOB。还是与大家分享吧!
在TCP中为了减少网络负荷,采用了缓冲技术,但同时他也带来了两个问题。(1)当远程服务器程序出错且TCP窗口未空时,急需客户端发送数据调整远程服务器,但是TCP窗口未空,服务端无法正常接受客户端的数据。(2)在交互终端系统中,用户希望每敲入一个字符都得到服务端的响应,可是在TCP要缓冲区积累数据到一定程度才会发送数据,因此用户将会很不高兴的。针对以上两种情况TCP使用了紧急数据和强迫传递两种策略来解决,而紧急数据就是我们说OOB。
为什么起名为OOB,我想是想取里面的复用意思吧!在正常的TCP数据传输中所有数据只看着一个数据流,TCP顺序接收数据包。但在上面的第一种情况,我们必须提供非顺序的访问方式,能够访问紧急数据对此的解决方法就是OOB。
在程序设计中以及协议中,OOB就是TCP中的URG,当URG置一时,表示有紧急数据到,并且紧急数据指针指向紧急数据的结尾处。那么我们必须在程序中提供紧急数据的起始位置,这样我们才能正确的获得紧急数据,其实对于紧急数据的处理有两种方法,就是如何确定紧急数据的起始位置。一般有两种方法:一个就是OOB,另一个是数据标记。说说OOB吧。
OOB处理紧急数据的策略是,将TCP数据流分为正常数据流和紧急数据流两种类型,然后根据TCP包的序列号来确定是哪个数据包,也就是确定紧急数据的起始位置,但它又有一个问题,就是这样会使正常的数据流中出现序列号空缺,因为它是紧急数据的,而紧急数据已经被接收了,那么正常的数据流必须能够记录紧急数据流的序列号,这样就把数据流真正的复用了,一个是正常数据流,一个是紧急数据流。
也就是他们所说“只是在现有的逻辑链路实现带外数据”。
对于数据标记在windows系统中没有使用,就不提了!!
祝大家好运!!

最新喜欢:

znsoftznsoft
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-07 20:10
monkeyy,敲了这么多字辛苦了,辛苦了。

按第一贴的“给分”键,给分。
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-07 23:53
手头没有oob的资料,但凭印象记得tcp/ip的实现里好像对oob的使用有一个说法,就是你要确认你所使用的系统对oob作了处理,以为很多系统对oob是不作处理或者作一些很奇怪的处理的。
按第一贴的“给分”键,给分。
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-08 12:49
至于你说的系统是否处理了oob。在TCP/IP协议中并不说oob,而是说紧急数据,然后对紧急数据的处理有两种方法,一个就是oob,因此在TCP协议中并没有oob的说法,只有紧急数据的说法,而oob只是一种实现方法。另外我想它本身就是TCP软件的一个组成部分,也就是说不同的TCP软件系统会有不同的处理方式,比如不处理,因此对TCP/IP协议来讲没有必要查看系统是否处理了oob,因为不同的系统就是对TCP/IP协议的不同实现。我估计你说的是在一个特定TCP系统中,协议驱动如何标记是否处理了oob,比如:在windows系统中TCP如何标记如何处理了一个oob!这个问题我也在想,不过没有源码好象很难知道!
说到这儿还是说说紧急数据的另一种常用的处理方法吧,这样可能有助于理解oob。那就是数据标记。在有紧急数据到来时,oob将应用程序置入紧急模式,并传入紧急数据包的序列号,然后应用程序接收紧急数据,等结束时唤醒驱动。而在数据标记中仍然只有一个数据流,然后在有紧急数据到时,标记他的起始位置并传给应用程序,有由它来读写,两者的区别主要在于是否将TCP数据流复用了。
我就是这么理解的,不知哪位大侠能否指点一下!!
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-08 19:35
呵呵,我也不是很明白OOB的概念,前几日搜了搜,看了看,发现这个定义比较好:
“传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道.linux系统的套接字机制支持低层协议发送和接收带外数据.但是TCP协议没有真正意义上的带外数据.为了发送重要数据,TCP提供了一种称为紧急模式(urgent mode)的机制.TCP协议在数据段中设置URG位,表示进入紧急模式.接收方可以对紧急模式采取特殊的处理”。
另外,依据我的理解,比如向FTP协议的端口21(命令端口是这个吧?,既不清了――总之不是书数据的那个端口)传送的就可以算作oob了吧。FTP是专门使用了一个通道来传送带外数据,而没有通过TCP的URG标志来传送带外数据。似乎高层协议才能具体理解oob在特定情况下的特定含义……
各位大虾发表些意见啊……
游客

返回顶部