TCP连接的通告窗口和缓冲区大小

3050阅读 0评论2013-07-03 joepayne
分类:

TCP在建立连接的时候,SYN分节会相互通告窗口,此窗口就是TCP内核的缓冲区大小,通常要求其为MSS的偶数倍。
 
为了充分利用TCP连接,需要估计TCP连接的传输速度和RTT值,得到在网络上传输的字节流大小,通过SO_RCVBUF和SO_SNDBUF可以查看本地socket的发送和接受缓冲区大小。
 
SO_RCVLOWAT和SO_SNDLOWAT 表示本地TCP接受low water,如果接受的字节大于该值,内核将其标识为可读;如果发送缓冲区的可用空间大于SO_SNDLOWAT,内核将其标识为可写;一般该值缺省为2048字节。
 
具体可查看UNIX网络编程P165。
 
 

  char sock_rcv_buf_size[MAXHOSTNAMELEN];
  int len = sizeof(sock_rcv_buf_size);
  acceptor.get_option(SOL_SOCKET, SO_RCVBUF, sock_rcv_buf_size, &len);
  sock_rcv_buf_size[len] = 0;
  ACE_DEBUG((LM_DEBUG,
             ACE_TEXT ("(%P|%t) Receive buffer size %d %d \n"),
             *(int*)sock_rcv_buf_size, len));


这几行代码可以在ACE上查看缓冲区大小,搞不明白的是,ACE将get_option的第三个参数改成了char*,这样需要自己根据类型做转换。

在WinXP上,接收缓冲区8192字节,发送缓冲区64512字节。

TCP/UDP所返回的缓冲区大小是一致的。

上一篇:字符串相关问题(一)
下一篇:与文件相关的几个“表”