0

0

TCP三次握手建立链接与四次挥手断开链接的示例分析

WBOY

WBOY

发布时间:2023-05-11 22:34:24

|

1012人浏览过

|

来源于亿速云

转载

一步一个脚印。

先简单介绍一下TCP协议。

  TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。很复杂,但属于不论程序员还是运维人员都必会的基本功。

  面向对象的——连接双方在通信前需要预先建立一条连接,这犹如实际生活中的打电话,电话必须拨通了以后才能交流。

  可靠的——TCP协议中有诸多的规则来保障通信链路的可靠性,含应用数据分隔、重传机制、对首部和数据校验、对收到的数据进行排序,然后交给应用层、接收端会丢弃重复的数据、可进行流量控制。

TCP数据被封装在一个IP数据报中,格式如下: 

TCP三次握手建立链接与四次挥手断开链接的示例分析

含:端口号[16bit]、序号[32bit]、偏移[4bit]、Reserved [6bit]、标志[6bit]、窗口大小(window)[16bit]、校验和[16bit]、紧急指针[16bit]、TCP选项

这里需要注意的:

  • TCP的包是没有IP地址的,那是IP层上的事,但是有源端口和目标端口。

  • 一个TCP连接需要四个元组来表示是同一个连接(src_ip, src_port, dst_ip, dst_port)准确说是五元组,还有一个是协议。但因为这里只是说TCP协议,所以,这里我只说四元组。

  • Sequence Number是包的序号,用来解决网络包乱序(reordering)问题。

  • Acknowledgement Number就是ACK——用于确认收到,用来解决不丢包的问题

  • Window又叫Advertised-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控的

  • TCP Flag ,也就是包的类型,主要是用于操控TCP的状态机的

     URG: 紧急指针有效

     ACK:确认序号有效

     PSH:接收方应尽快将这个报文段交给应用层

     RST:重建连接

     SYN:同步序号,用来发起一个连接

     FIN: 发端完成发送任务(主动关闭)  

    喵记多
    喵记多

    喵记多 - 自带助理的 AI 笔记

    下载

三次握手建立链接

1.请求端(client客户端)发送一个SYN=1指明客户打算连接的服务器的端口,TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的初始序号seq为一个随机数假定为seq=x。

2.服务端(server)对客户端报文段进行确认,将确认序号设置为ACK=x+1。同时也请求连接客户端,发送SYN=1,并且发送初始seq号假定为seq=y。

3.客户端对服务端报文段进行确认,发送确认序号并同意与服务端建立连接ACK=y+1。

这三个报文段完成连接的建立。这个过程也称为三次握手(three-way handshake)

四次挥手断开链接

1.主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

2.主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我也没有数据要发送了,可以进行关闭连接了;

3.主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态;

4.第主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

至此,TCP的四次分手就这么愉快的完成了。

建立链接和断开链接图示如下:

TCP三次握手建立链接与四次挥手断开链接的示例分析

下面来分解一下为什么是三次握手呢?

为了防止已失效的链接请求报文段突然又传送到了服务器端,因而产生错误。举一个“栗”子。

client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。"

这就很明白了,防止了服务器端的一直等待而浪费资源。

那么又为什么是四次挥手呢?

TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2, 它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN 报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此 就会愉快的中断这次TCP连接。如果要正确的理解四次分手的原理,就需要了解四次分手过程中的状态变化。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

49

2025.11.27

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

38

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

52

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

10

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

65

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

75

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

swoole入门物联网开发与实战
swoole入门物联网开发与实战

共15课时 | 1.2万人学习

swoole项目实战(第二季)
swoole项目实战(第二季)

共15课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号