网络基础篇~三次握手和四次挥手

网络通信——TCP “三次握手“、“四次挥手“ 详解 (个人向) 一、TCP"三次握手" 1.1 概括: "三次握手"是指建立一个TCP连接时,需要客户端与服务器总共发送3个包。 进行三次握手的主要作用是确认客户端与服务器两方的发送能力与接收能力是否正常。 (连接服务器指定的端口,建立TCP连接,并同步双方的序列号和确认号) 1.2 流程图: 刚开始时:客户端处于 Closed 状态;服务器处于 Listen(监听) 状态 1.3 每次握手的目的: 第一次握手:客服端发送一个报文(SYN),服务器接收到了 结论:客户端的发送能力 和 服务器的接受能力没有问题 第二次握 阅读详情

一、TCP 头部数据结构

(一)TCP头部数据结构:

	【源端口号16位】 	|	【目标端口号16位】
		seq(序列号32位):序列号,用于将多个数据包进行排序,形成一个完整有序的数据流
		ack(确认应答号32位):
		SYN(报文):1表示连接请求或是连接接收请求			 synchronize sequence numbers 同步序列编号
		ACK(报文):1表示确认号字段有效					acknowledge character  确认字符
		FIN(报文):请求断开,0表示不请求,1表示没有数据传输
		RST(报文):连接状态,0表示正常,1表示异常
	【数据】

 (二)TCP头部数据结构(表图):

二、TCP三次握手

(一)简单描述三次握手过程

第一次握手
【客户端】to【服务端】:【SYN报文】	 seq = client_isn(客户端序列号)   		 #客户端处于:SYN_SEND状态
第二次握手
【服务端】to【客户端】:【SYN,ACK报文】 ack = client_isn + 1 seq = server_isn(服务端序列号)  #服务端处于:SYN-RCVD状态
第三次握手发送
【客户端】to【服务端】:【ACK报文】	 ack = server_isn + 1 seq = client_isn +1    #客户端处于:ESTABLISHED状态

**第三次握手是可以携带数据的,前两次握手是不可以携带数据的**

(二)简单抽象的描述三次握手

1,c->s
	- SYN
	- seq
2,s->c
	- SYN
	- ACK
	- seq
	- ack
3,c->s
	- ACK
	- seq
	- ack

(三)TCP 三次握手表图如下:

3.1 抓包截图

三、TCP四次挥手

(一)简单描述四次挥手过程

#第一次挥手
【客户端】to【服务端】:【FIN,ACK】, seq = 序列号X , ack = y#客户端进入FIN_WAIT_1状态
#第二次挥手
【服务端】to【客户端】:【ACK】 seq = y , ack = x+1#服务端发送完成进入CLOSE_WAIT状态、客户端接收成功进入FIN_WAIT_2状态
#第三次挥手
【服务端】to【客户端】:【FIN】 seq = y , ack = x+1#服务器发送完成进入LAST_ACK状态
#第四次挥手
【客户端】to【服务端】:【ACK】 seq = x+1,ack = y+1#客户端发送完成进入TIME_WAIT状态,服务端接收成功进入CLOSE状态

(二)简单抽象的描述四次挥手

1,s -> c
	- FIN
	- seq
	- ack
2,c -> s
	- ACK
	- seq
	- ack
3,c -> s
	- FIN
	- ack
	- seq
4,s -> c
	- ACK
	- ...

 (三)TCP 四次挥手表图如下:

3.1 抓包截图如下:

四、TCP三次握手状态变化

(一)简单画画三次握手状态变化

五、TCP四次挥手状态变化

(一)简单画画四次挥手状态变化

六、三次握手全部状态

(一)CLOSED状态

服务端和客户端初始状态

(二)SYN_SEND状态

1)客户端发送SYN后,状态转为SYN_SENT

2)客户端通过应用程序调用connect进入active open.发送SYN报文建立连接,之后状态置为SYN_SENT

(三)LISTEN状态

1)服务端收到客户端SYN(请求报文)。

2)服务端打开一个socket进行监听,状态置为LISTEN(监听)。

(四)SYN_RCVD状态

1)服务端给客户端发送SYN(请求报文)ACK ,状态转为SYN_RCVD.

2)A connection request has been received fromthenetwork.

(五)ESTABLISHED状态

1)服务器SYN_RECVD状态,收到ACK后,状态为ESTABLISHED;

2)客户端SYN_SENT状态,收到SYN、ACK后,发送ACK,状态转变为ESTABLISHED;

3)The socket has anestablishedconnection.

(六)拓展了解

1.如何避免SYN攻击?
  • 调大netdev_max_backlog

  • 增大TCP半连接队列

  • 开启tcp_syncookies

  • 减少SYN+ACK重传次数

六、四次挥手的全部状态

(一)ESTABLISHED状态

