在研究了“窗口大小”概念之后,我了解到它在通过线路发送之前保留数据包,直到收到最早的数据包的确认为止。一旦填满,后续数据包将被丢弃。我还在某处读到TCP是一种流协议,而数据包是与网络层的IP协议相关的。
直到我假设我已经声明了一个缓冲区(内部代码),我填充了一些数据并使用套接字发送该缓冲区。我声明了一个 10000 字节的缓冲区,并使用套接字通过 10 Gbps 链路重复发送它。
我有以下假设和问题。请核实并帮忙
如果我想发送 64,256,512 等字节的数据包,请在那么多空间的代码内声明缓冲区并通过套接字发送。每次执行 send() 命令都会发送一个同样大小的数据包。
那么,如果我想研究数据包大小变化对吞吐量的影响,我该怎么办?我需要改变代码中的缓冲区大小吗?
我们使用 SO_SNDBUF 和 SO_RECVBUF 设置的套接字缓冲区是什么?谷歌说这是套接字的缓冲区空间。它与 TCP 窗口大小相同还是不同?哪个参数更适合改变或增加吞吐量?
套接字缓冲区中还有三个参数:Min、Default 和 Max。我应该根据我的实验改变哪一项以获得更多相关性?
安装时出现以下错误
\n\n在文件中包含来自linkstate/ls.cc:67:0:
linkstate/ls.h: In instantiation of \xe2\x80\x98void LsMap<Key, T>::eraseAll() [with Key = int; T = LsIdSeq]\xe2\x80\x99:\nlinkstate/ls.cc:396:28: required from here\nlinkstate/ls.h:137:58: error: \xe2\x80\x98erase\xe2\x80\x99 was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]\n void eraseAll() { erase(baseMap::begin(), baseMap::end()); }\n ^\nlinkstate/ls.h:137:58: note: declarations in dependent base \xe2\x80\x98std::map<int, LsIdSeq, std::less<int>, std::allocator<std::pair<const int, LsIdSeq> > >\xe2\x80\x99 are not found by unqualified lookup\nlinkstate/ls.h:137:58: note: use \xe2\x80\x98this->erase\xe2\x80\x99 instead\nRun Code Online (Sandbox Code Playgroud)\n\nmake: *** [linkstate/ls.o] Error 1 …
我们实时开发使用ADA语言(ADA95).我们面临着地址绑定机制的问题.在我们使用ADA83之前,其中直接机制是
用于16#12345678#的x;
将地址16#12345678#分配给变量x;但在ADA95中不支持此语法.分配的其他方法是声明变量记录.然后创建一些系统包的对象然后传递地址.这对于想要处理单个变量非常麻烦.此方法仅适用于具有连续存储位置的多个变量,因此您可以为第一个分配地址,其余部分将自动对齐.
TYPE SIU_Type IS
RECORD
SIU_Reserved0 : GLOBAL_TYPE.ORDINAL;
MIDR : GLOBAL_TYPE.ORDINAL;
SIU_Reserved00 : GLOBAL_TYPE.ORDINAL;
END RECORD;
package SIU_Conv is new System.Address_To_Access_Conversions(SIU_Type);
SIU : constant SIU_Conv.Object_Pointer := SIU_Conv.To_Pointer(SIU_Address);
Run Code Online (Sandbox Code Playgroud)
在我们的项目中,我们在许多需要地址分配的地方使用变量,但第二种方式非常简单,并且使代码非常复杂.
如果有的话,Plaese建议任何其他方式.