gpt4 book ai didi

sockets - 关于 p2p 应用程序中的 UDP 端口

转载 作者:行者123 更新时间:2023-12-03 12:04:54 26 4
gpt4 key购买 nike

我正在做一个 DHT 的小型演示项目(仅限 p2p 路由,如 Chord、Pastry 等),我对 P2P 网络中的传输细节感到困惑。

假设所有对等点都使用 进行通信UDP 端口是 10050 ,这是一个固定的,那么考虑两种典型情况:

  • 一个 可以向 发送“加入”消息乙 .
  • 另外,可以向 发送“JOIN”消息(或其他消息)一个 根据p2p性质。

  • 第一种情况,消息的目的端口必须是 10050 ;

    情况2,消息的目的端口必须是 10050 ;

    我想知道 是什么源端口在这两种情况下的消息?如果是系统调用决定的随机端口,DHT协议(protocol)栈需要处理 上的数据报。 10050 和随机端口 ,这是基于 DHT 的应用程序(例如,emule、bittorrent)中的正常行为吗?

    最佳答案

    I wonder what's the source port of the messages in both cases? If it's a random port decided by system calls



    您通常使用绑定(bind)到特定本地端口的套接字(POSIX bind())。该本地端口将同时用作传出消息的源端口和传入消息的目标端口。请注意,对于 UDP,您可能希望使用 POSIX sendmsg()sendto()打电话而不是 send() .

    这对于 DHT 协议(protocol)很重要,因为其他节点会根据您的源端口推断您正在监听的端口并将其存储在其路由表中。

    至于具体的端口号,原则上你可以为你的 DHT 使用一个固定的端口号,这意味着其他节点不必推断监听端口,因为他们知道它是固定的。

    但最好有一些灵 active ,这样可以避免端口冲突。因此,节点通常应该可以自由选择任何端口,然后通过该端口执行所有发送和接收操作。

    此外,由于 IPv6 变得越来越普遍,您将希望将您的套接字绑定(bind)到主机上的一个特定地址,因为 v6 通常每个主机都有多个地址,并且监听多个接口(interface)并从不同 IP 发送消息会使您看起来不可靠DHT 节点(不断变化的 IP 地址)。 IE。如果可以避免,请不要绑定(bind)到任何本地地址( 0.0.0.0::0 )。

    找出哪个本地地址用于默认路由并绑定(bind)到该地址。

    关于sockets - 关于 p2p 应用程序中的 UDP 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616182/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com