连接传输数据中

(二)FIN_WAIT_1状态

1)FIN_WAIT_1只出现在主动关闭的那一端,表示等待对方的FIN报文。

2)FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。对方回应ACK报文后,则进入FIN_WAIT_2状态。

3)实际无论对方何种情况下,都应该马上回应ACK报文,导致有可能见不到FIN_WAIT_1状态。

(三)FIN_WAIT_2状态

1)主动关闭的一端FIN_WAIT_1状态,得到对方返回ACK报文,就进入FIN_WAIT_2状态;

2)进入FIN_WAIT_2状态后,在没有拿到FIN报文之前,说明服务器端还有数据传输,那此时为半连接。

(四)CLOSE_WAIT状态

服务器端在收到 FIN 后,发送 ACK,状态为 CLOSE_WAIT;如果此时服务器端还有数据需要发送,那么就发送,直到数据发送完毕;此时,服务器端发送FIN,状态变为 LAST_ACK;

(五)LAST_ACK状态

last_ack(持续时间一般为一个RTO(retransmission timeout,数据包重传的timeout时间)的时间,这个时间根据RTT动态计算出来)有两个作用:作用一是处理重用连接:防止前一个连接上延迟的数据包或者丢失重传的数据包,被后面复用的连接(前后两次连接的协议相同,ip相同,端口号相同,且包的seq号也恰巧相同)错误的接收,则发送rst,重置连接;作用二是在发送第二个fin之后,如果在RTO之后,还没收到ack,则重发fin。

(六)TIME_WAIT状态

FIN_WAIT_1进入:此时应用程序端口收到 FIN+ACK(而不是像 FIN_WAIT_2 那样只收到 ACK,说明数据已经发送完毕)并向服务器端口发送 ACK;

FIN_WAIT_2进入:此时应用程序端口收到了 FIN,然后向服务器端发送 ACK;TIME_WAIT 是为了实现 TCP 全双工连接的可靠性关闭,用来重发可能丢失的 ACK 报文;需要持续 2 个 MSL (最大报文生存时间):假设应用程序端口在进入 TIME_WAIT后,2 个 MSL 时间内并没有收到FIN,说明应用程序最后发出的 ACK 已经收到了;否则,会在 2 个 MSL 内在此收到ACK报文;

(七)CLOSE状态

服务器LAST_ACK状态接受ACK包后,会等待一段时间2MSL,以确保所有的数据包都已经被对方接受和处理,保证通信的可靠和稳定。

(八)拓展了解

1.TIME_WAIT过多有什么危害?
  • 第一是占用系统资源,比如文件描述符、内存资源、CPU资源、线程资源等

  • 第二是占用端口资源,端口资源也是有限的,一般可以开启的端口为32768~61000,也可以通过net.ipv4.ip_local_port_range参数指定范围。

 2.如何优化TIME_WAIT?
  • 打开net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_timestamps选项

  • net.ipv4.tcp_max_tw_buckets

  • 程序中使用SO_LINGER,应用强制使用RST关闭。

