TCP三次握手、四次挥手
-
TCP的特点
-
TCP三次握手
-
- TCP的标志位
-
TCP三次握手图解
-
TCP三次握手说明
-
为什么要三次握手
-
TCP四次挥手
-
- TCP四次挥手图解:
-
TCP四次挥手说明
-
为什么要四次挥手
-
TIME-WAIT阶段要等待2MSL
先了解一下TCP的特点
=====================================================================
-
TCP是面向连接的
-
TCP提供可靠的服务:数据无差错,不丢失,不重复,按序到达
-
TCP面向字节流
-
TCP是一对一的
======================================================================
了解TCP三次握手的过程之前,需要先了解TCP的关键标志位
-
SYN,简写为S,同步标志位,用于建立会话请求,同步序列号;
-
ACK,简写为.,确认标志位,确认已接受的数据包;
-
FIN,简写为F,完成标志位,表示传输完毕,将要关闭连接
若SYN=1,ACK=0,表示是来自发送方的一个“连接请求”;
若SYN=1,ACK=1,表示接收方“同意接受连接请求”。
第一次握手:客户端主动打开连接,将TCP报文标志位SYN置为1,并随机产生一个序号值seq=x(SYN=1,ACK=0,seq=x,请求连接),发送数据包给服务端。发送完毕进入SYN-SENT状态;
第二次握手:服务端接收到标志位为SYN=1,ACK=0的数据包,得知客户端请求建立连接。服务端将标志位置作:SYN=1,ACK=1,ack=x+1,并随机产生序号值seq=y;发送数据包给客户端,同意建立连接。进入SYN-RCVD状态。
第三次握手:客户端得到了服务端的确认。检查ACK是否为1,ack是否为x+1。若是的话,则ACK=1,ack=y+1。服务端再检查,ACK是否为1,ack是否为y+1。若正确则建立好连接通道。
如果不要第三次握手:只要A发出请求,B接受请求,就建立连接。
为什么要第三次握手?
举个例子:
客户端A发出的第一次连接请求报文,由于某种原因,长时间滞留。一直到客户端A发出第二个连接请求后到达,那么服务端B则会认为A又发出了一次连接请求,于是接受A的第一次连接请求并确认连接。因为只通过前两次握手就可以建立连接。然而,B一直在等待A发送数据,A实际上并不发送数据了,这就造成了B的资源浪费。
如果有第三次握手:
A向B发送连接请求,B确认连接,还需要A的再次确认,才可以建立连接。上面的例子中,如果有第三次握手,那么B得不到A建立本次连接的再次确认,就不会建立连接。这次连接请求就失效了。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!
可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。
付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!
可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。