Date: Mon, 16 Jan 1995 13:30:08 +0100 From: Andras Olah <olah@cs.utwente.nl> To: Garrett Wollman <wollman@halloran-eldar.lcs.mit.edu> Cc: hackers@FreeBSD.org Subject: Netinet internals (Was: Patching a running kernel) Message-ID: <21232.790259408@utis156> In-Reply-To: Your message of Fri, 13 Jan 1995 15:07:10 EST
next in thread | raw e-mail | index | archive | help
On Fri, 13 Jan 1995 15:07:10 EST, Garrett Wollman wrote: > Create a sysctl interface for it. It's trivial to do. Thanks, done. > -GAWollman > > PS: How's T/TCP coming? (FYI: T/TCP is an extension of TCP for transactions [RFC-1644] I'm trying port to FreeBSD with the help of Garrett. Interested people can get the current - buggy - code from me. My observations with stock 2.0 networking code maybe interesting for people on this list, so I cc'd it to hackers.) A bit slowly, I'm sorry for it. I haven't had much time since the status report I forwarded to you before X-mas (I hope you got it). It seems that I have to dive deeper into tcp_input/tcp_output to really understand what goes wrong. During the last week, I made some experiments with the stock 2.0 code and found some problems. I want to straighten them out before further debugging the T/TCP extensions. /* * If this is a small packet, then ACK now - with Nagel * congestion avoidance sender won't send more until * he gets an ACK. */ if ((unsigned)ti->ti_len < tp->t_maxseg) { tp->t_flags |= TF_ACKNOW; tcp_output(tp); } else { tp->t_flags |= TF_DELACK; } The above code fragment from tcp_input (in the header pred code and at the end of the `slow' path) has a number of bad effects (1) every character in telnet sessions is echoed in two packets (immediate ACK and then the echoed character); (2) in bulk transfer (series of full sized packets) when options are used: because ti_len = maxseg - length of options every packet will be acked immediately, and window updates after application reads will always be in a separate packet. Thus in short, all the advantages of delayed ACKs are lost. The alignment by rounding of the MSS to a nice value in tcp_mss is also lost if options are used, because the actual data length in packets will be MSS - options. This is less important now because the ethernet MTU is less than MCLBYTES, but will decrease efficiency over ATM or FDDI, for example. Finally, even if I switch off the do_rfc1323 flag (to assure that MSS sized packets are sent), I don't quite understand the implementation of delayed acks. Using ttcp with 16k read/writes on the loopback interface (MTU set to 1500), I collected traces where 10 segments were sent in a series and then the receiver acked them in one ACK. Isn't it a violation of RFC-1122 which requires that at least every second MSS sized segment should be acked? I couldn't find any code in tcp_input that set ACKNOW or needoutput when two MSS sized segments were received since the last ACK was sent. Did I miss something here? Andras
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?21232.790259408>