基础知识-网络-TCP三次握手

2019-07-15 17:00:09 浏览数 (1)

一 为什么搞这个?

    从今天开始,尽量再多更一篇基础知识,基本都是面试时的高频基础知识问题,会包括网络 操作系统 组成原理,一来帮大家回忆,二来通过面试。毕竟作为一名工程师,底子要深厚,生产时出了错,知道原理,就会有底气得多~而原理,都是来源于我们学习的基础知识~

二 今天先来网络的,TCP三次握手

    网络协议中,TCP是多么地重要,不用我多说,今天先给大家讲一下三次握手~

从网上找一张图:

三 开讲!

    1.先解释下名词:

    SYN,同步序号,是1,它表示建立连接。TCP规定SYN=1时不能携带数据,但要消耗一个序号。因此随机选取一个seq=x的数据包。

    ACK,确认序号,是1,它表示响应。都响应了,那么上一次连接就是成功的

    seq,序列号,发送端数据包的初始序号,表示发送端数据包的初始序列号为x,为第x号帧。

    ack,确认号,表示对收到数据包的确认,以及对下次收到数据包的期待。ack=x 1,表示我方对到x为止的数据包都收到了,且告知对方:我期待你下次给我发送的数据包的序列号为x 1。

    为了方便理解,大家可以认为,SYN和ACK是协议层面的标记、seq和ack是数据方面的标记

    2.三次握手

        (1)第一次握手

客户端建立连接,SYN=1

此时客户端进入syn_sent状态,表示等待服务端的回复。

(2)第二次握手

       服务端确认,并,建立连接

        所以ACK=1,SYN=1

        (3)第三次握手

四 经典面试题

Q:为什么TCP需要三次握手,而不是两次握手?

答:谢希仁版《计算机网络》中,是这样解释的:

    主要是为了防止已失效的连接请求报文段,突然又传到了服务端。

    对于客户端A和服务端B

    我们假定出现了这样一种异常情况:即客户端A发出的,第一个连接请求报文段,并没有丢失,而是在某些网络节点长时间滞留了,一直到,连接释放之后的某个时间,才到达服务端B。本来这是一个早已失效的报文段,但B就会认为,这是A发出的一次新的连接请求,于是向A发送了确认连接。对于两次握手来说,B发送了确认连接,就建立起了TCP连接,这样B一直等待A发送数据包,服务端的很多资源就白白浪费了。

五 总结

明天预告:二叉树 四次挥手

0 人点赞