TCP连接三次握手与四次挥手

简介: TCP连接三次握手与四次挥手

目录


前言


面试老是爱问,平时也就知道个大概,简单记录一下三次握手与四次挥手过程,顺便画个图加深记忆。


TCP头部


1位(bit),1字节(byte),1字节=8位。

tcp头部图示可以一行32位也就是4字节,固定头部5行共计20字节,选项最大可到40字节,也就是tcp头部最大60字节。

SYN、ACK、FIN是我们的标志位,标志位一个只占一位,一位只能表示是与否(1和0)。

小写seq指的是我们的32位序号,ack指的是我们的32位确认号。

image.png

三次握手


客户端与服务端初始都处于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状态。

image.png

四次挥手


四次挥手过程可以参考三次握手简述。

需要注意的是,四次挥手最后一次客户端发送ACK并没有直接进入CLOSE状态,而是等待2MSL再进入,为的是保证发送的ACK会成功发送到对方,因为关闭连接了,无法通过接收信息来保证,因此需要进行等待时间,MSL是任何报文段被丢弃前在网络内的最长时间,设置2倍非常严谨安全。

image.png

为什么连接三次而挥手四次


因为服务端收到客户端返回FIN仅仅表示客户端不再发生数据,但是客户端还可以接收数据,而需不需要客户端关闭接收还需要服务端的上层应用决定,因此FIN与ACK不同时发送。服务端提前发送ACK防止客户端重复发送FIN,然后再去询问上层是否向客户端发送应FIN。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
SQL 网络协议 Java
JAVA SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败
JAVA SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败
345 0
|
缓存 网络协议 安全
TCP通信机制:三次握手、四次挥手、滑动窗口
TCP通信机制:三次握手、四次挥手、滑动窗口
1272 1
TCP通信机制:三次握手、四次挥手、滑动窗口
|
缓存 网络协议 网络架构
四十、TCP协议的特点、TCP报文段格式和TCP的连接管理
四十、TCP协议的特点、TCP报文段格式和TCP的连接管理
四十、TCP协议的特点、TCP报文段格式和TCP的连接管理
|
缓存 网络协议 安全
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
|
网络协议
计算机网络学习27:TCP连接与连接释放
客户端和服务端都是先建立传输控制模块
计算机网络学习27:TCP连接与连接释放
|
网络协议 测试技术
|
网络协议 网络性能优化
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
|
缓存 网络协议 网络性能优化
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
|
缓存 网络协议 Java
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
466 0
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
|
网络协议
Netty之第一次 TCP 连接时发生了什么
Netty之第一次 TCP 连接时发生了什么
268 0