linux – TCP / IP-over-Ethernet网络的延迟
你会推荐哪些资源(书籍,网页等):
>解释TCP / IP-Ethernet网络中延迟的原因; 我所知道的最接近的是this document,但它相当简短. 或者,欢迎您直接回答上述问题. 编辑要明确,问题不仅仅是“异常”延迟,而是关于延迟.此外,它特别是关于以太网上的TCP / IP而不是其他协议(即使它们具有更好的延迟特性). 解决方法
关于延迟的内核可调参数,请记住:
echo 1 > /proc/sys/net/ipv4/tcp_low_latency 从documentation:
您还可以在应用程序中禁用Nagle的算法(这将缓冲TCP输出,直到最大段大小),例如: #include <sys/types.h> #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <linux/tcp.h> int optval = 1; int mysock; void main() { void errmsg(char *msg) {perror(msg);exit(1);} if((mysock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0) { errmsg("setsock failed"); } if((setsockopt(mysock,SOL_SOCKET,TCP_NODELAY,&optval,sizeof(optval))) < 0) { errmsg("setsock failed"); } /* Some more code here ... */ close(mysock); } 这个选项的“反面”是TCP_CORK,它将“重新Nagle”数据包.但请注意,因为TCP_NODELAY可能并不总是按预期执行,并且在某些情况下可能会损害性能.例如,如果要发送批量数据,则需要最大化每个数据包的吞吐量,因此请设置TCP_CORK.如果您的应用程序需要立即交互(或者响应比请求大得多,否定开销),请使用TCP _NODELAY.另一方面,这种行为是特定于Linux的,并且BSD可能不同,因此需要注意管理员. 确保使用您的应用程序和基础结构进行全面测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |