首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘-f’和‘-a’of‘A`’有什么区别?

‘-f’和‘-a’of‘A`’有什么区别?
EN

Unix & Linux用户
提问于 2019-03-23 00:20:19
回答 1查看 172关注 0票数 -4

-f-A of ss有什么区别?

-f-A中哪一个与-t, -u, -4, -6, -w, -x有关?

-A inet,packet是否意味着-A tcp,udp,raw

我知道一些套接字概念,但无法理解手册中的术语。

谢谢。

-f显示家庭类型的套接字。目前支持的家庭有: unix,inet,inet6,link,netlink。要转储的套接字表的-A查询列表,用逗号分隔。可以理解以下标识符: all、inet、tcp、udp、raw、unix、packet、netlink、unix_dgram、unix_stream、unix_seqpacket、packet_raw、packet_dgram。

EN

回答 1

Unix & Linux用户

发布于 2019-03-23 01:32:01

-4, -6, -x -按手册页。

-t-u-w --所有这些都对应于套接字表。

-A inet,packet是否意味着-A tcp,udp,raw?

inet包含所有的tcpudpraw,以及大概还包括dccpsctp。我假设all在某种程度上是合成的,所以我假设inet是类似的。

我注意到当指定重叠的“套接字表”值时,例如-A tcp,inetss不显示重复值。

我认为-A packet-A raw是不相交的。所以我认为-A inet,packet应该比-A tcp,udp,raw更严格地展示.

提防

-A raw-A packet看起来像是在做相关的事情,但是它们之间有一些实际的区别。ss目前将所有数据包套接字视为侦听套接字,*但是(大多数?)如果传递了-l选项,则显示原始套接字,如果未传递-l选项,则显示原始套接字。通常使用的原始和包套接字不多。如果您看看这个,并且决定您甚至不想在这里信任-l,您可以使用ss -a -A raw,packet列出所有原始的和包的套接字。

更奇怪的是,ss无法确定raw表中的数据包是否属于link地址家族,是否:

代码语言:javascript
复制
# ss -A raw -p
State    Recv-Q   Send-Q     Local Address:Port             Peer Address:Port                                                                                   
UNCONN   0        0                0.0.0.0:ipproto-255           0.0.0.0:*       users:(("atop",pid=26422,fd=4))                                                
UNCONN   0        0                      *:ipv6-icmp                   *:*       users:(("NetworkManager",pid=1317,fd=17))                                      
# ss -f link -p
Netid    Recv-Q    Send-Q       Local Address:Port         Peer Address:Port                                                                                    
p_raw    0         0                        *:wlp2s0                   *         users:(("dhclient",pid=20548,fd=5))                                            
p_dgr    0         0                  [34958]:wlp2s0                   *         users:(("wpa_supplicant",pid=1406,fd=13))                                      
p_dgr    0         0                      [0]:*                        *         users:(("wpa_supplicant",pid=1406,fd=16))                                      
p_dgr    0         0                      [0]:*                        *         users:(("wpa_supplicant",pid=1406,fd=12))                            
# ss -A raw -f link -p
Netid  State   Recv-Q  Send-Q   Local Address:Port           Peer Address:Port                                                                                  
???    UNCONN  0       0              0.0.0.0:ipproto-255         0.0.0.0:*      users:(("atop",pid=26422,fd=4))                                                
icmp6  UNCONN  0       0                    *:ipv6-icmp                 *:*      users:(("NetworkManager",pid=1317,fd=17))                            

同样,它似乎无法决定这两个选项是否与AND或OR相结合。ss -A all -f link提供与ss -A all相同的输出。但是ss -A raw -f link给出的行数比ss -f link少。

此外,link地址家族的概念似乎是ss特有的。Linux没有AF_LINK,它有AF_PACKET

名称“套接字表”听起来像是指内核中的本机表。因此,准确地列出tcp套接字是非常有效的--例如,我们只列出整个表。

但是,我可以看到旧的纯文本/proc接口列在旧的man netstat中.而且这些表不完全匹配,例如,tcptcp6有单独的表。嗯。

实际情况是内核哈希表是针对inet6的,然后是inet6的另一个表.我真的不能理解ss“套接字表”v.s. sock_diag,它似乎是由ss组成的。

man ss中提到的筛选器表达式之类的选项可能比它们需要扫描的表的大小要少得多。从这个意义上说,它们可能比转储内核返回的整个列表的效率更低。

我认为我们不太可能需要担心效率。

Notes

*证明:strace表明,当您要求ss在不传递-l的情况下列出数据包套接字时,它什么也不做:

代码语言:javascript
复制
$ strace -f -e '!mprotect,mmap,read,write,lseek' ss -A packet

...

openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=258624, ...}) = 0
mmap(NULL, 136384, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbffcade000
mmap(0x7fbffcae4000, 65536, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fbffcae4000
mmap(0x7fbffcaf4000, 24576, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7fbffcaf4000
mmap(0x7fbffcafa000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0x7fbffcafa000
mmap(0x7fbffcafc000, 13504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbffcafc000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbffcadc000
arch_prctl(ARCH_SET_FS, 0x7fbffcadce40) = 0
munmap(0x7fbffcdc7000, 199180)          = 0
set_tid_address(0x7fbffcadd110)         = 2588
set_robust_list(0x7fbffcadd120, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7fbffcae4c50, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fbffcaf1030}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7fbffcae4ce0, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7fbffcaf1030}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", {f_type=SELINUX_MAGIC, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0
statfs("/sys/fs/selinux", {f_type=SELINUX_MAGIC, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0
brk(NULL)                               = 0x563e25ce6000
brk(0x563e25d07000)                     = 0x563e25d07000
access("/etc/selinux/config", F_OK)     = 0
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbffc9db000
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=35, ws_col=150, ws_xpixel=0, ws_ypixel=0}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0

[ss output starts here]
State              Recv-Q              Send-Q                           Local Address:Port                             Peer Address:Port              
[ss output ends]

munmap(0x7fbffc9db000, 1052672)         = 0
exit_group(0)                           = ?
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/508098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档