Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 度量标准是什么?程序员为什么应该关心网络_C++_C_Networking_P2p_Metric - Fatal编程技术网

C++ 度量标准是什么?程序员为什么应该关心网络

C++ 度量标准是什么?程序员为什么应该关心网络,c++,c,networking,p2p,metric,C++,C,Networking,P2p,Metric,我的理解是,通过“metric”或“metrics”,我们描述了通过网络传输的包的长度(以字节为单位,对吗?),问题是,据我所知,这个值与ISP相关,几乎不可能找到具有相同度量的2个ISP 如果我正在编写一个P2P软件来保持两个软件的同步,并且我想估计我的数据包的最佳大小,那么将度量值保留在计数中是否有意义,特别是因为这是一个与ISP相关的值,并且在整个世界上有很多ISP?我应该应用一些“启发式算法”,比如假设最好的度量是最低的,我只是不断地在最长的度量上添加空白值 谢谢 PS 如果你需要一个例

我的理解是,通过“metric”或“metrics”,我们描述了通过网络传输的包的长度(以字节为单位,对吗?),问题是,据我所知,这个值与ISP相关,几乎不可能找到具有相同度量的2个ISP

如果我正在编写一个P2P软件来保持两个软件的同步,并且我想估计我的数据包的最佳大小,那么将度量值保留在计数中是否有意义,特别是因为这是一个与ISP相关的值,并且在整个世界上有很多ISP?我应该应用一些“启发式算法”,比如假设最好的度量是最低的,我只是不断地在最长的度量上添加空白值

谢谢

PS 如果你需要一个例子,我更喜欢C++的东西,因为我现在对这个语言感兴趣。 编辑:
下面是您可以找到的评论摘要:看起来我的问题太笼统了,现在我将重点放在MTU和延迟(lag)上,以使事情更直截了当。

我想您可能在谈论路由表中的指标。如果是这样的话,它只是一个反映下一跳的“成本”的数字,很可能是延迟,但它不是以毫秒为单位的直接度量。这不是程序员需要关心的问题。

好吧,Regard在最大传输单元大小(MTU)方面优化了更新,您希望在一个数据包中填充尽可能多的位,以尽量减少跨线路发送的数据包数量。需要注意的是,如果您的主机(首先得到更新的主机)更新缓慢,您可能会决定不等待足够的数据完全到达MTU,而是更新从机(备份数据的主机)。 因此,作为一个例子,您的逻辑可能看起来像这样(在伪代码中)

现在,上面的例子是非常愚蠢的,如果这是您实际编写的东西,我假设它将在内核级别(不一定,但无论如何),这将更有可能是一个线程,而您的其他服务在每个线程中做其他事情

现在,就延迟或滞后时间而言,这更具体地说是网络延迟,在p2p情况下,你很可能无法控制它,因为它需要与ISP签订特定的服务协议。然而,这些部分的总和将给出一般延迟的近似值。即从
send_update_packet()开始所需的时间
直到从机接收到数据包和内核/OS中的钩子,在那里您实际记录了新的更新。无论如何,这些都是你感兴趣的延迟

 Processing delay - time routers take to process the packet header
 Queuing delay - time the packet spends in routing queues
 Transmission delay - time it takes to push the packet's bits onto the link
 Propagation delay - time for a signal to reach its destination
。。。现在,您应该再次选择哪个协议非常依赖于如果您计划让两台机器一直在通话tcp可能是您的最佳选择,它将防止您至少确保数据包不会丢失(协议栈中较高的位置有一个豪华的UDP句柄)。如果您希望更新更分散,您将希望避免使用TCP,因为打开连接的TCP握手过程需要3倍的延迟(上面提到的延迟总和)其中,as udp将允许您发送数据包的写操作,然后在同一套接字上等待响应,以确保在时间
x
retry内未获得响应时正确接收数据包

根据@EJP提供的答案,大多数时候编程人员不需要担心这一点,但在某种程度上,有人担心这一点,特别是在数据库服务器灾难管理的情况下,以及在这种情况下,DB始终与insync尽可能接近是至关重要的。。。去年我写了一些内核代码来处理这个特定的问题,希望它能有所帮助

网络(尤其是互联网络)是一门相对年轻的科学,尚未完全形成。因此,并非所有的“正确行为”都被任何人“分享”,仅仅是因为并非所有人都相信(或被迫)控制它“正确”。 其结果是,任何人都必须在某种程度上“关心”任何事情,因为永远不可能拥有完全的信任

也就是说,为了更接近你的问题,让我先告诉你,你自己“不受信任”,因为你使用了不恰当的术语

你说的是网络“度量”(在网络科学中,它与路由有关),但你说的是另一个,即MTU(最大传输单位)。如果你用这种方式与网络工程师交谈,你几乎可以肯定你永远也找不到问题的答案,因为他很可能理解另一个完全无关的东西

现在一切都清楚了(我希望如此),让我们了解一点理论:

  • 每一种传输介质,由于其本身的物理特性,都会引入一些错误。
    • 在链路级,这主要是由于“电噪声”或群色散,这使得“信号”越来越不可理解
    • 在电路(或路径,对于无连接网络协议,如IP)级别,这可能是由于拥塞导致的数据包丢失
  • 上述几点的直接后果是“端到端的正确传输”在物理上是不可能的
  • 为了解决这个问题,链路协议和传输协议都必须引入一些“冗余校验”(CRC)在这个意义上,MTU就是在不违反CRC计算和物理媒体管理的基本规则的情况下,可以推入数据包的最大字节数
  • 根据应用需要,IP提供不同的“传输协议”:
    • UDP是一种“不在乎”:如果数据包丢失,则
       Processing delay - time routers take to process the packet header
       Queuing delay - time the packet spends in routing queues
       Transmission delay - time it takes to push the packet's bits onto the link
       Propagation delay - time for a signal to reach its destination