一、起因

在网络请求中,为了提升性能,通常会采用长连接的方式避免在每一次交互都进行网络链接的创建和关闭,而长连接就是tpc的链接方式。因而有必要对tcp的创建链接和关闭有所了解。在网络上查询了一些知识,加以理解,整理成了如下的总结,然后给组装到自己的认识体系中。

二、创建链接三次握手

tpc创建链接需要三次握手:

1)client 发送链接请求到server

2)server发送响应请求给到client

3)client再次发送响应请求给到server端

三次握手之前是知道,但为什么要用三次握手,而不是两次、四次呢?

现在能查到的解释是有两种:1)为了避免已失效的链接再次到达服务端而引起的错误,2)是网络中存在延迟的网络分组。这两个解释对应的事同样的。

要解决的问题是:client向server发送了一个创建链接的请求,但由于网络原因,在达到客户端的超时时间后还没有收到server端的响应,客户端就重发一次建链请求,这次顺利的创建链接,然后开始进行数据传输,然后关闭链接。当关闭链接后,client第一次发送的建链请求才到达server,如果按照两次握手,server任务链接创建成功,而client发现server的响应请求超出了时间,直接进行丢弃,也不向server发送通知请求。而server还在等待客户端发送数据,这样就会造成server资源浪费。

三次握手和我们去饭店点餐有些类似:1)食客先选择菜品 2)服务员查看点餐单,然后再向食客重复一遍 3)食客确定,然后服务员会把菜品报给厨房开始烹制。如果是两次握手,那就有可能出现食客说这个菜品我们没有点啊或者是我们点了那个菜品怎么没有上啊。。

另外,二次握手可能会存在死锁问题:client向server发送建链请求,server然后向clent发送确认请求,然后server向client发送数据。当由于网络原因或client的问题,导致client未能获取到server发送的响应请求,就会一直等待server发送确认响应,但此时server确一直在发送数据,而不再发送确认响应,导致死锁问题。

上述的解释存在几个前提:

1)client在创建网络连接时,如果server在规定时间内没有响应,将会从自己的存储中移除该次的创建网络请求数据

2)client只有在接收到server发出响应请求,验证通过后,才接受server发出的数据

三、关闭链接四次握手

  tcp关闭链接四次握手原因在于tpc链接是全双工通道,需要双向关闭。

  client向server发送关闭请求,表示client不再发送数据,server响应。此时server端仍然可以向client发送数据,待server端发送数据结束后,就向client发送关闭请求,然后client确认。

  类似的例子是面试,面试本身是一个双向沟通的过程,也即全双工。面试官吧啦吧啦向面试人员问了一堆问题,问完了告诉面试人员我没有问题了,面试人员确认。但这个时候面试人员还是可以向面试官问问题了,等面试人员也问完了,向面试官说:我也没有问题了,面试官说:好的,我们就到此为止,后续有hr同学联系你,这次的面试结束。

tcp为什么需要3次握手4次挥手的更多相关文章

  1. python摸爬滚打之----tcp协议的三次握手四次挥手

    TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...

  2. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  3. TCP/IP报文 三次握手 四次挥手

    1.TCP报文格式  TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式  上图中有几个字段需要重点介绍下:  (1)序号:Seq序 ...

  4. TCP、UDP之三次握手四次挥手

    1. http协议的简介 HTTP,HyperText Transfer Protocol.超文本传输协议,是互联网上应用最为广泛的一种网络协议.基于TCP的协议,HTTP是一个客户端和服务器端请求和 ...

  5. 关于TCP传输的三次握手四次挥手策略

    简单小总结: 一般为了能够准确无误地把数据送达目标处,TCP协议采用了三次握手策略.用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达. 注:握手过程中使用 ...

  6. IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

    IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...

  7. TCP传输的三次握手四次挥手策略

    为了准确无误地数据送达目标处,TCP协议采用了三次握手策略.用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达.握手中使用了TCP的标志:SYN和ACK 发 ...

  8. TCP/IP,三次握手四次挥手,TCP/UDP , HTTP/HTTPS

    internet:通用名词,由多个计算机网络组成的网络,网络间的通信协议是任意的 Internet:专用名词,当前全球最大的开放计算机网络,采用TCP/IP协议族作为通信的规则.www万维网是广泛应用 ...

  9. TCP连接为什么三次握手四次挥手

    前几天面试某电商被问住了,问的很细,我就说了说连接过程,必然凉凉.在csdn上找了一篇很详细的博客.https://blog.csdn.net/hyg0811/article/details/1023 ...

随机推荐

  1. 基于.NET的Excel开发:单元格区域的操作(读取、赋值、边框和格式)

    引用 using Excel = Microsoft.Office.Interop.Excel; 定义 Excel.ApplicationClass app; Excel.Workbooks book ...

  2. paip.spring 获取bean getBean 没有beanid的情况下

    paip.spring 获取bean  getBean 没有beanid的情况下 spring能自动扫描带有注解的bean文件.. 作者Attilax  艾龙,  EMAIL:1466519819@q ...

  3. Windows环境下32位汇编语言程序设计(典藏版)

    Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 756页 1 ...

  4. Linux初学 - java环境安装

    http://www.oracle.com/technetwork/java/javase/downloads/index.html 找到对应版本的jak的安装包 我这边下载的是64_rpm 下载完成 ...

  5. MySQL Cluster 7.3.3 官方版本下载

    MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用.高冗余版本.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器.在MyQL 5. ...

  6. 【VerySky原创】怎样查找到CDHDR、CDPOS表中的OBJECTCLAS字段

    可以通过pooled table TCDOB - Objects for change document creation 找到对应的表的对象值: se38 run:  RSSCD1TS object ...

  7. 在线视频转gif动画工具 在线视频转gif动画工具下载

    在线视频转gif动画工具 在线视频转gif动画工具下载 http://www.leawo.cn/space-1723875-do-thread-id-60715.html http://www.lea ...

  8. 一个简单的JavaScript Map

    用js写了一个Map,带遍历功能,请大家点评下啦. //map.js Array.prototype.remove = function(s) { for (var i = 0; i < thi ...

  9. sublime Text Pastry使用

    来源:   https://github.com/duydao/Text-Pastry/wiki/Examples Using a text list Using the Clipboard Clip ...

  10. 《STL系列》之map原理及实现

    上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...