syslog
由于这是s符号链接到的套接字/dev/log
,我预计至少有一个来自 的侦听套接字systemd-journald
,并且可能还有一些其他连接的套接字,具有不同的“端口”号。/run/systemd/journal/stdout
就是这么做的。
监听套接字:
# ss -xpl | grep stdout
u_str LISTEN 0 4096 /run/systemd/journal/stdout 15240 * 0 users:(("systemd-journal",pid=254,fd=5),("systemd",pid=1,fd=38))
连接对示例:
# ss -xp | grep 19637
u_str ESTAB 0 0 * 20872 * 19637 users:(("dbus-daemon",pid=701,fd=2),("dbus-daemon",pid=701,fd=1))
u_str ESTAB 0 0 /run/systemd/journal/stdout 19637 * 20872 users:(("systemd-journal",pid=254,fd=73),("systemd",pid=1,fd=78))
然而对于 来说dev-log
,似乎没有监听套接字。 systemd-journald 中的单个套接字(“port”=15236)连接到多个对等点,然后在其自己的记录中,该套接字显示为 ESTAB,而对等点“端口”显示为 0。这怎么可能?与 tcp 套接字相比,unix 套接字在这方面的运行方式是否有根本不同?
也许我应该问,输出中的端口号ss
对于 unix 域套接字意味着什么?
# ss -xpl | grep dev-log
# ss -xp | grep dev-log
u_dgr ESTAB 0 0 /run/systemd/journal/dev-log 15236 * 0 users:(("systemd-journal",pid=254,fd=3),("systemd",pid=1,fd=36))
# ss -xp | grep 15236
u_dgr ESTAB 0 0 /run/systemd/journal/dev-log 15236 * 0 users:(("systemd-journal",pid=254,fd=3),("systemd",pid=1,fd=36))
u_dgr ESTAB 0 0 * 19250 * 15236 users:(("dbus-daemon",pid=369,fd=14))
u_dgr ESTAB 0 0 * 101364 * 15236 users:(("su",pid=4448,fd=3))
u_dgr ESTAB 0 0 * 22068 * 15236 users:(("gdm",pid=373,fd=13))
u_dgr ESTAB 0 0 * 20801 * 15236 users:(("(sd-pam",pid=692,fd=8))
u_dgr ESTAB 0 0 * 21686 * 15236 users:(("dbus-daemon",pid=701,fd=10))
u_dgr ESTAB 0 0 * 19589 * 15236 users:(("gdm-session-wor",pid=680,fd=9))
u_dgr ESTAB 0 0 * 104580 * 15236 users:(("sudo",pid=4447,fd=8))
u_dgr ESTAB 0 0 * 14305 * 15236 users:(("polkitd",pid=450,fd=10))
u_dgr ESTAB 0 0 * 23001 * 15236 users:(("gnome-session-b",pid=727,fd=17))
答案1
该/dev/log
文件是u_dgr
unix数据报;这些不需要像流那样“监听”(正在监听u_str
的 或 unix 流 )。/run/systemd/journal/stdout
数据报服务器只需要套接字/绑定/接收调用序列(以及更多),而流服务器则需要执行套接字/绑定/监听/接受(以及更多)。
与 tcp 套接字相比,unix 套接字在这方面的运行方式是否有根本不同?
UNIX 域溪流套接字的运行方式与 TCP 类似。 UNIX 域数据报套接字的运行方式类似于 UDP。然而,Unix 域套接字具有类似管道的方面:例如,Unix 数据报套接字往往不会像 UDP 那样出现数据丢失和乱序传送问题。但是unix域套接字和互联网套接字之间的监听(对于流)或不监听(对于数据报)方面是相同的。
也许我应该问,ss 输出中的端口号对于 unix 域套接字意味着什么?
它可能是内核发明的一个神奇的整数,用于识别特定的套接字,并且可能不是很重要,因为 Unix 域套接字要么是进程内部的(就像管道一样),要么是通过文件系统公开的。无论哪种情况,都无需知道域套接字的幻数即可使用它。