首页 / 知识
TCP连接三次握手与四次挥手
2023-04-11 16:32:00

前言
面试老是爱问,平时也就知道个大概,简单记录一下三次握手与四次挥手过程,顺便画个图加深记忆。
TCP头部
1位(bit),1字节(byte),1字节=8位。
tcp头部图示可以一行32位也就是4字节,固定头部5行共计20字节,选项最大可到40字节,也就是tcp头部最大60字节。
SYN、ACK、FIN是我们的标志位,标志位一个只占一位,一位只能表示是与否(1和0)。
小写seq指的是我们的32位序号,ack指的是我们的32位确认号。
三次握手
客户端与服务端初始都处于CLOSE状态。
大写的SYN和ACK都是tcp头部的标志位,值只有0和1,图中都省略了=1,不等于1没有意义,在三次握手中seq序号是作为SYN的关联,因此我表示为SYN(seq=x)比较好记,真正的表示可以写成SYN=1,seq=x,ACK(ack=x+1)同理,也就是ACK=1,ack=x+1。
由服务端主动进入LISETN状态,然后客户端向服务端发送SYN(req=x),第一次握手,此时客户端处于SYN_SEND状态。
服务端接收客户端发来的SYN,服务端向客户端发送自己的SYN(req=y)与表示已经接收到客户端发来的SYN的ACK(ack=x+1),第二次握手,服务端进入SYN_RECV状态。
客户端接收到服务端的SYN与ACK,客户端向服务端发送表示已经接收到服务端发来的ACK的ACK(ack=y+1),三次握手完成,客户端进入ESTABLISETEN状态。
服务端接收到最后的ACK之后也进入ESTABLISTEN状态。
四次挥手
四次挥手过程可以参考三次握手简述。
需要注意的是,四次挥手最后一次客户端发送ACK并没有直接进入CLOSE状态,而是等待2MSL再进入,为的是保证发送的ACK会成功发送到对方,因为关闭连接了,无法通过接收信息来保证,因此需要进行等待时间,MSL是任何报文段被丢弃前在网络内的最长时间,设置2倍非常严谨安全。
为什么连接三次而挥手四次
因为服务端收到客户端返回FIN仅仅表示客户端不再发生数据,但是客户端还可以接收数据,而需不需要客户端关闭接收还需要服务端的上层应用决定,因此FIN与ACK不同时发送。服务端提前发送ACK防止客户端重复发送FIN,然后再去询问上层是否向客户端发送应FIN。
|
最新内容
相关内容
Python中区分字符与字符串吗?
Python中区分字符与字符串吗?,数据,培训,数字,字符串,数据类型,字符,类型,语言,有所不同,布尔,python中不区分字符与字符串,与C语言相比,PythonPython库与模块的区别是什么?
Python库与模块的区别是什么?,名称,概念,标准,机构,培训,名字,代码,模块,区别,函数,python库与模块的区别是:模块、库主要区别在于他们的定义python怎么创建mysql数据库连接
python怎么创建mysql数据库连接,项目,数据,培训,参数,结果,数据库,方法,语句,数据库连接,接口,python数据库接口支持非常多的数据库,你可以选python对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的python怎样连接mysql数据库
python怎样连接mysql数据库,培训,数据,流程,项目,一致,系统,名字,数据库,参数,结果,python数据库接口支持非常多的数据库,你可以选择适合你项python连接数据库
python连接数据库,培训,数据,项目,一致,流程,数据库,参数,结果,接口,语句,python连接数据库推荐使用MySQLdb。Python数据库接口支持非常多的pythonwinpython与python区别是什
pythonwinpython与python区别是什么,培训,设计,平台,专栏,项目,环境,工具,脚本,组件,模块,PythonWin是一个Python集成开发环境,在许多方面都比pythonpython与c区别有哪些
pythonpython与c区别有哪些,数据,培训,数字,标准,地址,概念,类型,语言,对象,变量,python与C的区别如下:1、语言类型不同Python是一种动态类型python连接oracle乱码怎么办
python连接oracle乱码怎么办,培训,一致,密码,乱码,脚本,字符集,源文件,中文,解决方案,以上,在使用Python开发项目过程中,有时需使用脚本调用orpython如何连接mysql数据库
python如何连接mysql数据库,培训,数据,项目,一致,流程,数据库,参数,结果,接口,语句,python数据库接口支持非常多的数据库,你可以选择适合你项python如何比较Python与PHP?
python如何比较Python与PHP?,管理,代码,设计,培训,软件,工具,数据,业务,通用,地方,PHP已经存在很长时间了,而且它还将继续存在,以下是Python迅pythonHTTP与HTTPS之间的区别
pythonHTTP与HTTPS之间的区别,培训,区别,之间,