某次小猪接到一个很重要的电话,于是便有了以下场景:
Other:诶,你好,是xxx吗?,
Me:你好,是我,能听见我说话吗?
Other:能听见,那我们聊正事吧。
Me:好的,开始吧。
Other:xxxxxx
这个过程让我瞬间想起来咱们经典的TCP链接三次握手的过程。
网上找了张TCP三次握手的过程图片:
对照这这张图,结合我的事件,我们来理解一下.
这里我作为服务端,一直在电话旁等着电话,属于监听状态。
对方联系我,向我发起了电话请求,接通之后互相确认“我说话你能听见么?”以及“我能听见你说话么?”
Other(客户端):我说话了,你能听见吗?–第一次握手:我自己说话是OK的,你啥情况我完全不知道
Me(服务端):我能听见,我说话你能听见吗?–第二次握手:你说话OK,我听力OK,我说话OK,
Other(客户端):能听见,我们聊正事吧。–第三次握手:我听力OK,你说话OK
Me(服务端):好的,开始吧。– 开始发送请求的具体内容。
对着上面这张图,应该更好理解。
最后做个总结:
为了保证数据能到达目标,TCP采用三次握手策略:
- 发送端首先发送一个带SYN(synchronize)标志的数据包给接收方【第一次的seq序列号是随机产生的,这样是为了网络安全,如果不是随机产生初始序列号,黑客将会以很容易的方式获取到你与其他主机之间的初始化序列号,并且伪造序列号进行攻击】。
- 接收端收到后,回传一个带有SYN/ACK(acknowledgement)标志的数据包以示传达确认信息【SYN 是为了告诉发送端,发送方到接收方的通道没问题;ACK 用来验证接收方到发送方的通道没问题】。
- 最后,发送端再回传一个带ACK标志的数据包,代表握手结束若在握手某个过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。