TCP 三次握手和四次挥手的问题在面试中是最为常见的考点之一。很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答。
本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地地理解 TCP 交互的本质。
TCP 三次握手
TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己。
img
张三首先向李四招手( syn ),李四看到张三向自己招手后,向对方点了点头挤出了一个微笑( ack
)。张三看到李四微笑后确认了李四成功辨认出了自己(进入 estalished 状态)。
但是李四还有点狐疑,向四周看了一看,有没有可能张三是在看别人呢,他也需要确认一下。所以李四也向张三招了招手( syn
),张三看到李四向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出了微笑( ack
),李四看到对方的微笑后确认了张三就是在向自己打招呼(进入 established 状态)。
于是两人加快步伐,走到了一起,相互拥抱。
img
我们看到这个过程中一共是四个动作,张三招手–李四点头微笑–李四招手–
张三点头微笑。其中李四连续进行了2个动作,先是点头微笑(回复对方),然后再次招手(寻求确认),实际上可以将这两个动作合一,招手的同时点头和微笑(
syn+ack )。于是四个动作就简化成了三个动作,