【发布时间】:2019-02-17 16:59:24
【问题描述】:
我一直在测试 Java + lksctp 上的 SCTP 支持。 我编写了一个简单的客户端来查看 SCTP 关联的初始设置,它基本上是“INIT”和“INIT ACK”。 我已经测试了两种客户端将“INIT”发送到服务器的方法,基本上是:
-
使用“open(SocketAddress)”创建 SctpChannel 对象
try { InetSocketAddress socketAddress = new InetSocketAddress("192.168.52.197", 2905); SctpChannel sctpChannel = SctpChannel.open(socketAddress,1,1); sctpChannel.bind(new InetSocketAddress("192.168.1.251",2906)); sctpChannel.connect(socketAddress, 1 ,1);
所以通过这种方式,我可以在 Wireshark 中看到我的所有网络接口都有“IPv4 地址参数”(如下所示为 3),但源端口获取的是一个偶然的端口号,而不是 2906我想拥有它,它在绑定中。
所以...一旦本地 IP/端口的绑定在“打开”之后发生...所以我将代码更改为:
创建“open()”的 SctpChannel 对象
绑定本地客户端IP和端口
-
“连接”到远程服务器 IP 和端口
try { InetSocketAddress socketAddress = new InetSocketAddress("192.168.52.197", 2905); SctpChannel sctpChannel = SctpChannel.open(); sctpChannel.bind(new InetSocketAddress("192.168.1.251",2906)); sctpChannel.connect(socketAddress, 1 ,1);
这样,我可以在wireshark中看到源/目标端口是预期的(2906/2905),但INIT没有“IPv4地址参数”。
那么有谁知道为什么我在 INIT 中缺少“IPv4 地址参数”的第二个代码?我错过了什么吗?
非常欢迎任何帮助。
谢谢。
【问题讨论】: