TCP/IP协议 - 三次握手四次挥手(入门易懂版)_6、三次握手、四次挥手-程序员宅基地

技术标签: 网络  三握四挥  网络协议  tcp/ip  

握手通俗理解为两个人见面Say Hai,客户端和服务端建立连接

挥手就可以理解为两个人结束会面,要Say Goodbai,客户端和服务端断开连接

        要了解什么是三握四挥,必须要了解一个重要的知识点:什么是TCP报文格式,也就是三握四挥中传送的内容是什么,遇到什么格式才能触发服务端和客户端的交流。

TCP报文格式

        TCP报文是TCP层传输的数据单元,也叫报文段

 从上向下依次来看:

1.端口号:用来标识同一台计算机的不同的应用进程,比如熟悉的80端口,3306端口

1)源端口:源端口和IP地址是标识报文的返回地址

2)目的端口:端口指明接收方计算机上的应用程序接口

TCP报头中的源端口号目的端口号同IP数据报中的源IP目的IP唯一确定一条TCP连接

2.序号和确认号:是TCP可靠传输的关键部分

1)序号:seq(4字节 = 32位)每一个报文都有自己的序号,这个是根据计算机自动生成的,用来唯一标识当前报文。在TCP传送的流中,每一个字节一个序号。

        比如:一个报文段的序号为 300,此报文段数据部分共有 100 字节,则下一个报文段的序号为 400 。所以序号确保了 TCP 传输的有序性

2)确认序号:(4字节 = 32位)一般用小写 ack 表示,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到

3.数据偏移/首部长度:4bits,用来表示报文首部的长度

        由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。

4.保留:6bits,为将来定义新的用途保留,一般置0

5.标志位:URG  ACK  PSH  RST  SYN  FIN,共6个,每个标志位为 1 bit,每一个标志位表示一个控制功能

1)URG:紧急指针标志,为 时表示紧急指针有效,为 则忽略紧急指针。

2)ACK确认序号标志,为 1 时表示确认号有效,为 0 表示报文中不含确认信息,忽略确认号字段。

3)PSH:push 标志,为 1 表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。

5)SYN同步序号,用于建立连接过程,在连接请求中,SYN = 1 和 ACK = 0 表示该数据段没有使用捎带的确认域,SYN = 1 和 ACK = 1 为连接应答捎带一个确认 。

6)FINfinish 标志,用于释放连接,为 1 时表示发送方已经没有数据发送了,即关闭本方数据流。

6.窗口:滑动窗口大小

        用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

7.校验和:奇偶校验

        此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

8.紧急指针:只有当 URG 标志置 1 时紧急指针才有效。

        紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

9.选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size)

        每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

10、数据部分: TCP 报文段中的数据部分是可选的。

在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

三次握手

便于理解图:

 实际:

        TCP协议是传输层的一个面向连接的安全可靠的传输协议,三次握手的机制是保证能建立一个安全可靠的连接。

  • 那么第一次握手是由客户端发起,客户端会向服务端发送一个报文,在报文里 SYN = 1 ,当服务端收到这个报文之后,就知道客户端要和我发起一个新的连接。
  • 于是,服务端就向客户端发送一个确认消息报这便是第二次握手,这个消息报文 ACK = 1 。

        (为什么两次握手不行?)以上两次握手之后,对于客户端来说已经知道,我既能给服务端发消息也能收到服务端发的消息,但是对于服务端来说,两次握手是不够的,因为,到目前为止,服务端只知道一件事情,客户端发给我的消息我能收到,我发给客户端的消息能不能收到不能确认。

  • 所以还需要进行第三次握手,当客户端收到服务端发来的确认消息的报文之后,还要继续给服务端发消息确认,也是一个 ACK = 1 确认消息报。

        通过以上三次连接,不管是客户端还是服务端,都能确认我既能给对方发消息,也能收到对方的消息,那么这个连接可以被安全的建立。

四次挥手

便于理解图:

 实际图:

  • 四次挥手也是客户端发起的,客户端会发送一个报文,报文 FIN = 1 。
  • 客户端收到这个报文之后,就知道了客户端想要和我断开连接,但是此时服务端不一定做好准备,因为当客户端发起断开连接的报文的时候,服务端有可能还有未发送完的报文消息需要继续发送,所以此时服务端只能告诉客户端我知道你要和我断开连接了,但是我这里可能还没做好准备,需要等我一下,等会我会告诉你,于是,发完这个消息确认报之后。
  • 稍过片刻之后服务端继续发送一个断开连接的报文FIN = 1 ,表明服务端已经做好断开连接的准备,那么,当这个消息发给客户端的时候。
  • 客户端同样需要继续发送一个消息确认的报文,那么通过这四次的相互沟通和连接,我就知道了,不管是客户端还是服务端,都已经做好了断开的准备。这是我对三次握手四次挥手的理解。

三握四挥疑点:

为什么不是两次握手?

        因为在这两次握手之后,对于客户端来说,发送和接收都没有问题,但是对于服务器,只知道接受没有问题,发送的消息客户端有没有收到,服务器是不知道的,因此需要第三次握手,第三次握手保证了客户端和服务端既能给对方发送消息,又能响应对方。

为什么不是四次握手?

        这是两种情况,第一种是把服务器的确认ACK和连接SYN分两次发送,这种在理论上是可行的,就好比

服务器:我在
服务器:你在吗?

但是一次性能干完的事情,非分两次,太浪费资源了。
第二种情况就是客户端再次发送确认消息,也是同理,三次握手就已经保证了双方的连接是可靠的,客户端再确认也是浪费资源

为什么不是三次挥手,是四次挥手?

        当客户端发送断开请求给服务端时(第一次挥手),服务端首先应该回复客户端确认收到(第二次挥手),但此时不确定服务端是否准备好(是否有未处理完的消息),所以应该等服务端处理好之后,再发送断开消息给客户端,告诉客户端已经准备好断开了(第三次挥手),这样客户端收到消息就会知道服务端已经准备好,可以断开,但此时客户端要给服务端发送确认收到的消息(第四次挥手),这样便确保了整个挥手断开过程顺利进行。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/DEGv587/article/details/122682319

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文