检查打开的套接字上的 Nagle 算法

检查打开的套接字上的 Nagle 算法

我们使用的平台之一打开了 TCP 套接字(没有可用的源代码)。

我需要检查这些套接字上的 Nagle 算法是否被禁用或启用。

使用的操作系统可以是Windows或Linux,并且我们知道开放的端口。

任何工具和想法:)

答案1

Nagle 算法默认处于启用状态,但可以在setsockopt系统调用中使用标志 TCP_NODELAY 将其禁用。

Linux 下的一种方法是使用以下方法跟踪 setsockopt 斯特拉斯.然后可以通过以下调用来跟踪网络活动:

strace -o /tmp/strace.out -s 10000 -e trace=network -fp PID

这将跟踪 bind、listen、socket、setsockopt 的调用。

如果你的 Linux 发行版包含systemtap,那么你可以使用命令 p文件

用法示例来自这个答案

$ ./pfiles.stp `pgrep udevd`
   787: udevd
  Current rlimit: 32 file descriptors
   0: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3
      O_RDWR|O_LARGEFILE 
      /dev/null
   1: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3
      O_RDWR|O_LARGEFILE 
      /dev/null
   2: S_IFCHR mode:0666 dev:0,15 ino:396 uid:0 gid:0 rdev:1,3
      O_RDWR|O_LARGEFILE 
      /dev/null
   3: S_IFDIR mode:0600 dev:0,9 ino:1 uid:0 gid:0 rdev:0,0
      O_RDONLY 
      inotify
   4: S_IFSOCK mode:0777 dev:0,4 ino:2353 uid:0 gid:0 rdev:0,0
      O_RDWR 
      socket:[2353]
      SO_PASSCRED,SO_TYPE(2),SO_SNDBUF(111616),SO_RCVBUF(111616)
        sockname: AF_UNIX
   5: S_IFSOCK mode:0777 dev:0,4 ino:2354 uid:0 gid:0 rdev:0,0
      O_RDWR 
      socket:[2354]
      SO_TYPE(2),SO_SNDBUF(111616),SO_RCVBUF(33554432)
        ulocks: rcv
   6: S_IFIFO mode:0600 dev:0,6 ino:2355 uid:0 gid:0 rdev:0,0
      O_RDONLY|O_NONBLOCK 
      pipe:[2355]
   7: S_IFIFO mode:0600 dev:0,6 ino:2355 uid:0 gid:0 rdev:0,0
      O_WRONLY|O_NONBLOCK 
      pipe:[2355]

相关内容