tcp三次握手。
关于tcp三次握手举例。
首先, 在尝试建立链接时,tcp client先发送请求syn至server,这是第一次。
然后server收到此syn,并进行ack相应,并发送syn至client确认对方状态,这是第二次。
最后client收到server的syn并返回ack,这是第三次,然后数据就开始传输。
总结一下其实就是,
client:你准备好接受和我链接了吗(syn)(第一次)
server:我现在是可以的(ack)你呢(syn)(第二次)
client:我也可以(ack)(第三次)
在建立连接时是三次握手,可是在关闭连接时是四次握手。(四次挥手)
之所以这样的理由是server并不能保证即时关闭,例如还在提供数据。
因此,此时。变成了这样:
client:你准备好关闭了吗(syn)(第一次)
server:收到了你的消息可是还需要准备一下(ack)(第二次)
client:(等待)
(一段时间后,server发送完了报文)
server:现在我准备好了(syn)(第三次)
client:好的,那就断开连接(ack)(第四次)
关于为什么要使用三次握手,或者为什么三次握手显示了tcp协议可靠性?
这一点我们可以通过假设举例来看。
因为网络存在拥塞,丢包等复杂的情况,因此,很有可能在连接时client发向server的syn被阻塞了。
而client因为长时间没有收到server的ack于是重新发送syn请求,可能就连上了或者怎么样。
自此第一次发出的syn被client遗忘了,也就是,client可能已经不想连接了。
若干时间后,阻塞的syn终于到达了server,于是server回响ack,如果不是三次握手,则本次发送后,server默认与client已经建立了连接,但client本身可能毫不知情。于是server为了等待他所认为可能存在的数据交互,与维护他认为存在的数据传输通道付出了本不必付出的资源和额外的等待时间。
这就是不采用三次的坏处,或者说是三次握手所避免的情况。