TCP报文结构以及三次握手以及四次握手

news2024/11/27 14:32:17

 源端口号:

目标端口号:用来标识接收方计算机的具体应用进程

序号:发送数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。例如:一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。序号保证了TCP传输的有序性。

确认序号:即ACK,指明下一个期待收到的字节序号。确认号只有当ACK标志为1时才有效。例如收到一个报文为300,报文段数据部分长度为100字节,回复的ACK的确认序号是400.确认序号保证了序号之前的所有数据正确收到。

标志位:

UGR ACK PSH RST SYN FIN ,六个标志位代表六个不同的功能。

  1. UGR: 紧急指针标志,为 1 时表示紧急指针有效,为 0 则忽略紧急指针
  2. ACK: 确认序号标志,为 1 时表示确认序号有效,为 0 则表示报文中不含有确认信息,忽略确认字段号
  3. PSH: push标志,为 1 表示是带有push标志的数据,指示接收方在接收到数据以后,应尽快的将这个报文交付到应用程序,而不是在缓冲区缓冲
  4. RST: 重置连接标志,用于由主机崩溃或者其他原因而出现错误的连接,或者用于拒绝非法的报文段和拒绝连接请求
  5. SYN: 同步序号,用于连接建立过程,在请求连接的时候,SYN=1和ACK=0表示该数据段没有捎带确认域,而连接应答捎带一个确认,表示为SYN=1和ACK=1
  6. FIN: 断开连接标志,用于释放连接,为 1 表示发送方已经没有数据发送,即关闭数据流

窗口: 滑动窗口大小,用来告知发送端,接收端的缓存大小,以此来控制发送端的发送速率,从而达到流量控制。窗口大小是一个16比特位的字段,因而窗口大小最大为65535字节。

 

TCP三次握手过程

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个报文。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。
三次握手过程的示意图如下:

 

第一次握手:
客户端将TCP报文标志位SYN置为1随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后。
第二次握手:
服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

四次挥手:

 挥手请求可以是Client端,也可以是Server端发起。

第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,表示Client端没有数据要发送给Server端了。

第二次分手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Server端告诉Client端,我确认并同意你的关闭请求。

第三次分手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接

第四次分手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到Server的重发FIN报文,则证明Server端已正常关闭,那好,Client端也可以关闭连接了

为什么连接的时候是三次握手,关闭的时候是四次挥手?

建立连接时因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。所以建立连接只需要三次握手。

关闭连接时,当Client端发出FIN报文段时,只是表示Client端告诉Server端数据已经发送完毕了。当Server端收到FIN报文并返回ACK报文段,表示它已经知道Client端没有数据发送了,但是Server端还是可以发送数据到Client端的,所以Server很可能并不会立即关闭SOCKET,直到Server端把数据也发送完毕
当Server端也发送了FIN报文段时,这个时候就表示Server端也没有数据要发送了,就会告诉Client端,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vmware安装redhat 8

vmware安装redhat 8 1、下载镜像文件1.1 镜像文件 2、安装系统2.1、选择自定义安装2.2、兼容性选择2.3、选择镜像文件导入2.4、设置用户名密码2.5、选择虚拟机在磁盘上的位置2.6、选择处理器数量2.7、选择内存大小2.8、选择桥接或NAT2.9、选择SCSI控制器类型2.10、选择虚拟机磁…

第十二章 Transform组件(下)

上一章节中我们介绍了Transform组件的属性和方法。我们发现 Transform 中有right,up和forward,而 Vector3 类中也有right,up和forward,他们是一回事嘛?我们使用Forward来说明两者之间的区别。我们知道,改变…

【web基础】html常用标签+作品展示

前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 说明:此部分是java web基础知识&a…

Python游戏利器pygame,疯狂赛车(34)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 欢迎和猫妹一起,趣味学Python。 今日主题 你玩过游戏吗? 你喜欢玩游戏吗? 手机游戏,电脑游戏,还是游戏机游戏…

java基础入门-02

Java基础入门-02 8、面向对象8.1. 类和对象8.1.1 类和对象的理解8.1.2 类的定义8.1.3 对象的使用8.1.4 学生对象-练习 8.2. 对象内存图8.2.1 单个对象内存图8.2.2 多个对象内存图 8.3. 成员变量和局部变量8.3.1 成员变量和局部变量的区别 8.4. 封装8.4.1 封装思想8.4.2 private…

智能网联汽车城市化的进程和思考

4月19日,工信部官网显示,支持湖北(襄阳)、浙江(德清)、广西(柳州)创建国家级车联网先导区。至此,车联网国家级先导区正式扩容,由4个增至7个。智能网联作为新生…

Qt5.9学习笔记-事件(一)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

哪些问题是ChatGPT不会回答我的?

