tcp三次握手后被马上rst_TCP为什么需要三次握手?
我们都知道TCP连接的建立需要经历三次握手,为什么需要握三次手?握手的过程又是什么样的呢?
在探讨这些问题之前,我们需要先来了解TCP和IP的封装结构。
TCP和IP的封装结构
IP数据包由TCP数据、TCP头部和IP头部组成。其中IP头部和TCP头部分别占用20个字节, TCP头部和TCP数据合称为TCP报文段;TCP报文段和IP头部我们合称为IP数据包。
TCP头部的组成
TCP头部由16位源端口号和16位目的端口号组成(1字节=8位,即2进制中的8个1或者0);接下来是32位的TCP序号,即TCP Sequence number;再接下来是32位的ACK确认序号,上文中提到IP头部和TCP头部分别占用20个字节,TCP序号和ACK序号各占了4个字节,余下字节分别是4位头部长度、6位保留位、6位标志位,16位窗口大小;最后是16位校验和与16位紧急指针。
TCP的6个标志位
TCP的6个标志位依次是URG、ACK、PSH、RST、SYN和FIN。在TCP的头部,这6个标志位会显示为0或者1,如果出现1,表示TCP包含这层标志的属性。
URG表示紧急指针(urgent pointer)的有效标志位,如果该位置为1,则TCP头部的16位紧急指针内容生效;
ACK的标志位为1,表示这是一个确认包,同时意味32位的确认序号生效;
PSH标志位如果为1,则要求TCP立即将TCP数据转送到应用层,不在缓存区做任何停留;
RST标志位在TCP连接关闭时使用,表示连接重置;
SYN在连接建立的过程中使用,表示同步序号用来发起连接;
FIN在TCP连接关闭时使用,表示发送端完成发送任务,准备断开连接。
TCP连接的建立过程
TCP连接的建立过程需经历三个步骤,每一步同时连通发送端与接收端,就像两个人同时握手一样,因此该过程也被大家形象地称为三次握手。
三次握手如何进行?
第一次握手:请求端发出一个SYN段,指明客户打算连接的服务器端口以及初始序号即ISN;TCP的初始序号由TCP自己生成,之后所有TCP的序号都会基于ISN来计算,而我们通过Wireshark之类的软件看到SYN段的TCP序号为0,为方便识别,软件把绝对序号换成了相对序号;
第二次握手:服务端发出包含初始序号的SYN,表示回答,同时将确认序号设定为客户端的ISN+1以对客户的SYN报文进行确认,一个SYN将占用一个序号;
第三次握手:客户必须将确认序号设置为服务器端的ISN+1,以对服务器端的SYN报文进行确认。
经过这三次握手,报文段顺利完成连接的建立。
TCP连接的状态变迁
三次握手的过程中,TCP的状态一直在变化:
连接未建立时:双方都处于listen状态;
第一次握手时:请求端准备发起连接的时候,自身端口会变成主动打开的状态(Active Open),此时请求端为SYN_SENT状态,当SYN到达服务器端时,服务端的端口从监听状态进入Passive Open状态(即被动打开状态),此时服务器端为SYN_RCVD状态;
第二次握手时:请求端收到服务器端的SYN、SYN-ACK以后,变成ESTABLISHED状态;
第三次握手时:请求端认为连接已经完成,发出最后的ACK,当服务器端收到ACK以后,也进入ESTABLISHED状态,至此三次握手正式完成。
为什么要进行第三次握手?
在TCP第三次握手过程中,如果服务器发送SYN_ACK,请求端不发出最后的ACK,那么服务端的TCP连接将无法完成。
网络传输经常存在延时情况,在传输过程中,请求端(客户端)发起了SYN的建连请求,服务器端直接创建该连接给客户端,但由于网络传输原因丢失,请求端无法收到服务器端返回的数据包。此时请求端可能设置了超时时间,时间一到就关闭建连请求,并重新发出。如果没有第三次握手告诉服务器端,请求端已经收到服务器端传输的数据,服务器端对请求端的接收情况将一无所知;此外,还有一种情况,服务器端收到了请求端发出的某些失效的请求信息,误认为是有效请求并接收。
以上两种情况就需要第三次握手来进行确认,让请求端和服务器端及时察觉网络等问题导致的建连失败,减少服务器开销和接收失效请求发生的错误情况。
6分钟get三次握手原理
点击扫码☝观看视频吧
tcp三次握手后被马上rst_TCP为什么需要三次握手?相关推荐
- 剑三服务器维护后蹲宠刷新吗,剑三宠物开服刷新点合集 重置版除奇遇外宠物刷新点一览...
除了靠运气摸奇遇来获得宠物以外,还有可以靠获取道具来获取新的宠物方式.但是一般任务物品的获取并不是无限刷新的,任务物品的出现也是有CD的,而且在人多的服务器,为了抢宠物而疯狂蹲点的小伙伴也是不计其数的 ...
- 为什么tcp不采用停等协议_为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?...
看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章 ...
- TCP三次握手的思考,为什么要有三次握手
大家都知道TCP有三次握手的过程,今天我就仔细想了想为什么TCP要有三次握手 先贴一张三次握手的示意图,说明一点是在三次握手中A是在第二次握手后申请缓存资源,B是在第一次握手后申请 其实这个问题就是说 ...
- TCP三次握手,如果一、二、三次握手丢失各会发生什么
如果想要了解TCP三次握手,可以看下我这篇博客 首先我们要简单了解TCP三次握手的目的 确认客户端和服务器的接受和发送能力 确认双方的seq序列号 使双方协商一些参数,比如窗口大小等 第一次握手丢失 ...
- 例说图解TCP/IP协议族--TLS篇(1)抓包分析SSL/TLS握手
SSL是Secure Sockets Layer (安全套接层)的简写,SSL协议是为网络通信提供安全的一种安全协议,继任者为TLS,即 Transport Layer Security传输层安全. ...
- websocket服务器响应头,从服务器发送响应握手后,websocket.onopen不会触发
下面我已详细分享了我的代码.我阅读文档和关于握手的一切.我遵循了文档中提供的所有步骤以及互联网上的众多示例,但仍然存在此问题.奇怪的事情id websocket.onclsose()在我关闭服务器时被 ...
- leetcode1509. 三次操作后最大值与最小值的最小差
给你一个数组 nums ,每次操作你可以选择 nums 中的任意一个元素并将它改成任意值. 请你返回三次操作后, nums 中最大值与最小值的差的最小值. 示例 1: 输入:nums = [5,3,2 ...
- js手机号中间部分隐藏****,显示前三位和后四位
js手机号中间部分隐藏****,显示前三位和后四位 //slice(n,s)从已有数组中截取选择的元素,不会影响原数组.//n,s是数组元素的下标,n是开始截取元素的下标,S是结束截取元素的下标,可以 ...
- form表单用butten提交后无反应表单提交三种方式
form表单用butten提交后无反应&表单提交三种方式 一,表单提交无反应 有时候,我们发现表单提交的butten按钮,根本就没niao用.鼠标都点烂了,也提交不上去.找了半天什么错误也没找 ...
最新文章
- 如何用初中知识理解机器学习到底在干什么事情
- 访问vue_一起学Vue:访问API(axios)
- CentOS ping name or service not known问题解决
- Web性能API——帮你分析Web前端性能
- React类里面能写的东西
- python屏幕文字识别_学会python就是如此任性,15行代码搞定图片文字识别,附源码...
- AWS想到办法让Alexa能在毫秒内做出回复
- 深度学习:神经网络neural network
- 《精通Unix下C语言编程与项目实践》读书笔记(2)
- java接口 数据_一步步学习java后台(三)(接口返回数据处理)
- python的前端和后端_python是前端还是后端
- mac下charles使用教程
- 【必备知识】线激光扫描三维成像原理
- 利率掉期(利率互换)的解释
- c语言 一帮一题目,【精品资料】大学优秀学子风采录.doc
- Tomcat使用总结
- 2018年看书计划(40本)
- 基于Matlab人脸识别签到系统(GUI界面)
- 【论文】联邦学习区块链 论文集(三)
- Python——学生管理系统
热门文章
- 显示器颜色偏灰不鲜明_你离学会后期调色,只差了一块颜色“正确”的摄影显示器...
- mysql cst_JDBC与mysql同为CST时区导致数据库时间和客户端时间差13或者14小时
- 控制图的绘制步骤_实战!脚手架排布图绘制步骤和技巧讲解!图文展示
- java基础自学教程_Java基础自学教程(全套)
- 算法学习——枚举之最简真分数
- FFmpeg安装(windows环境)
- 使用NodeJS将文件或图像上传到服务器
- 信息安全学习笔记--CSRF
- 基于FFmpeg接收RTSP的ts流
- blender国内下载