前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识-网络-TCP三次握手

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

作者头像
BUPTrenyi
发布2019-07-15 17:00:09
3860
发布2019-07-15 17:00:09
举报
文章被收录于专栏:算法其实很好玩

一 为什么搞这个?

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

二 今天先来网络的,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发送数据包,服务端的很多资源就白白浪费了。

五 总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法其实很好玩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档