tcp为什么需要3次握手4次挥手
一、起因
在网络请求中,为了提升性能,通常会采用长连接的方式避免在每一次交互都进行网络链接的创建和关闭,而长连接就是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次挥手的更多相关文章
- python摸爬滚打之----tcp协议的三次握手四次挥手
TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...
- Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)
Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: ...
- TCP/IP报文 三次握手 四次挥手
1.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序 ...
- TCP、UDP之三次握手四次挥手
1. http协议的简介 HTTP,HyperText Transfer Protocol.超文本传输协议,是互联网上应用最为广泛的一种网络协议.基于TCP的协议,HTTP是一个客户端和服务器端请求和 ...
- 关于TCP传输的三次握手四次挥手策略
简单小总结: 一般为了能够准确无误地把数据送达目标处,TCP协议采用了三次握手策略.用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达. 注:握手过程中使用 ...
- IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式
IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...
- TCP传输的三次握手四次挥手策略
为了准确无误地数据送达目标处,TCP协议采用了三次握手策略.用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达.握手中使用了TCP的标志:SYN和ACK 发 ...
- TCP/IP,三次握手四次挥手,TCP/UDP , HTTP/HTTPS
internet:通用名词,由多个计算机网络组成的网络,网络间的通信协议是任意的 Internet:专用名词,当前全球最大的开放计算机网络,采用TCP/IP协议族作为通信的规则.www万维网是广泛应用 ...
- TCP连接为什么三次握手四次挥手
前几天面试某电商被问住了,问的很细,我就说了说连接过程,必然凉凉.在csdn上找了一篇很详细的博客.https://blog.csdn.net/hyg0811/article/details/1023 ...
随机推荐
- 带你看懂Dictionary的内部实现
了解Dictionary的开发人员都了解,和List相比,字典添加会慢,但是查找会比较快,那么Dictionary是如何实现的呢? Dictionary的构造 下面的代码我看看Dictionary在构 ...
- [BTS] Error Can't update assemblies.
Removal of the assembly failed. Make sure that all items in the assembly you are trying to remove fu ...
- MySQL SELECT执行顺序
SELECT语句的完整语法为: () SELECT () DISTINCT <select_list> () FROM <left_table> () <join_typ ...
- js如何实现继承
js继承有5种实现方式:1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = ...
- 【转】The difference between categorical(Nominal ), ordinal and interval variables
What is the difference between categorical, ordinal and interval variables? In talking about variabl ...
- HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)
HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...
- 騰訊RTX的API開發,給RTX開個天窗
好多人可能沒聽說RTX這個軟件,在此我簡單說明一下,這個軟件是騰訊為企業開發的一個內部聊天軟件,服務端不是在騰訊那邊,而是需要企業自己安裝到自己公司內部的服務器上,以供企業內部員工交流使用,功能和QQ ...
- 什么是automatic variable?
看代码符号$?搞不清楚是什么? 看代码. $share = Get-WmiObject -Class Win32_Share -ComputerName $Server.name -Credent ...
- Dom4J解析xml文件动态转换为List<Bean>或者Map集合
大家在解析大量相似xml文件的时候是否会遇到这样一个问题:冗余的代码去set定义的实体对象Bean的值,基本都是一样的操作 而且毫无任何代码价值可言所以在这写了一个简单的例子,类封装了几个方法你只 ...
- 转:电子取证中AVI文件的文件雕复
电子取证中AVI文件的文件雕复 收藏本文 分享 1引言在电子取证工作中,恢复数字设备中被删除的数据是极为重要的工作之一,恢复数据又分依赖系统元信息的传统数据恢复技术和不依赖系统元信息的文件雕刻.文件雕 ...