TCP 带外数据传输

TCP 带外数据传输

2020.1.1

今天复习网络程序设计,里面提到了TCP的带外数据传输是由TCP报文的urg位和紧急指针实现的。但是书上说紧急指针指向的是紧急字段的下一字节。这与我之前复习计算机网络时,书上的描述不符。于是我找了几篇博文看了看,直接给我看蒙了。

以下是我找到的一种简单易懂的tcp-oob传输的解释。

  1. 紧急数据是插在正常数据流中进行传输的 。
  2. 一个紧急指针只指向一个字节的带外数据的后一个字节位置。比如我们要发送数据1,2,3,4,5,6 ,7,8,如果我们只发送一个字节的带外数据X,那么发送缓冲区就是(1,2,3,4,5,6,7,8,X),紧急指针置为10,X是带外数据字节 。如果我们发送多个字节的带外数据(X,Y,Z),那么发送缓冲区就是(1,2,3,4,5,6,7,8,X,Y,Z),紧急指针指向Z的后面,为12 ,Z 被当作带外数据字节。
  3. 假如由于发送窗口的关系,导致该发送缓冲区中的数据(1,2,3,4,5,6,7,8,X)分为多次或者两次发送。比如:发送窗口是6,那么就分为两个包发送,情况如下:第一个包紧急指针为10,传送六个字节(1,2,3,4,5,6),接收端记下接受的字节数并且发现紧急指针指向的紧急数据没有到达,所以继续等待下一个包,下一个包(紧急指针还是10)发过来 7,8,X ,接收端发现紧急指针指向的紧急数据在这个包里,所以将紧急数据进行处理即可。

我的疑点在于,在《数据通信与网络》这本书里,紧急指针指向紧急数据的末尾,紧急数据置于报文数据段的开始位置。而到了这里,变成了只能传输一字节的紧急数据,且指针指向紧急字节的下一字节,和《网络程序设计》这本书描述符合。

在翻阅更多文章后,我找到了原因。这是由于TCP对紧急数据的处理有两种解释造成的。TCP紧急指针有两种解释, RFC793解释BSD解释 。RFC793为最开始的标准。但绝大部分的实现却都基于BSD解释。这其中的原因我暂且蒙在鼓里(

也就是说,计网里的是RFC793解释,而网络程序设计里则是BSD解释。可能是因为计网偏理论,程序设计偏实践的关系吧。

以下是BSD和RFC的相关信息

BSD (Berkeley Software Distribution伯克利软件套件)是Unix的衍生系统,在1977至1995年间由加州大学伯克利分校开发和发布的。历史上, BSD曾经被认为是UNIX的一支——“BSD UNIX”, 因为它和AT&T UNIX操作系统共享基础代码和设计。在20世纪80年代,衍生出了许多变形的UNIX授权软件。比较著名的如DEC的Ultrix及Sun公司的SunOS。1990年代,BSD很大程度上被System V4.x版以及OSF/1系统所取代,晚期BSD版本为几个开源软件开发提供了平台并且一直沿用至今。今天,“BSD”并不特指任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称。

BSD开源协议是一个给予使用者很大自由的协议。基本上使用者可以"为所欲为",可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但"为所欲为"的前提是当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:1.如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。2.如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。3.不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

RFC793我没找到具体描述,中文文档全都要钱,呜呜呜,就放个英文的链接吧

RFC793英文原版:https://blog.csdn.net/qq_39661959/article/details/112068434

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
TCP是传输控制协议(Transmission Control Protocol)的缩写,它是一种常用的网络传输协议。在数据传输中,TCP使用拼接的方式来传输数据。 首先,当发送方要向接收方传输数据时,它将数据分割成较小的块,称为TCP段或报文段。这样做的目的是为了将数据进行拆分,以便在网络上传输。 然后,TCP将每个TCP段打上标记,以确保接收方可以按照顺序将它们拼接在一起。这意味着即使TCP段在传输过程中可能经过不同的路径、以不同的顺序到达接收方,接收方仍然能够将它们正确地重新组装起来。 接收方接收到TCP段后,会按照序列号进行排序。接收方会根据TCP段头部中的序列号信息,将接收到的TCP段按照正确的顺序进行拼接。如果接收方发现某个TCP段的序列号缺失或者乱序,它会向发送方发送一个相应的请求,要求重传或者重新排序。 拼接数据的过程是通过在接收方维护一个缓冲区来完成的。接收方将接收到的TCP段存储在缓冲区中,直到所有的TCP段都到达,并且按照正确的顺序进行拼接。一旦所有的TCP段都被拼接完成,数据就可以被传递给上层应用程序进行处理。 总之,TCP数据传输中使用拼接的方式来传输数据。它将数据分割成较小的TCP段,并通过序列号信息,保证接收方能够按照正确的顺序将它们拼接在一起。这种机制确保了数据的可靠传输和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SilentWaver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值