connect() 调用次数 = TCP SYN 段?
我可以运行系统调用日志实用程序。现在我看到的 TCP SYN 数据包的数量不等于我记录的 connect() 系统调用的数量?这可能是什么原因? 是否有其他系统调用在内部连接?
I can running a system call logging utility. Now the number of TCP SYN packets I see are not equal to the number of connect() system calls I record? What can be the reason for this?
Do any other system calls call connect internally?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有各种各样的原因。
如果 connect() 由于地址不可路由而失败,它可能根本不会生成 SYN 数据包(例如 arp 超时)。同样,如果连接因其他错误(例如无效参数)而失败。
SYN 数据包可能会发送到您没有查看的接口(例如本地主机),
内核将重试;如果请求没有得到答复,它将在最终返回超时之前重试(可能会多次)。
There are all sorts of reasons.
If a connect() fails because of an unroutable address, it may never generate a SYN packet at all (e.g. arp timeout). Likewise if connect fails with some other error (e.g. invalid parameters).
The SYN packet might go on an interface you're not looking at (e.g. localhost)
The kernel will retry; if there is no reply to a request, it will try again (probably several times) before eventually returning a timeout.