0

我想构建一个特定的代理服务器和相应的特定客户端程序。我想定义自己的 tcp 标头选项。这些 tcp 标头选项仅由代理服务器和客户端程序使用。我不想使 tcp 标头选项通用。

我注意到没有使用 TCP 标头选项种类编号 31-252。

http://www.networksorcery.com/enp/protocol/tcp.htm#Options

所以我可以从范围中选择定义我自己的 tcp 头选项,它只被我的代理程序和客户端使用。

但问题是,我怎样才能让一个常规的 tcp 服务器对带有标头选项的 tcp 数据包做出反应?例如,当我使用类似的东西时:

 listenfd=socket(AF_INET,SOCK_STREAM,0); 

 bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

 listen(listenfd,1024);

 connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);

 n = recvfrom(connfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&clilen)

tcp 选项不mesg正确?那么如何让 tcp 服务器处理我定义的 tcp 选项呢?

tcp 选项协商是如何完成的?例如,SACK。在常规 tcp 服务器上默认启用哪些选项?

是否有与 tcp 标头选项相关的源代码?谢谢!

4

1 回答 1

1

我想定义自己的 tcp 标头选项

为什么?


所以我可以从范围中选择来定义我自己的 tcp 标头选项

不可以。您需要向IANA申请一个分配给您提议的扩展名的申请。


但问题是如何使常规 tcp 服务器对带有标头选项的 tcp 数据包做出反应?

如果您所说的常规是我理解的常规,那么答案是:通过 IETF RFC流程创建并记录 TCP 扩展。然后,您需要为尽可能多的操作系统在尽可能多的 TCP 堆栈中实施您的提案,以满足您的常规要求。您可能还需要网络接口卡芯片组制造商采用您的新 TCP 选项;如今,在许多情况下,大部分 TCP 处理都被卸载到网卡上。


tcp 选项协商是如何完成的?例如,SACK 在常规 tcp 服务器上默认启用哪些选项?

我看不出这里的第二个问题是第一个问题的例子。但是,从RFC 2018开始:

生成 Sack 选项:数据接收器行为

如果数据接收者在这个连接的 SYN 上接收到 SACK-Permitted 选项,则数据接收者可以选择生成 SACK 选项,如下所述。如果数据接收方在任何情况下生成 SACK 选项,它应该在所有允许的情况下生成它们。如果数据接收器没有收到给定连接的 SACK-Permitted 选项,它绝不能在该连接上发送 SACK 选项。


是否有与 tcp 标头选项相关的源代码?

Linux Kernel中有一个网络堆栈,它是开源的。


考虑到你在问这些问题,我怀疑你的野心可能会超出你目前的能力。

于 2013-04-03T13:55:01.737 回答