tcp三次握手和四次挥手

news/2024/11/20 11:55:43/

三次握手和四次挥手简述

三次握手:客户端与服务器进行三次通信

四次挥手:客户都拿和服务器通过四次通信释放连接,也叫连接终止协议

三次握手的目的:

三次握手是为了让客户端和服务器分别确认自己和对方接收和发送消息的能力是正常的

三次握手流程

1.第一次握手

客户端向服务端发送连接请求报文段。该报文段的头部中同步SYN=1,确认ACK=0,同时选择一个初始序号seq=x。请求发送后,客户端便进入SYN-SENT状态。

  • SYN=1,ACK=0表示该报文段为连接请求报文

  • x为本次TCP通信的字节流的初始序号

  • TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号

2.第二次握手

服务端收到连接请求报文段后,如果同意连接,会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。发送完应答后服务端进入SYN-RCVD状态。

  • SYN=1,ACK=1表示该报文段为连接同意的应答报文

  • seq=y表示服务端作为发送者时,发送字节流中的第一个字节序号

  • ack=x+1表示服务端希望客户端发送的下一个数据报初始序号是从x+1开始

3.第三次握手

客户端收到服务端连接同意的应答后,还会向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。该报文段的头部为:ACK=1,seq=x+1,ack=y+1。

客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

四次挥手:

第一次挥手:

客户端向服务器发送FIN报文(FIN=1,seq=u),发完后进入FIN_WAIT_1状态,即主动关闭TCP连接,不再发送数据,但可以接收服务器发来的报文,等待服务器回复;

第二次挥手:

服务器接到FIN报文后,返回一个ACK报文(ACK=1,ack=u+1,seq=v),表明自己接收到此报文,服务器进入CLOSE_WAIT关闭等待状态,此时客户端就知道服务端接到自己的断开连接请求,进入到FIN_WAIT_2状态,TCP处于半关闭状态,但服务器端可能还有数据要传输。

第三次挥手:

服务器关闭客户端连接,发送FIN报文(FIN=1,seq=w,ack=u+1)给客户端,此时服务器处于LAST_ACK状态,等待客户端回应。

第四次挥手:

客户端收到FIN报文后,发送一个ACK(ACK=1,ack=w+1,seq=u+1)给服务器作为应答,此时客户端处于TIME_WAIT状态,这个状态是为了等待足够的时间以确保TCP接收到连接中断请求的确认

注意:这时候服务器的tcp连接并没有被释放,客户端需要等待2MSL(MSL是报文来回的时间)

等待的原因:

  • 防⽌客户端最后⼀次发给服务器的确认在⽹络中丢失以⾄于客户端关闭,⽽服务端并未关闭,导致资源的浪费。

  • 等待最⼤的2msl可以让本次连接的所有的⽹络包在链路上消失,以防造成不必要的⼲扰

总结:三次握手和四次挥手一共发送了两次ack

tcp和udp的区别?

tcp是面向连接的,而udp是无连接的协议

tcp对于传输有用的数据非常可靠,因为它需要确认发送的信息,此外,重新发送丢失的数据包

udp如果数据包丢失,他不会请求重新传输

tcp速度较慢,因为tcp在传递数据之前建立连接,并确保数据包的正确传递

udp不承认是否接收了传输的数据

udp的标头大小为8个字节,tcp的标头是udp的两倍多

相同点:

tcp和udp都可以检查错误,但是只有tcp可以纠正错误,因为它同时具有拥塞和流量控制

举个栗子:

我想扔给别人一个苹果,我需要向别人确认是否需要他能否接住以及他的身份等一些其他信息,我需要反复确认,直到确认无误之后才会将苹果给他,这就是我们的tcp

我给别人一个苹果,我不管他是不是需要,是不是能接住,都要扔给他,能不能接住,是不是我想给的那个人,我都不管,反正我给了,这就是udp


http://www.ppmy.cn/news/24787.html

相关文章

2023新华为OD机试题 - 单词接龙(JavaScript) | 刷完必过

单词接龙 题目 单词接龙的规则是: 可用于接龙的单词,首字母必须要与前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词; 如果长度也相等,则取字典序最小的单词; 已经参与接龙的单词不能重复使用; 现给定一组全部由小写字母组成的单词数组, 并指…

LeetCode——1234. 替换子串得到平衡字符串

一、题目 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符串 s,请通过「替换一个子串」的方式&a…

G1垃圾回收器详解

文章目录前言一、思考问题二、官方文档三、基本介绍四、G1的内存模型五、G1的标记过程六、G1的垃圾回收1、G1过程梳理2、Young GC3、Mixed GC4、Full GC七、参数介绍八、典型问题1、疏散失败(Evacuation Failure)2、大对象分配(Humongous All…

IB学习者的培养目标有哪些?

IB教育被称为“成熟的国际化素质教育”,具备资质的学校必须经过IB组织考核授权,才可以进行IB体系教学。在国际IB教育领域,CISB在教育前瞻性、教学水准,以及学生成就方面一直拥有着领先的声誉。IB教育除了高标准的学术要求&#xf…

MySQL-数据类型

数据类型简介数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容。不同的数据类型也决定了 MySQL 在存储它们的时候使用的方式,以及在使用它们的时候选择什么运算符号进行运…

完美解决:重新安装VMware Tools灰色。以及共享文件夹的创建(centos8)

解决:重新安装VMware Tools灰色问题:重新安装VMware Tools灰色解决方案-挂载VMware中的linux.iso1. vmtools的linux.iso挂载及安装2. 共享文件夹的创建及配置问题:重新安装VMware Tools灰色 发现一个小问题,我的vm虚拟机安装后发…

​力扣解法汇总1124. 表现良好的最长时间段

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。…

【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断

一、Uart串口接收空闲中断----详解 首先介绍串口通信的数据传输方式,这样后面的Uart串口空闲中断能更好的理解。 Uart串口通信----数据传输方式 串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输,每个字符…