哪些问题是ChatGPT不会回答我的? 文章目录 哪些问题是ChatGPT不会回答我的?前言ChatGPT擅长回答哪些问题呢?结语 前言 对于chatgpt,人们或许会觉得无论什么问题,它都能够答复,但对于以下这些问题&#xff…

云和恩墨荣获2023数字中国创新大赛·信创赛道“最具发展潜力奖”等4个奖项

4月27日,作为2023数字中国创新大赛信创赛道系列活动之一的“信创与开源技术论坛”在福州召开,信创赛道全国总决赛颁奖仪式在该论坛上举行。云和恩墨的参赛作品“安稳易用的企业级国产数据库 - MogDB”经过层层筛选、角逐,最终荣获“信创赛道最…

2023五一数学建模竞赛选题人数公布

数据来源自,各个平台人数投票统计,仅供参考。 具体数值比例为: 题号人数A504B1174C1905 目前,五一数模竞赛C题半成品论文基本完成制作(累计35页,10000字),注:蓝色字体…

面向画布(Canvas)的JavaScript库

面向画布(Canvas)的JavaScript库 总结 每个库各有特色,根据需求选择 学习要点 面向画布(Canvas)的JavaScript库 EaselJS 是一个封装了 HTML5 画布(Canvas) 元素的 JavaScript 库。jCanvaScript面向HTML5画布(canvas)的Javascript类库&…

【C++】switch 语句

1、缘起 最近在 BiliBili 黑马程序员学习 C 编程语言,今天学习到了 switch 语句。为了加强记忆,所以就写了一篇关于 switch 语句的博客。 switch 语句是 C 中的一种流程控制语句,它可以根据变量的值来执行不同的代码块。这种语句通常用于替代…

《LearnUE——基础指南:上篇—0》——UE架构

UE架构 给我一个UObject,我可以翘起整个UE 思考:如果让我们自己来设计一款3D渲染引擎,你会怎么设计整个架构? 目前,市面上有众多的3D游戏引擎和各种三维渲染引擎,像常见的渲染库OpenGL,WebGL&…

垃圾邮件、欺骗和网络钓鱼,如何防止电子邮件安全意识的威胁

网络安全意识月已过半,本周我们的重点是电子邮件安全意识。 在我们最近为此活动撰写的一篇博客中,我们介绍了电子邮件系统面临的一些最严重的危险——包括垃圾邮件、欺骗和网络钓鱼——以及用户如何主动在他们的电子邮件中发现这些攻击并采取措施避免它…

【Python】如此轻松就能PDF和word互转?【详细教程来啦】

文章目录 前言一、pdf2docx功能二、限制三、安装四、案例总结 前言 可将 PDF 转换成 docx 文件的 Python 库。该项目通过 PyMuPDF 库提取 PDF 文件中的数据,然后采用 python-docx 库解析内容的布局、段落、图片、表格等,最后自动生成 docx 文件。 一、…

A-star算法自学

搜索过程 广度优先搜索(BFS)算法与Dijsktra算法的结合,可以得出最短的路径。 将地图信息通过划分为方形或者其他多边形格子的方法进行表示,便于利用二维数组存放地图信息,每个格子有可行和不可行两种状态;…

[Python图像处理] 小波变换执行图像融合

小波变换执行图像融合 图像融合基础使用小波变换执行图像融合图像融合相关链接 图像融合基础 图像融合是将多个输入图像组合到单个输出图像中的过程,输出图像中包含比单个输入图像更好的场景描述。一个好的图像融合方法应当具备以下属性: 它可以保留不…

JavaScript实现用while语句计算1+n的和的代码

以下为输入圆的半径,输出周长、体积和面积实现结果的代码和运行截图 目录 前言 一、实现用while语句计算1n的和 1.1运行流程及思想 1.2代码段 1.3 JavaScript语句代码 1.4运行截图 【附加】用while计算110的和 1.1代码段 1.3 运行截图 前言 1.若有选择,您…

如何为ChatGPT应用程序自定义模型-微调(fine-tuning)

介绍 通过微调,您可以通过提供以下内容从通过 API 提供的模型中获得更多收益: 比提示设计更高质量的结果能够训练比提示所能容纳的更多示例由于提示时间较短,可以节省代币更低的延迟请求 GPT-3 已经对来自开放互联网的大量文本进行了预训练…

Opencv C++图像处理(全)

文章目录 Opencv官方资料BUG集合一、入门基础1.1、头文件说明&#xff1a;#include <opencv2/opencv.hpp>1.2、头文件说明&#xff1a;#include <opencv2/highgui/highgui.hpp>1.3、计算消费时间函数1.3.1、耗时&#xff1a;getTickCount()1.3.2、频率&#xff1a;…