本文共 2116 字,大约阅读时间需要 7 分钟。
什么是TCP
TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议;
在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议
全双工模式
telnet/ssh/ftp/http都建立在TCP上
三次握手协议
建立连接
连接方 SYNà 接收方
ßSYN|ACK
ACK à
关闭连接
连接方 FINà 接收方
ßFIN|ACK
FIN|ACK à 接收方关闭
Time_wait后连接方自动关闭
MTU
对IP包分片,,通常与通信接口有关;
以太网最大MTU为1500,jumboFrames支持最大支持9000
round trip time(RTT):一个数据包从发送到确认被接收所需时间
retransmission timeout(RTO):等待ACK超时重新传输数据包,最小200ms http://www.orczhou.com/index.php/2011/10/tcpip-protocol-start-rto/
TCP Receive Window(RWIN):—接收端在通知发送者之前可接收的数据包大小;
窗口大小取决于接收端为此TCP连接分配的内存大小,同时发送端也需相应设置,因为被发送的数据在被确认接收前,一直缓存在sender的内存中,以便接收失败时重新发送;
bandwidth-delay product(BDP):即在发送和接收端之间正在传输的数据最大bit;高性能的网络都有很大的BDP,假定某链路带宽10 Gbit/s,延迟RTT为0.5s,则其BDP= 0.5 * 10G bit= 5G bit= 625 MB;
性能限制
使用TCP通信协议的链路,其吞吐量除了带宽外,还受TCP窗口和网络延迟的影响;
根据木桶原理,任何一点都可能成为链路的瓶颈;
例如,某链路带宽为1G,网路延迟为30ms,默认的TCP窗口为64KB;
则其实际吞吐量= min(band width, window size/round trip time) = min(1G, 65536/0.03) = min(1G, 17.4M) = 17.4M
为了提高带宽利用率,需要提升window size或降低RTT,但是后者远比前者困难的多;
提升window size需要用到TCP window scale option,可以让TCP接收窗口超过65535字节上限,Linux 2.6.8默认开启此功能tcp_window_scaling;
根据上述公式可反推出TCP window size = bandwidth * RTT = 1 000 000 000 bps * 0.03 s= 30 000 000 bits/8 = 3 750 000 Bytes
注:这些buffer必须位于内存中,不可swap;而且发送端也需要设置同样大小的窗口,因为在确认接收前必须将其保留于内存中,以便发送失败时重发;
另外,任何的包丢失都会导致整个窗口所有包重新传输(除非使用了selective acknowledgement)
相应参数
[oracle@justin ipv4]$ pwd
/proc/sys/net/ipv4
tcp_window_scaling
启用window scale,将窗口上限从64K提升为更高
tcp_moderate_rcvbuf
自动调整接收缓冲
[oracle@justin ipv4]$ more tcp_moderate_rcvbuf
1
tcp_wmem/tcp_rmem
设定TCP连接接收和发送缓存的大小,依次为min/default/max
[oracle@justin ipv4]$ more tcp_wmem
4096 16384 4194304
[oracle@justin ipv4]$ more tcp_rmem
4096 87380 4194304
tcp_sack
启用selectivty acknowledgment,一旦发生丢包只需传送丢失的部分,而不用将整个窗口的包全部重传
[oracle@justin ipv4]$ more tcp_sack
1
tcp_syn_retries
定义SYN重试次数,可一定程度上防止syn flood攻击
SYN flood攻击
向服务器发起tcp连接请求,在服务器回发SYN+ACK之前断线,导致服务器在一定时间内重发直至超时;
如果恶意攻击者大量模拟这种操作,服务器会维护一个非常大的半连接列表从而耗尽CPU资源设置导致堆栈溢出;
[oracle@justin ipv4]$ more tcp_syn_retries
5
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-757720/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15480802/viewspace-757720/