为什么 postgresql 服务器有一个 `localhost:57504` 到 `localhost:57504` UDP“连接”?

为什么 postgresql 服务器有一个 `localhost:57504` 到 `localhost:57504` UDP“连接”?
$ sudo netstat -ap | grep postg
tcp        0      0 localhost:postgresql    0.0.0.0:*               LISTEN      1567/postgres       
udp        0      0 localhost:57504         localhost:57504         ESTABLISHED 1567/postgres       
unix  2      [ ACC ]     STREAM     LISTENING     27116    1567/postgres        /var/run/postgresql/.s.PGSQL.5432

为什么postgresql服务器有一个localhost:57504UDP localhost:57504“连接”?这意味着什么?

谢谢。

答案1

稍微挖掘一下这是统计收集器。显然统计数据发布在本地环回(又名本地主机)UDP 上。看这里:http://www.neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf。本质上,PostgreSQL 的不同(后端)子进程正在使用此 UDP 端口将统计信息发送到统计收集器。您所看到的是等待接收消息的“监听”套接字。

端口 57504 是临时端口。这意味着没有人选择它,它是在运行时随机分配的。此处注明: https://www.postgresql.org/message-id/[电子邮件受保护]

请注意,UDP 与 TCP 有很大不同,因为它不关心连接。 UDP 套接字的行为更像是一个邮箱;接受来自任何地方的消息并将其发送到每个消息的地址。所以远程主机和远程端口往往可以被忽略。

UDP也不关心是否收到数据包。我怀疑选择 UDP 是因为即使统计收集器被淹没,后端也永远不会等待统计收集器。

相关内容