【3分钟带你学】TCP/IP三次握手和四次挥手 TCP/IP三次握手和四次挥手三次握手我们经常在微信或QQ上和别人聊天,​ 我们正常的聊天是这样的,网络通信也是如此,我们把每次发送的消息都叫做是一次握手,上面这个例子就是二次握手,建立了通信连接,接下来就可发送继续发送信息了。​ 但是二次握手有个问题,首先信息是通过信道(信息通道)进行传递的,但是信道并不可靠,如果网络由于网络原因,A的“在吗”这个消息被阻塞在某个节点,(这里可以脑补下,双 阅读详情

相关推荐

运维网络基础知识3

文章目录01.课程知识概述部分02.知识回顾说明03.TCP十一种状态集三次握手:五种状态变化补充面试题:统计服务连接数量四次挥手:问题:PS:服务端可以被访问进行通讯,必须创建socket04.网络重要原理说明:解析三个过程:ARP解析原理作用:ARP解析过程:05.企业网络搭建步骤核心层设备:路由器设备汇聚层设备:三层交换机接入层设备:二层交换机(傻瓜交换机)06.系统路由配置方法:作业: 0...

chenbeiping888的博客 1342

【通俗易懂】三次握手与四次挥手

三次握手 1.1三次握手(Three-way Handshake)是指在建立一个TCP连接时,客户端和服务器会一共发送三个报文段。 初始时客户端和服务器都处于CLOSED状态,当服务器应用程序创建一个监听套接字时,服务器处于LISTEN状态。 1.第一次握手:客户端向服务器发送一个SYN报文段,报文段的首部中的标志位SYN置为1,另外还会指明客户端的初始化序列号ISN(seq=x),此时客户端处于SYN_SENT状态。 2.第二次握手:服务器收到SYN的报文段后,会以自己的SYNACK报文进行应答。该应答报

m0_52373742的博客 5万+

C#实战:手把手教你用SerialPort实现RS485 ModbusRTU通信(附完整代码)

本文详细介绍了如何使用C#的SerialPort类实现RS485 ModbusRTU通信,包括硬件准备、串口配置、数据收发核心逻辑及高级通信技巧。通过实战案例和完整代码,帮助开发者快速掌握工业级通信框架的构建方法,提升设备间通信的稳定性和效率。

weixin_29207533的博客 256

一文搞懂TCP的三次握手和四次挥手

一文搞懂TCP的三次握手和四次挥手

不脱发的程序猿 19万+

【Claude Code】Claude Code 使用指南

本文介绍了AI编码助手Claude的基础和进阶操作指南。基础部分涵盖启动命令、模式切换(自动编辑/Plan/Yolo模式)、资源监控等核心功能,重点讲解了斜杠命令的使用方法。进阶操作详细说明了CLAUDE.md文件的创建与管理,包括项目规范、代码风格等内容的配置,以及如何通过该文件建立持久上下文。同时提醒了使用过程中的安全风险,建议通过配置文件限制AI对关键代码的访问权限。全文提供了完整的操作指引和安全建议,帮助开发者高效安全地使用Claude进行编码辅助。

大家好,我是敖云岚,一个沉迷代码的 “技术玩家”。擅长 Java、C++ 开发,对 MySQL、Redis、RabbitMQ 等技术也颇有研究。博客里既有硬核技术干货,也有诙谐幽默的编程日常分享。愿和你一起,笑着学技术,快乐敲代码! 1万+

【邻接表存图模板】vector邻接表、数组邻接表、链式前向星

一、目录 一、目录 二、前言 三、邻接表“详解” (一)边的信息 (二)几种邻接表的实现方法“详解” 1.数组邻接表 代码 2.vector邻接表 代码 vector邻接表还有一种魔性写法: 3.链式前向星 代码 四、总结 二、前言 本来之前自己太弱了,一直只会用邻接矩阵,后来发现邻接表才是主流... 参考&特别鸣谢: https://www.cnblog...

十里寒塘路♣烟花一半醒 3114

TCP 三次握手和四次挥手

TCP 三次握手和四次挥手

We choose to go to the moon in this decade and do the other things, not because they are easy, but beacase they are hard. 2万+

ROBOGUIDE教程:FANUC机器人X型焊枪气动点焊焊接

FANUC机器人X型焊枪气动点焊焊接虚拟仿真实现方法。

IndRobSim 4387

【转】计算机网络——三次握手与四次挥手

【转】计算机网络——三次握手与四次挥手

NRWHF的博客 8851

CTFHUB------XSS反射型(WP)

文章目录前言XSS测试平台 前言 一开始我直接在上面写js脚本发现出错,最后发现只能通过下面的输入框来执行XSS测试,于是我们只能用XSS测试平台解决问题 XSS测试平台 注册一个XSS测试平台 这里随便填写 勾选默认模块就够了,点击下一步 这时会出现一个找个将代码复制 拼接到网站后缀name后面,点击send 这时平台会收到一个记录点开即可 得到flag ...

Y4tacker的博客 1万+

【AI Agent 记忆共享实战】【下篇】多 Agent 会话 Session 统一共享实战:全链路工程落地、采集归一、MCP 服务、私有化部署、源码级实战

中篇我们已经锁定最终最优架构方案: 非侵入式、外部旁路采集、只读归一、中心化存储、MCP 按需检索注入。摒弃「改 Agent 源码」「软链接互通」「原生 Session 互导」等不现实方案。本篇直接落地可上线、可简历复用、可个人私有化部署多 Agent 异构 Session专属采集器(Claude/CODex/DSH/OpenCode/Kimi/WorkBuddy/ 豆包)统一消息归一化解析层(解决所有 Schema 异构)增量同步、去重、时间戳对齐核心逻辑。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 484

诙谐的谈谈TCP三次握手和四次挥手

这几天面试校招生,需要考量一下他们的计算机网络基础,就问了这个老生常谈的问题,说一下TCP三次握手和四次挥手,为什么挥手比握手要多一次? 其实这个问题几乎所有人都能回答,甚至有的回答的很"标准",完全把课本上的答案背了下来说了一遍,甚至还知道SYN,ACK标志位,但是这些东西对我来说没有什么意义,因为这些标志位换成别的代号照样能完成三次握手和四次挥手。其实我想要知道的就是你怎么理解这个过程,三次握手的目的是什么?解决了什么问题,为什么不采取其他方案?比如二次握手或者四次握手?这才是关键所在。 其实三次握

m0_37907835的博客 404

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之EcuC模块配置详解(上)

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之EcuC模块配置详解(上)

weixin_42412049的博客 1531

网络基础知识-TCP和UDP报文及TCP三次握手

网络基础知识-TCP和UDP报文及TCP三次握手

little_startoo的博客 866

高熵合金AlCoCrFeNi/金刚石摩擦案例代码

本文介绍金刚石与高熵合金AlCoCrFeNi摩擦的案例。 在之前的文章中,介绍过使用fix indent命令实现虚拟球的摩擦,本文介绍使用金刚石实体球实现高熵合金摩擦的方法。 主要的模拟过程如下: (1)基体建模 建使用原子替换法获得高熵合金初始模型,升温到3000K驰豫后,冷却至300K,获得平衡组织。 (2)摩擦球建模 在高熵合金平衡组织的模型中添加金刚石摩擦球,使用change_box命令扩大box尺寸,添加金刚石摩擦球,并设置混合力场。 (3)摩擦过程 摩擦球下压一定深度后,沿y方向进行摩擦,摩擦

lammps_jiayou的博客 2900

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

TCP 三次握手是为了在客户端和服务器之间建立可靠的连接,确保双方都具备收发数据的能力。TCP 四次挥手用于终止客户端和服务器之间的连接,确保双方都不再传输数据。

m0_75050314的博客 659

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

网络基础 -- 传输层协议(UDP与TCP/三次握手与四次挥手/可靠传输)

端口号 UDP协议 UDP报文格式 UDP的特点 协议实现(原理) / 特性对于上层应用层代码编写的影响 (我们用UDP协议时该注意什么?) TCP协议 TCP报文格式 TCP三次握手与四次挥手 close()shutdown()的区别及使用场景 三次挥手和四次挥手中的一些问题 TCP特点 可靠传输

爱上小公举 1552

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机网络 - TCP网络连接中的三次握手和四次挥手

TCP(Transmission Control Protocol)通讯是一种面向连接的、`可靠`的网络传输协议。它位于 OSI 模型的传输层,负责提供数据传输服务。TCP协议通过三次握手建立连接,确保数据的可靠性和有序性,同时也提供拥塞控制和流量控制机制。它适用于需要保证数据传输的可靠性和有序性的应用,例如文件传输、电子邮件、网页浏览等。 TCP通信是一种`可靠的面向连接的通信方式`,连接建立和断开是非常重要的过程。下面是TCP通信的连接和断开过程: > **复杂的连接与释放过程是为了保证连接的可靠性*

逍遥Sean的博客 255

腾讯面试:我挂在了网络基础知识

想要成为一名优秀的Android开发,你需要一份完备的 知识体系,在这里,让我们一起成长为自己所想的那样~。流量控制:如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。流量控制策略就是控制发送者的发送速度,使得接收者来得及接收,达到不丢失分组的目的。流量控制是构成TCP可靠性的一方面。流量控制主要使用滑动窗口机制实现。下面以上图讲解滑动窗口(也叫接受窗口rwnd)的细节主机A向主机B发送数据,开始双方确定的窗口值为400字节,这两个是前提条件。开始A发送了200字节,之后发生了分组丢失现象,B调

2401_84149724的博客 705

关于网络基础知识

网络基础知识:网络协议、网络层次、IP地址等等

Jiayou9933的博客 1048

【Linux网络(四)】——万字详解TCP协议,三次握手&&四次挥手一遍过!

我们在网络基础中,谈论过,网络的四层模型是为了解决网络通信的问题而创建的,每一层都会解决一个网络通信中的问题,而协议是解决问题的手段,本次文章讨论的主要——传输层的TCP协议,它作用就是保证数据可靠传输!注:本文章,量大管饱,满满干货,一键带你认识TCP协议!TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。三个关键点面向连接可靠的基于字节流我们接下来将对这三个点进行一一阐述,对这三个点了解,你将熟悉TCP协议!

2402_85267481的博客 904

【网络基础1】

网络基础

itboy_szjj的博客 674

【Linux网络编程】网络基础

Linux网络编程 网络基础

lyh030105的博客 882

day026-网络基础-TCP11种状态与网络管理命令、抓包

命令LinuxWindows查询IP地址ip aifconfigipconfig检查端口号ssnetstatlsofnctelnetnmap检查连接情况测速iftopnethogsDNS解析dighostnslookupnslookup路径追踪mtrtracert检查链路是否畅通pingfpingping检查路由表ip roroute -n测试带宽iperf。

我的梦想有多远,我就能走多远! 1230

[网络基础]网络基础篇

1、OSI,TCP/IP,五层协议的体系结构,以及各层协议。 答:OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。 五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。 每一层的协议如下: 物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关) 数据链路

陶程的博客 2422
上一篇: 网络基础篇~网络通信模型/协议
下一篇: 网络基础篇~路由、网络类型和相关命令
linuxMinx
博客等级 码龄15年 195粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值