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 ...
随机推荐
- 分布式icinga2安装与使用
目标 配置分布式的icinga2监控系统.分布式监控适用于服务器遍布在多个区域,且需要一个master做统一管理. 搭建环境 服务器 系统: ubuntu 15.04/ubuntu 14.04 ici ...
- 使用grunt打包ueditor源代码
支持版本支持 UEditor 1.3.0+ 的版本 使用方法1.线上下载ueditor下载地址:ueditor,要下载"完整版 + 源码" 2.安装nodejs下载nodejs并安 ...
- js如何实现继承
js继承有5种实现方式:1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = ...
- Emmet语法预览
Emmet 是一个能提高前端开发效率的编辑器插件,支持 Sublime,Atom,TextMate,Nodepad++ 等主流编辑器.Emmet 定义了一些缩写,当我们输入缩写代码后,按展开键(默认是 ...
- IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)
定义 一个软件实体(如类.模块.函数)应当对扩展开放,对修改关闭. 定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的.那么如何应对需求变化的情况?这就是开放-关闭原 ...
- Java攻城狮面试考题
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Visitor模式,Decorator模式,Extension Object模式
Modem结构 Visitor模式 对于被访问(Modem)层次结构中的每一个派生类,访问者(Visitor)层次中都有一个对应的方法. 从派生类到方法的90度旋转. 新增类似的Windows配置函数 ...
- Leetcode 66 Plus One STL
题意让大数加1 我的做法是先让个位+1,再倒置digits,然后进位,最后倒置digits,得到答案. class Solution { public: vector<int> plusO ...
- python一套完整的事务操作
#coding=utf-8 import sys import MySQLdb class TransferMoney(object): def __init__(self,conn): self.c ...
- Android图片处理-相机、相处简单调用
安卓开发中,常常需要使用到手机相机拍照.或者相册上传头像等等.通过使用Intent,我们很方便地获得相机.相册里面的图片: 1.相机调用,通过设置File文件路径和文件名,可以将拍照得到的图片保存下来 ...