我可以运行系统调用日志记录实用程序。现在我看到的TCP SYN包的数量不等于我记录的connect()系统调用的数量?这可能是什么原因? 是否有其他系统调用内部调用connect?
答案 0 :(得分:1)
有各种各样的原因。
如果connect()由于地址不可路由而失败,它可能根本不会生成SYN数据包(例如arp timeout)。同样,如果连接失败并出现其他一些错误(例如无效参数)。
SYN数据包可能会进入您未查看的界面(例如localhost)
内核将重试;如果没有对请求的回复,它将在最终返回超时之前再次尝试(可能是几次)。