在ip数据包中发送多个tcp数据包

时间:2010-02-08 10:01:13

标签: tcp udp ip-protocol

是否可以在单个ip数据包上发送多个tcp或udp数据包?协议中是否有任何规范不允许这样做。

如果协议允许但通常不是通过tcp / udp实现,你可以指向linux源代码中的相关部分来证明这一点。

在某些操作系统上是否存在tcp / udp的任何实现,它们会在单个ip数据包上发送多个数据包。 (如果允许的话)。

6 个答案:

答案 0 :(得分:9)

无法

TCP seqment标头不描述其长度。 TCP有效负载的长度是从IP数据包的长度减去IP和TCP报头的长度得出的。因此每个IP数据包只有一个TCP段。

但是,相反,可以通过IP分段将单个TCP段分段到多个IP数据包上。

答案 1 :(得分:2)

Tcp不发送数据包:它是一个连续的流。你发送消息。
Udp是基于数据包的,一次只发送一个数据包。

协议本身不允许。它不会破裂,它不会发生。

使用隧道的建议是有效的,但警告也是如此。

答案 2 :(得分:2)

你可能想尝试通过tcp隧道化tcp,尽管它通常被认为是bad idea。根据您的需要,您的里程可能会有所不同。

答案 3 :(得分:2)

您可能需要查看允许跨单个TCP连接的多个数据流的Stream Control Transmission Protocol

编辑 - 我不知道TCP没有自己的头字段,因此如果不编写包含此信息的自定义TCP等效项,就无法做到这一点。 SCTP可能仍然有用,所以我将保留该链接。

答案 4 :(得分:2)

TCP是一个公共规范,为什么不只是阅读它?

RFC4164是路线图文档,RFC793是TCP本身,RFC1122包含一些勘误,并显示它如何与(IPv4)Universe的其他部分组合在一起。

但简而言之,因为TCP标头(RFC793第3.1节)没有长度字段,所以TCP数据从标头填充的末尾延伸到IP数据包的末尾。无处可在数据包中放入另一个数据段。

答案 5 :(得分:1)

您无法将多个TCP数据包打包到一个IP数据包中 - 这是上面提到的规范限制。 TCP是最接近面向应用程序的API。或者您想编程发送原始IP消息?只需告诉我们,您想解决什么问题。考虑如何组织从一个应用程序到另一个应用程序的消息传递,或者提到您想要挂钩到TCP / IP堆栈。我可以建议你:

  1. 考虑将您喜欢的任何内容打包到UDP数据包中。我不确定,在远程端启动“解压缩”TCP包的路由是多么容易。
  2. 考虑使用PPTP或类似的隧道协议。