当前位置: 首页 > wzjs >正文

做环评工作的常用网站外贸自己建网站

做环评工作的常用网站,外贸自己建网站,什么叫网站根目录,怎么样自己做企业网站当使用UDP或者SHM作为传输层时,我们经常看到7400、7410、7411、7412这些端口号。 那么这些端口号是怎么计算出来的?又有什么用呢? 如下图所示,使用fastdds中的例子delivery_mechanisms,指定传输层为UDPv4&#xff0c…

当使用UDP或者SHM作为传输层时,我们经常看到7400、7410、7411、7412这些端口号。

那么这些端口号是怎么计算出来的?又有什么用呢?

如下图所示,使用fastdds中的例子delivery_mechanisms,指定传输层为UDPv4,启动了两个publisher。启动的第一个publisher使用了端口号7400、7410、7411,第二个publisher使用了端口号7400、7412、7413。

dds流量有两类:发现流量和用户流量。发现流量(PDP/EDP)用于particiapant以及eriter/reader之间的发现;用户流量用于收发用户数据。

 

发现流量需要用到多播和单播。发现流量是用户流量的基础,只有相互发现的writer/reader之间才能够进行数据传输。发现流量作为dds工作的基础和发起点,发现流量没有前置条件,所以在同一个domain内,发现流量多播端口号需要时众所周知的。

发现流量:多播端口=PB + DG * domainId + d0

 其中PB是portBase,DG是domainIdGain,d0取值为0。

多播端口只受domaiId影响,所以在同一个domain内的所有participant均使用相同的多播端口,这也说明只有在同一个domain内的participant才能相互发现。

每一个participant创建之后,都要通过多播的方式想多播组内发布自己的信息。发现过程除了使用多播,还会使用单播。假如一个domain内有3个participant,分别为A、B、C。假如A发布的多播消息,那么B和C都会收到,如果B和A之间有相同topic的writer和reader,也就是说B和A是可以通信的,那么B就会向A发送单播消息,进行后续的协商,后边的协商过程均通过单播来实现。这里跟tcp建立连接的过程是有些相似的,tcp建立连接时,客户端需要向服务端发起连接,tcp服务端接收连接请求的是监听套接字,这个套接字类似与多播流量;当监听套接字收到连接请求后,会在创建一个新的套接字与客户端形成连接,后边的用户流量都通过新的套接字来进行。

发现流量:单播端口=PB + DG * domainId + d1 + PG * participantId

如果domainId是0,participantId也是0,那么发现流量的多播端口是7400,单播端口是7410。在函数RTPSParticipantImpl::createReceiverResources中,首先使用7410端口进行绑定,如果失败,那么会进行重试,重试就是重新选择一个新的端口来使用。在函数RTPSParticipantImpl::applyLocatorAdaptRule中选择新的端口,选择新的端口的算法就是在端口的基础上加上delta,默认情况下delta是2。

单播端口也不完全由domainId和participantId来决定。participantId的分配如下代码所示,同一个进程的同一个domain内,participantId都是从0开始的,也就是说participantId并不是domain内唯一的,而是domain和进程内唯一的。

如果我们使用udp传输层,但是publisher和subscriber在同一台机器上的两个进程中,那么两者的participantId都是0,那么两个进程都要使用单播端口7410吗?这样显然是不对的。

uint32_t RTPSDomainImpl::getNewId()

{

    // Get the smallest available participant ID.

    // Settings like maxInitialPeersRange control how many participants a peer

    // will look for on this host.

    // Choosing the smallest value ensures peers using unicast discovery will

    // find this participant as long as the total number of participants has

    // not exceeded the number of peers they will look for.

    uint32_t i = 0;

    while (m_RTPSParticipantIDs[i].reserved || m_RTPSParticipantIDs[i].used)

    {

        ++i;

    }

    m_RTPSParticipantIDs[i].reserved = true;

    return i;

}

