$ 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:57504
到localhost:57504
UDP 的“连接”?这意味着什么?
谢谢。
稍微挖掘一下这是统计信息收集器。显然统计信息发布在本地环回(又名 localhost)UDP 上。见这里: http: //www.neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf。本质上,PostgreSQL 的不同(后端)子进程使用此 UDP 端口将统计信息发送到统计信息收集器。您看到的是等待接收消息的“监听”套接字。
端口 57504 是一个临时端口。这意味着没有人选择它,它是在运行时随机分配的。此处注明: https ://www.postgresql.org/message-id/[email protected]
请注意,UDP 与 TCP 非常不同,因为它不关心连接。UDP 套接字的行为更像邮箱;接受来自任何地方的消息并发送到每个地址的任何地方。所以远程主机和远程端口通常可以忽略。
UDP 也不关心是否接收到数据包。我怀疑选择 UDP 是因为即使统计收集器被淹没,后端也永远不会等待统计收集器。