TCP三次握手和四次挥手解析

article/2025/9/15 15:51:54

三次握手(建立连接)

(1)序号:seq序号,占32位,用来标识从TCP客户端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:ack序号,占32位,这个序号和发起的序号有关,在接受到信号后,将ACK置为1,才可以产生ack,且当ACK为1时,ack确认序号才有效,ack=seq+1。
(3)标志位:
SYN:发起一个新连接。
ACK:确认序号有效。
FIN: 释放一个连接。

PSH:接受方应该尽快将这个报文交给应用层。
RST:重置连接。
URG:紧急指针有效。

具体过程如下:
SYN:发起一个新连接,一般开始的时候产生一个,后面如果没有新连接就不会产生。
seq:seq序号是一个随机数,但是在往后的客户端的起始序列都在这个基础上+1,服务器也一样。
ACK:受到客户端的连接请求就标志为1,然后将ack确认序号根据客户端发起的序列号确定下来。

最开始的时候,客户端和服务端都出于关闭状态,主动打开连接的是客户端,被动打开连接的是服务器。
在这里插入图片描述

  1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户端进程的连接请求,这个时候服务器进入了LISTEN(监听)状态。
  2. TCP客户端进程也是先创建TCB,然后向服务器发送报文请求,报文首部SYN=1,表示发起了新连接,同时选择了一个随机的初始序列号x,这个时候TCP客户端进程进入了SYN-SENT(同步已发送状态)。TCP规定,SYN=1的报文段不可以携带数据,但是会消耗掉一个序号。
  3. TCP服务器如果受到了请求报文后,若同意连接,则向客户端发起确认报文,此时报文中SYN=1,ACK先产生=1,确认号ack=x+1,同时自己也要初始化一个序列号seq=y,此时TCP服务器进程进入到了SYN-RCVD(同步收到)状态,这个报文不能携带数据,但是要消耗掉一个序号。
  4. TCP客户端收到确认后,还要向服务器给出确认。确认的报文ACK=1,ack=y+1,自己的序列号seq=x+1,此时TCP连接已经建立,客户端进入ESTABLISHED(已连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据就不消耗序号。
  5. 当服务器受到了客户端的确认后也进入了ESTABLISHED(已确认)状态,之后双方就可以开始通信了。

我们用虚拟机server1,server2做个实验,使用tcpdump抓包查看
在server2上发布内容,用server1查看,另启一台server1抓包查看握手情况
server1 IP 172.25.10.1 server2 IP 172.25.10.2

tcpdump -i eth0 -S host 172.25.10.1 and 172.25.10.2
-i 指定网卡
-S 获取ack绝对值(不加该参数相对值为1)
host <ip> and <ip> 截获两个ip对应主机之间的通信

让server1上客户端,server2当服务器,一台server1抓包,另一台server1查看server2的http发布内容

在这里插入图片描述
可以看到前三次为tcp的三次握手,中间是HTTP服务启动

第一次握手开始:

客户端发送seq=x SYN=1新连接到服务器上,客户端进入SYN-SENT已发送状态

第二次握手开始:

服务器接收到请求报文,同意连接,发出确认报文,ACK=1,SYN=1,确认序号ack=x+1,初始化序列号seq=y,此时服务器进入SYN-RVCD同步收到状态

第三次握手开始:

客户端接收到服务器的确认报文,给服务器给出自己的确认信号,确认报文ACK=1,ack=y+1,序列号seq=x+1

当HTTP服务OK之后,便可通信

提问:为什么是三次握手而不是两次?

回答:因为客户端和服务器都需要确定对方的收发能力良好。

第一次客户端发送,客户端知道自己的发送能力是OK的,服务器接收到了以后知道客户端发送能力OK,自己接受能力OK。然后第二次握手,服务器知道自己发送能力OK,客户端收到之后,知道自己接收能力OK,服务端发送OK。第三次握手,服务端接收到客户端的确认报文后,知道了自己的发送和接收能力都OK,客户端的接收和发送能力也OK,就可以建立连接了。

三次握手的主要原因:

三次握手可以阻止历史重复连接的初始化
三次握手可以同步双方的初始序列号
三次握手可以避免资源浪费
在这里插入图片描述

四次挥手(断开连接)

数据传输完毕之后,双方即可释放连接,最开始的时候,客户端和服务器都处于确认状态,然后客户端进行主动关闭,服务器被动关闭。

在这里插入图片描述
FIN:释放一个连接。
ACK:确认序列号有效。

比如客户端的初始化序列号ISA=100,服务器初始化的序列号ISA=300,TCP连接成功后客户端总共发送了1000字节的数据,服务器在客户端发FIN报文前回复了2000个字节的数据。

第一次挥手:

客户端进程发出连接释放报文,并且停止发送数据,释放数据报文首部,FIN=1,其序列号seq=1101(100+1000+1,序列号等于初始化序列号+发送的字节数+1,其中的1是建立连接时占用的一个序列号)。

第二次挥手:

服务器接收到客户端发送的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1 ),确认号ack=1102(seq+1),序列号seq=2300(300+2000,这里不需要加1),此时服务端处于关闭等待状态,而不是立即给客户端发送FIN报文,这个状态需要持续一段时间,这是因为服务器可能还有数据没有发送完毕。

