In computer networking, RWIN (TCP Receive Window) is the amount of data that a computer can accept without acknowledging the sender.
If the sender has not received acknowledgement for the first packet it sent, it will stop and wait and if this wait exceeds a certain limit, it may even retransmit.
This is how TCP achieves reliable data transmission.
UDP, unlike TCP is a connectionless protocol and will just keep sending traffic. There is no window size, for this reason you might want to limit your UDP traffic...
شایان ذکر است که می توان از مقدار TCP Window Size برای شناسایی نوع سیستم عامل استفاده نمود. به این روش، انگشت نگاری از سیستم عامل (OS Fingerpringring) می گویند. این مقدار را می توان به سادگی با پایش ترافیک (Passive Analysis)، در سرآیند IP اولین بسته یک جلسه TCP مشاهده نمود. دلیل اصلی این که سیستم عامل ها دارای مقادیر یکسانی نبوده و متفاوت هستند، در این نکته نهفته است که در RFC مربوط به TCP/IP مقادیر پیش فرضی در این خصوص قید نشده است و هر سیستم عامل عدد مخصوص به خود را دارد.
Operating System |
Time To Live |
TCP Window Size (Bytes) |
Linux (Kernel 2.2) |
64 |
32120 |
Linux (Kernel 2.4 and 2.6) |
64 |
5840 |
Google Linux |
64 |
5720 |
FreeBSD |
64 |
65535 |
OpenBSD |
64 |
16384 |
Windows 2000 SP1, SP2 |
128 |
17520 |
Windows 2000 SP3, SP4 |
128 |
65535 |
Windows XP |
128 |
65535 |
Windows Vista and 7 (Server 2008) |
128 |
8192 |
iOS 12.4 (Cisco Routers) |
255 |
4128 |
اما!!!...
The user options for LwIP are changed in file LwIPopt.h...
...
/*MSS should match the hardware packet size */
#define TCP_MSS 1460 // TCP maximum segment size.
#define TCP_SND_BUF (2 * TCP_MSS) // TCP send buffer space for a connection
...
#define TCP_WND (8 * TCP_MSS) // TCP window size of 8 segments
8 * TCP_MSS = 8192
در مثال iperf_server ما گیرنده هستیم! پس، مقدار TCP_WND مهم است!
opt.h
/**
* TCP_WND: The size of a TCP window. This must be at least
* (2 * TCP_MSS) for things to work well
*/
#ifndef TCP_WND
#define TCP_WND (4 * TCP_MSS)
#endif
...
/**
* TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
* you might want to increase this.)
* For the receive side, this MSS is advertised to the remote side
* when opening a connection. For the transmit size, this MSS sets
* an upper limit on the MSS advertised by the remote host.
*/
#ifndef TCP_MSS
#define TCP_MSS 536
#endif
در مثال iperf_server ما گیرنده هستیم! پس، مقدار قابل قبول برای TCP Maximum Segment Size را به فرستنده اعلان می کنیم.
به یاد داشته باشیم!...در روترهای سیسکو اندازه پیش فرض MSS، 536 بایت و در کامپیوترهای خانگی، 1460 بایت است!
خب! این پیغام یعنی چی؟
MSS and MTU size unknown (TCP_MAXSEG not supported by OS?)
نمی دانم!
Maximum Segment Size!!! ... MSS = MTU - TCPHdrLen - IPHdrLen
The MSS is usually the MTU - 40 bytes for the TCP/IP header. For ethernet, the MSS is 1460 bytes (1500 byte MTU)