TCP的三次握手和四次挥手
TCP的原理,作为一个应用开发者来说,可能在平常开发中,99%时间用不上。因为平常用得网络框架比如OkHttp等都已经帮我们封装好,我们不需要知道里面的原理直接用接口即可,很简单。 但是作为一个优秀的开发者,我们必须要知其然也需要知其所以然。而且特别在面试的时候, TCP握手和挥手原理经常被问到,如果答得上来,容易加分.... 闲话少说,直接上原理图 【 三次握手 】 具体流程: 1:客户端(Client)尝试请求连接,会随机产生一个数Sequence码 X,发给服务端(Server) 2:服务端拿到了客户端发过来的 Sequence码 X ,会 将 X + 1 生成 ACK码,然后自己也会随机产生一个数Sequence码Y 然后把ACK 和 Y 一同打包发给 客户端 3:客户端拿到客户端反馈的 ACK 和 Sequence码,先验证 ACK 是否在 X 加了1,是就代表服务端反馈的就是自己之前的请求。 然后再把 Sequence码Y 加 1,生成ACK码,把 ACK码返回给服务端。 (同理服务端也会验证 返回的ACK码是否在Sequence码Y基础上加了1 ) 至此,握手通讯成功,可以传递数据... 疑问1:为什么传递数据前要3次握手通讯,而不是直接传递数据呢?????? 因为要保证连接的有效性,避免资源浪费。试想客户端发了连接请求给服务端,由于网络拥挤等异常原因