博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
温习tcp知识
阅读量:2447 次
发布时间:2019-05-10

本文共 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包分片,,通常与通信接口有关;

以太网最大MTU1500jumboFrames支持最大支持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,延迟RTT0.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/

你可能感兴趣的文章
成为产品不一定是坏事
查看>>
Ubuntu 18.04 LTS现在在Microsoft Store中
查看>>
如何检查已安装的Ubuntu版本
查看>>
如何在Windows 10上禁用附近共享
查看>>
gmail_Gmail将提供自毁电子邮件
查看>>
google 禁止广告_是否应禁止针对个人的广告?
查看>>
Plover.io在本地设备之间快速共享文件
查看>>
如何在OS X照片中禁用iCloud照片同步
查看>>
Minecraft的官方网站分发了受恶意软件感染的皮肤
查看>>
word模板快速填内容_如何快速轻松地在Word中选择内容块
查看>>
如何在Word 2013中直接从一个表导航到另一个表
查看>>
twitch 录像_如何通过NVIDIA GeForce Experience将您的PC游戏玩法传送到Twitch
查看>>
vimrc配置 鼠标光标_在“提示”框中:即时调整窗口大小,包含鼠标光标并了解电池配置...
查看>>
询问HTG:安装XBMC附加组件,缩小视频以进行移动播放,自动更改默认打印机
查看>>
High Sierra推出后如何离开macOS公开Beta
查看>>
如何格式化您的WhatsApp消息
查看>>
pixel2pixel_Pixel 2的视觉核心是什么?
查看>>
更改用户账户设置自动更改_您应该更改的5个SimpliSafe设置
查看>>
excel中转换为数值_如何在Microsoft Excel中转换货币
查看>>
netflix怎么上_如何在Netflix上隐藏电视节目和电影
查看>>