bool RTPSParticipantImpl::createReceiverResources(

        LocatorList_t& Locator_list,

        bool ApplyMutation,

        bool RegisterReceiver,

        bool log_when_creation_fails)

{

   ...

    for (auto it_loc = input_list.begin(); it_loc != input_list.end(); ++it_loc)

    {

        Locator_t loc = *it_loc;

        bool ret = m_network_Factory.BuildReceiverResources(loc, newItemsBuffer, max_receiver_buffer_size);

        if (!ret && ApplyMutation)

        {

            uint32_t tries = 0;

            while (!ret && (tries < m_att.builtin.mutation_tries))

            {

                tries++;

                applyLocatorAdaptRule(loc);

                ret = m_network_Factory.BuildReceiverResources(loc, newItemsBuffer, max_receiver_buffer_size);

            }

        }

        ...

}

Locator_t& RTPSParticipantImpl::applyLocatorAdaptRule(

        Locator_t& loc)

{

    // This is a completely made up rule

    // It is transport responsibility to interpret this new port.

    uint16_t delta = m_att.port.participantIDGain;

    if (metatraffic_unicast_port_ == loc.port)

    {

        metatraffic_unicast_port_ += delta;

    }

    loc.port += delta;

    return loc;

}

 

一般情况下,用户的流量使用单播来进行,计算公式如下。同样的,如果单播端口已经被占用,那么就会进行重试,重试的算法是在上一个端口的基础上加2。

用户流量:单播端口=PB + DG * domainId + d3 + PG * participantId

 

这样我们就能知道下图中的端口分别是做什么用的了:

7400:两个进程的都会使用的组播端口,用于发现流量

7410:5013进程发现流量的单播端口

7411:5013进程用户流量的单播端口

 

7412:5025进程发现流量的单播端口

7413:5025进程用户流量的单播端口

 

共享内存借用UDP中端口的概念,还是使用例子delivery_mechanisms,指定传输层是SHM,在/dev/shm下可以看到如下文件,其中7400、7410、7411、7412、7413也是用来标记通信的端口。

 

http://www.dtcms.com/wzjs/578729.html

相关文章:

  • 免费网站域名申请做企业网站服务商
  • 心理教育网站建设目的九江建网站多少钱
  • 摄影网站的需求分析未成年在线观看视频播放免费
  • 安徽合肥制作网站公司吗建设工程质量检测网站
  • 怀化人社网站html网站开发相关书籍
  • 合肥网站建设的公司不良网站进入窗口
  • 做白酒用哪个分类信息网站网站切换图片做背景怎么写
  • 建设网站的公司济南兴田德润o简介图片定制网站建设程序流程
  • 2345网址导航站住房和城乡建设部网站唐山
  • 网站规划设计的一般流程门户网站建设的意义
  • 易安卓做网站ui设计的发展趋势
  • 龙华做手机网站威海市临港区建设局网站
  • 北京律师网站建设网站开发语言有哪几种
  • 电子商务网站开发基本流程图app制作公司报价
  • 方法数码做的网站怎么样想做电商从哪里入手
  • 天津网站建设专家时尚网站设计教程
  • 杭州网站建设公司哪家好个人网页设计作品模板学生
  • 公司网站设计 上海网站可信度
  • 正能量软件不良网站免费入口官网建设报价
  • 济南网站建设与维护商丘做网站汉狮网络
  • 厦门网站建设案例贵州省建设学校官方网站
  • 礼品网站建设网络网站是多少钱一年
  • 内容型网站有哪些出色的网站
  • 厚街镇网站建设公司网站排名易下拉技术
  • 誉重网站建设公司福建建设执业管理中心网站
  • h5网站系统外贸网站开发公司
  • 如何利用源代码做网站网站这么做优化
  • 网站建设古典风格建设工程公司经营范围
  • 重庆金建站自动翻译wordpress中文标签别名为英文
  • 济南做网站设计淘宝网页版登陆