我正在为移动电话(使用j2me)编写一个简单的应用程序,该应用程序使用数据报协议进行客户端-服务器交互。移动应用程序将一些文本发送到服务器,服务器将这些文本打印到标准输出。以下是发送数据报(使用手机)的代码:
String ip;
String port;
String msg;
//Loading ip, port and msg from the user input, I won't write it here, 'cause it
//does not matter
//Below is a simple code snippet for sending msg to
我试图很好地理解IP碎片和重组过程。我在互联网上找到了这个例子,我想这个例子对理解这个话题是有用的。
假设某台计算机接收以下序列的数据报(英文列为:源IP地址、ID、MF、DF、偏移量、总长度、协议):
📷
我相信有5份原始的非碎片化的数据报已经发送:
ID 454,IP 48.143.25.12 (条目1、2、7)
ID 630,IP 245.36.22.141 (条目6、11、13)
ID 43,IP 212.203.92.105 (条目3、4、5、8)
ID 44,IP 212.203.92.105 (条目10、12)
ID 43,IP 93.46.25.4 (入境9)
我的分析如下:
假设案例
假设路由器(R1)接收长度为:820(报头+有效负载)的IP数据报,TTL:255,ID:11。传出链路的IP-MTU大小为420。
现在,R1必须将数据报分割成两个片段。问题是,这些创建的片段的TTL将是什么:
会是(TTL of the received IP datagram -1)吗
还是认为片段从此路由器开始,启动TTL将由此路由器(R1)分配。
Windows XP或更高版本的解决方案。最好是在C#或C++中。
我们不想使用子网定向广播(例如192.168.101.255)进行广播,因为我们尝试联系的设备对此没有响应。相反,我们希望能够仅从特定NIC/ is地址发送目的地址为255.255.255.255的UDP数据报,这样广播就不会在其他NIC上发送出去。
这意味着我们必须绕过IP堆栈,这就是问题所在。我们如何才能绕过windows上的IP堆栈,仅从特定的NIC/MAC地址发送符合UDP/IP的数据报?