TCP三次握手与四次分手
TCP协议非常重要,这里把它的连接和释放整理一下。
首先是三次握手:
1、 客户端发起,像服务器发送的报文SYN=1,ACK=0,然后选择了一个初始序号:seq=x。
SYN是干什么用的?
在链接的时候创建一个同步序号,当SYN=1同时ACK=0的时候,表明这是一个连接请求的报文段。如果对方有意链接,返回的报文里面SYN=1,ACK=1,。从这个意义上来说,SYN=1的时候,就表明这是一个‘请求’或者‘接受请求’的报文。
SYN=1的报文段不能携带数据。但是要消耗掉一个序号,
ACK是干什么用的?
仅当ACK=1的时候,确认字号(期望收到对方下一个报文段的第一个数据字节的编号)才有效。因此,TCP规定,当链接建立之后,所有往来的报文里面的ACK都应该是1(事实上,也只有客户端发起的链接请求报文的ACK没有置1)。
现在的状态:客户端进入SYN-SEND状态;
2、 服务器接收到了SYN=1,ACK=0的请求报文之后,返回一个SYN=1,ACK=1的确认报文。
同时,确认号ack=x+1,同时也为自己选择一个初始序号seq=y
现在的状态:服务器进入SYN-REVD状态;
3、 客户端接收到了服务器的返回信息之后,还要给服务器返回最后一条确认,ACK=1,确认号ack=y+1;
现在的状态:客户端进入ESTABLISHED状态。
下面说一下为什么两次握手不行,非得三次:
首先说明一种正常的情况,就是客户端发送了一条请求链接的报文,但是由于网络原因丢失了,所以,不可能接收到服务器端的确认。这个时候,客户端就就只有再一次发送原来的请求报文,这次服务器收到之后返回确认,客户端再确认一次,链接确立。
然后考虑一种不正常的情况,客户端发了两次请求链接的报文,第二条被服务器捕捉到,返回数据,完成了两次握手。数据传送完成之后,链接关闭。但是这时候,第一条拥塞的请求报文现在到达了服务器端,服务器还以为客户端要又一次建立连接,于是发送确认,然后把自己敞开,等着客户端发送过来数据。于是,很多的网络资源就是这样浪费掉了。
要是实行三次握手,服务器收到了一条过期的请求报文,返回确认信息,客户端接收到了服务器的信息之后感到莫名其妙,心想:我他妈又没要链接,你返回这个是不是疯了。于是不置一词。服务器过一段时间还没有收到第三次握手的数据,知道客户端并没有要求建立链接的请求,含泪离开。
然后是四次分手:
现在双方的状态都是ESTABLISHED状态。
1、 客户端发起请求,请求断开链接。FIN=1,seq=u。u是之前传送过来的最后一个字节的序号+1。
FIN:用来释放一个链接,当FIN=1的时候,表明此报文的发送方已经完成了数据的发送,没有新的数据要传送,并要求释放链接。
客户端进入FIN-WAIT-1状态,等着服务器返回确认;
2、 服务器收到客户端的请求断开链接的报文之后,返回确认信息。ACK=1,seq=v,ack=u+1。
服务器进入CLOSE-WAIT状态。
这个时候,客户端不能给服务器发送信息报文,只能接收。但是服务器要是还有信息要传给服务器,仍然能传送。
3、 当服务器也没有了可以传的信息之后,给客户端发送请求结束的报文。FIN=1,ACK=1,
ack=u+1,seq=w。
这个时候的状态:服务器进入LAST-ACK状态。
4、 客户端接收到FIN=1的报文之后,返回确认报文,ACK=1,seq=u+1,ack=w+1。
发送完毕之后,客户端进入等待状态,等待两个时间周期。关闭。
为什么最后还要等待两个时间周期呢?
1、 客户端的最后一个ACK报文在传输的时候丢失,服务器并没有接收到这个报文。这个候。
服务器就会超时重传这个FIN消息,然后客户端就会重新返回最后一个ACK报文,等待两个时间周期,完成关闭。如果不等待这两个时间周期,服务器重传的那条消息就不会收到。服务器就因为接收不到客户端的信息而无法正常关闭。
2、 预防上一次在三次握手中提到的失效的报文干扰。两个时间周期过去之后,所有的报文都会在网络中消失,保证下一次重新连接的时候有乱七八糟的报文影响。
转载自:http://www.codeceo.com/article/tcp-3-handshack.html
转载于:https://blog.51cto.com/10851095/1952667
TCP三次握手与四次分手相关推荐
- TCP三次握手、四次分手
TCP三次握手.四次分手 目的 三次握手 套接字发送码说明 套接字状态说明 握手流程 三次握手的必要性 四次分手 套接字发送码说明 套接字状态说明 握手流程 四次分手必要性 目的 三次握手为了安全的建 ...
- 白话 TCP 三次握手与四次分手的过程
理解 HTTP 协议以及 TCP 三次握手与四次分手的过程 理解 HTTP 协议 超文本传输 协议(HTTP)是用于传输诸如 HTML 的超媒体文档的应用层协议,最顶层的协议.HTTP 是无状态 ...
- Tcp三次握手、四次分手,Socket再看不懂,你砍我
文章目录 Tcp连接 三次握手 为什么要三次 四次分手 光说不练,假把式 三次握手.四次分手抓包 三次握手到四次分手是不可被分割的最小粒度 Socket 文件描述符 获取输入输出流 socket套接字 ...
- TCP 三次握手和四次分手简析
写在前面 在进行接下来的内容之前,先简单理解下TCP的概念. 看下百科中的定义:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的 ...
- 第三次握手为什么没有序列号_图解TCP三次握手与四次分手
TCP三次握手和四次挥手不管是在开发还是面试中都是一个非常重要的知识点,它是我们优化web程序性能的基础.但是大部分教材都对这部分解释的比较抽象,本文我们就利用wireshark来抓包以真正体会整个流 ...
- TCP三次握手,四次分手
1.什么是HTTP连接 http是建立在TCP协议之上的一种应用. 最显著的特点是每次请求,都需要服务器响应,请求结束后,会主动释放连接. 1)在HTTP 1.0中,客户端的每次请求都要建立一次单独的 ...
- 简析TCP的三次握手与四次分手【转】
转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...
- 通俗大白话来理解TCP协议的三次握手和四次分手
最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好 ...
- 通俗理解tcp/ip的三次握手和四次分手
转载地址:https://github.com/jawil/blog/issues/14 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最 ...
最新文章
- 10分钟学会php面相对象基础(Ⅰ)
- 四川启动西南知识产权大数据中心合作共建工作
- 关于装箱拆箱导致的异常案例
- 合法的python变量名import_python 环境变量和import模块导入方法(详解)
- html美化计算机,职称计算机Dreamwaver教程:CSS样式表滤镜
- 【Java入门】桌球小游戏
- ubuntu中忘记root密码的解决方法
- Netty工作笔记0055---Unpooled应用实例1
- 二叉树的常用操作(节点的后继节点)
- 程序员的一种境界【转的】
- 大学什么专业学c语言和机械制图,机械设计工程师大学时应该学什么
- 一位 Google 大佬的辞职感言..
- c语言自我介绍范文,个性的自我介绍范文5篇
- 女性程序员你需要注意
- 二进制和 四,八,十,十六,三十二进制的转换
- 艾比森发布新一代高端Micro LED微间距显示产品
- 微生物组-宏基因组分析(线上/线下同时开课,2021.8)
- 一文完全理解模型ks指标含义并画出ks曲线(包含代码和详细解释)
- Android SAX解析远程服务器端的xml,防止解析的时候出现空格或者标点符号再次解析的方法
- 不动产登记引入电子签章,在线签发证照证明,信息自主查询、下载
热门文章
- 【pytorch】torch.nn.GroupNorm的使用
- Debian/Ubuntu--blade安装与使用
- css 不展示滚动条,CSS-界面滚动时不显示滚动条
- python同名包_可以使用两个同名的Python包吗?
- java弹出微信扫一扫_JAVA实现调用微信js-sdk扫一扫
- windows pxe 安装linux,菜鸟学Linux 第103篇笔记 pxe自动化安装linux
- [Spring mvc 深度解析(二)] Tomcat分析
- python 图像识别_python图像识别之图片相似度计算
- python json文件_python读写json文件的简单实现
- 神了,无意中发现一位1500道的2021LeetCode算法刷题pdf笔记