第三次挥手:

服务器将最后的数据(比如有100字节)发送完毕,然后就会向客户端发送FIN报文和ACK标志位,确认号ack=1102和第二次挥手的ack一样,序列号seq=2400(2300+100)

第四次挥手:

客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文中ACK=1,ack=2401,seq=1102

因为四次挥手中间有数据的传输,所以序列号要发送变化,三次握手时没有考虑数据,所以不需要给序列号加上数据。

问题

1.如果客户端和服务端已经建立了连接,但是客户端突然发生故障怎么办?

TCP设有一个保活计时器,计时器的时间通常设置的是2小时,服务器每次收到客户端的请求后都会复位计时器,客户端如果出现故障,服务器两小时没有收到任何来自客户端的任何数据,服务器就会给客户端发送一个探测报文,每隔75秒发送一次,若连续发送10次探测报文仍无反应,则认为客户端出现故障,关闭连接。

2.为什么客户端最后还要等待2MSL?

MSL为“最长报文段寿命”,2MSL为来回的最长时间,要考虑到丢包的情况,如果第四次挥手的报文丢失,服务端没有收到客户端的确认报文就会重新发送第三次挥手的报文,所以要等待最长2MSL的时间来确认服务端收到了确认报文。

3.三次握手过程可以携带数据吗?

第一次和第二次无法携带数据,只有第三次可以,这是因为第一二次握手时客户端和服务器还没有连接,服务器容易收到攻击,第三次握手时,客户端已经处于连接状态,可以携带数据。

4.创建连接时,为什么客户端还要再发送一次确认报文呢?

主要是防止之前没有发送过去导致失效的报文突然又传送到了服务器,从而会产生错误。
所以要进行三次握手,就算是失效的报文传送过来了,服务器再发送回客户端,但是客户端不会回复,服务器就不会连接了。


http://chatgpt.dhexx.cn/article/n9xFLikF.shtml

相关文章

简述TCP的三次握手和四次挥手

TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是面向连接的协议&#xff0c;也就是说&#xff0c;在收发数据前&#xff0c;必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来&#xff0c;其中的过程非常复杂&am…

简单理解TCP的三次握手和四次挥手

本文用简洁的语言教你理解TCP的三次握手和四次挥手&#xff0c;匆忙写的&#xff0c;审美可能有待提升。 本文适合入门&#xff0c;基础不高的同学观看&#xff0c;以便有一个大概的了解。深入的同学还请高抬贵手。 还有请记住&#xff0c;是传输层中TCP的东西&#xff0c;不…

tcp三次握手和四次挥手的过程

TCP是面向连接的&#xff0c;无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。在TCP/IP协议中&#xff0c;TCP 协议提供可靠的连接服务&#xff0c;连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号 并交换 TCP窗口…

TCP的三次握手和四次挥手

一、TCP介绍 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”&#xff0c;其实是客户端和服务端保存的一份关于对方的信息&#xff0c;如ip地址、端口号等。TCP可以看成是一种…

TCP三次握手和四次挥手的全过程

三次握手和四次挥手是各个公司常见的考点&#xff0c;也具有一定的水平区分度,希望大家能带着如下问题进行阅读&#xff0c;收获会更大: 请画出三次握手和四次挥手的示意图为什么连接的时候是三次握手&#xff1f;什么是半连接队列&#xff1f;ISN(Initial Sequence Number)是…

TCP的三次握手和四次挥手总结

TCP的三次握手和四次挥手总结 本文经过借鉴书籍资料、他人博客总结出的知识点&#xff0c;欢迎提问 序列号 seq&#xff1a;占 4 个字节&#xff0c;用来标记数据段的顺序&#xff0c;TCP 把连接中发送的所有数据字节都编上一个序号&#xff0c;第一个字节的编号由本地随机产生…

三次握手和四次挥手知识总结(超详细)

前言&#xff1a; 最近学习了计算机网络的知识&#xff0c;看了很多的视频&#xff0c;并参考了很多资料&#xff0c;写下了这将近4500字的与“三次握手和四次挥手”相关的知识&#xff0c;希望能帮助到各位小伙伴儿以及加深自己印象&#xff0c;方便以后复习用 如果有什么写的…

简述TCP的三次握手和四次挥手过程

