我们都知道, tcp是面向连接的可靠传输, 其中的超时重传是可靠性保证之一。 好了, 不扯那么多理论了, 本来来玩一个简要的实验。
前面说过了, telnet ip port命令是在向ip, port发起tcp连接, 假如这个ip, port不存在, 那么客户端自然连接不上, 那么客户端不会因为一次失败而气馁。
试想一下, 你电话给你女朋友, 但你女朋友没有接, 你当然可以1分钟后再打啦, 如果还不接, 那就再等2分钟后打, 如果还不接, 那就再等4分钟后打, 如果还不接, 再等8分钟后打, 如果还不接, 继续, 租后估计你耐心也没有了, 超出你的心理预期了, 超时了。
废话少说, 来看看:
xxxxxx$ telnet 1.1.1.1 80
Trying 1.1.1.1...
telnet: connect to address 1.1.1.1: Connection timed out
xxxxxx$ 抓包结果为:
xxxxxx$ sudo tcpdump -iany host 1.1.1.1 -Xnlps0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
10:20:32.582494 IP 10.100.70.139.37049 > 1.1.1.1.http: Flags [S],

本文通过一个简单的实验介绍了TCP的超时重传机制,特别是Karn算法。实验中,使用telnet尝试连接不存在的IP和端口,展示了TCP在连接失败时如何逐步增加重传间隔(RTO),从1s到2s再到4s,以此类推,直到达到超时限制。
1016

被折叠的 条评论
为什么被折叠?



