如何在Socket客户端/服务器的java程序中设置ECN(显式拥塞通知)位

时间:2011-12-06 02:25:45

标签: java sockets tcp

我已经为服务器和客户端编写了基本套接字程序。我想知道如何使用java将数据从服务器传输到客户端,并且当服务器发送数据时,如果客户端缓冲区溢出服务器应该减少它发送速率(拥塞应该用tcp / ip中的ECN位表示).....谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

ECN字段是IPTransport layer的属性。因此,我认为您无法从普通应用程序中进行设置。一种方法是创建RAW Socket并使用TCP / IP头中设置的适当字段(在您的情况下为ECN)自己制作数据包。

您还应注意,所有路由器和参与的终端主机都必须具有ECN支持。否则,路由器可能只丢弃数据包或任意将ECN值设置为零。

Google能够找到一些带有原始套接字支持的Java库,你会发现here

答案 1 :(得分:0)

您可以使用cmd命令启用或禁用ECN功能 - netsh interface tcp set global ecncapability = enabled

启用ECN功能时,TCP标头会自动设置ECN和CWR标志。

https://www.saotn.org/explicit-congestion-notification-ecn-slows-outbound-connections/