①TCP是一种精致的,可靠的字节流协议。 ②在TCP编程中,三路握手一般由客户端(Client)调用Connent函数发起。 ③TCP3次握手后数据收发通道即打开(即建立了连接)。 ④简述三路握手过程: 图 .TCP三次握手 (1)第一次握手:C…

通俗易懂理解TCP协议三次握手和四次挥手及其常见问题

TCP协议三次握手和四次挥手 三次握手如果建立连接只需要2次握手&#xff0c;可能会出现的情况 四次挥手为什么建立连接是三次握手&#xff0c;关闭连接确是四次挥手呢&#xff1f;TIME_WAIT状态有什么作用&#xff0c;为什么主动关闭方没有直接进入CLOSED状态释放资源&#xff…

TCP的三次握手和四次挥手详解

TCP是主机对主机层的传输控制协议&#xff0c;提供可靠的连接服务&#xff0c;采用三次握手确认建立一个连接&#xff0c;与之相反的&#xff0c;采用四次挥手来断开连接&#xff1a; TCP标志位有6种标示&#xff0c;即&#xff1a;SYN(建立联机) 、 ACK(确认) 、 PSH(传送) 、…

TCP三次握手和四次挥手详解(面试常见问题)

大概两个月前&#xff0c;一位朋友在面试360集团时&#xff0c;在面试过程中被问及TCP三次握手和四次挥手的相关知识&#xff0c;他当时只知道大概&#xff0c;但当时面试官问他TCP三次握手过程中发送的数字是多少&#xff0c;他一下子就懵住了&#xff0c;因为这也是他第一次参…

详解TCP 三次握手和四次挥手

任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初恋。 过去不会没关系&#xff0c;今天就让我们来消除这份恐惧&#xff0c;微笑着勇敢的面对它吧&#xff01; 1、TCP 基本认识 2、TCP 连接建立 3、TCP 连接断开 4、Socket 编程 TCP 基本认识 瞧瞧 TCP 头格式 我们先来看看 TC…

简述三次握手和四次挥手

三次握手 第一次握手&#xff1a;客户端给服务端发送一个SYN报文&#xff0c;并指明客户端的初始化序列号&#xff0c;此时客户端处于SYN_SENT状态 第二次握手&#xff1a;服务端收到客户端的SYN报文之后&#xff0c;会回复SYN报文作为应答&#xff0c;并且也指定了自己的初始…

TCP三次握手和四次挥手最通俗解释说明

TCP三次握手和四次挥手以及11种状态 1、三次握手 置位概念&#xff1a;根据TCP的包头字段&#xff0c;存在3个重要的标识ACK、SYN、FIN ACK&#xff1a;表示验证字段 SYN&#xff1a;位数置1&#xff0c;表示建立TCP连接 FIN&#xff1a;位数置1&#xff0c;表示断开TCP连接 三…

简述TCP三次握手和四次挥手

为了准确无误地把数据送达目标处,TCP 协议采用了三次握手策略。 1.1 TCP三次握手漫画图解 如下图所示,下面的两个机器人通过 3 次握手确定了对方能正确接收和发送消息(图片来源:《图解 HTTP》)。 简单示意图: 客户端–发送带有 SYN 标志的数据包–一次握手–服务端服务…

tcp三次握手和四次挥手

TCP三次握手与四次挥手详解(最全面) 一、TCP 协议简述 TCP 提供面向有连接的通信传输&#xff0c;面向有连接是指在传送数据之前必须先建立连接&#xff0c;数据传送完成后要释放连接。 无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。在TCP/I…

三次握手和四次挥手详解

详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ” *TCP connection* 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection&#xff08;关系&#xff0c;连接&#xff09;的东西&#xff1b; 由于TCP不存在连接的概念&#xff0c;只存在请求和响应&…

TCP三次握手和四次挥手过程

TCP三次握手和四次挥手过程 1、TCP报文段首部2、TCP三次握手过程及常见问题2.1 TCP三次握手过程2.2 常见问题 3、TCP四次挥手过程及问题3.1 TCP四次挥手过程3.2 常见问题 1、TCP报文段首部 要理解TCP三次握手和四次挥手的过程&#xff0c;首先需要了解TCP报文段的某些首部的含义…

三次握手和四次挥手

三次握手和四次挥手 三次握手四次挥手 ♠ \color{red}{\spadesuit} ♠ ok&#xff0c;上一篇介绍完TCP/IP的常见状态码&#xff0c;对TCP协议有一个大概的了解了&#xff0c;接下来进入TCP协议的&#xff08;建立连接&#xff09;三次握手和四次挥手&#xff08;关闭连接&#…

详解三次握手和四次挥手

三次握手和四次挥手是各个公司常见的考点&#xff0c;也具有一定的水平区分度&#xff0c;也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好&#xff0c;但是后面越回答越冒冷汗&#xff0c;最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官&#xff1…