TCP的三次握手,四次挥手

news2024/9/20 14:47:18

1.TCP协议介绍

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。由IETF的RFC 793 [1] 定义。

既然提到可靠,那么就需要一种确认机制来实现可靠。

既然提到是基于不可靠的网络之上建立的可靠网络,那么底层网络不可靠时,TCP需要有一种能重传,可缓存数据的滑动窗口来保证数据丢失时的弥补策略来达到不同网络的端到端的不同应用进程之间的可靠通讯。

TCP协议是传输层协议,位于应用层之下,IP网络层之上。

2.TCP的三次握手

2.1 日常场景-大白话解释

我们模仿一个场景,首先我们假设A和B都有可能是聋子(接收消息异常,因为网络问题或者其他问题导致的数据接收异常或者哑巴(数据发送异常,因为网路问题或者其他问题导致的数据发送异常

1.当A和B打电话时,A首先会问:

"您好,我想和你说句话,可以听见么(请求建立连接,第一次握手)"。

2.当B听见A说话后,B回复A:

"诶,您好请说,我可以听见您说话,您可以听见我说话么(回复A的问话,第二次握手)"

3.当A听见B答复后,A应答确认听见B的回复

"我也可以听见您说话,那我们开始聊天吧(回复B的问话,第三次握手)"

每次握手互相可以确认的信息

我们来看看这三次通讯分别可以确认什么东西。

当第一次握手被B收到时,B可以确认一件事:

A不是哑巴,可以说话,同时自己B不是聋子,可以听见。

当第二次握手被A收到时,A可以确认一件事:

A知道B不是哑巴,可以答复我A,同时B也不是聋子,可以听见我A说话。

A同时知道自己A也不是哑巴,说的话B可以听见,同时知道自己A也不是聋子,可以听见B的答复

(这里很重要,当A知道对方不是哑巴也不是聋子,知道自己也不是哑巴也不是聋子的时候,就知道他们两是可以正常交流的了。所以两次握手就可以让A知道连接建立,这里也对应TCP的客户端状态在第二次握手后,就变成ESTABLISHED的状态,而且第一次握手被B收到时,A是无法知道自己的健康情况,以及对方的健康情况的)

当第三次握手被B收到时,B可以确认一件事:

A对第二次握手的答复被B收到后,B可以知道A不是聋子。同时知道了自己B不是哑巴

(在这里我们可以知道,B在第一次握手和第三次握手中,分别在第一次握手得知A不是哑巴,我B不是聋子,第二次握手得知A不是聋子,我B不是哑巴。也就是知道了互相都不是聋子和哑巴。这样就知道互相是正常交流的,所以第三次握手后,B的连接状态也变成了ESTABLISHED

A需要知道自己是否健康,和知道B是否健康,A才能知道双方连接是可靠的。对应上面绿色的4种状态。

B需要知道自己是否健康,和知道A是否健康,B才能知道双方连接是可靠的。对应上面蓝色的4种状态。

现在我们理解了日常场景后,我们再来看TCP协议场景的意义。

2.2 TCP协议场景

第一次握手:客户端将请求报文标志位SYN置为1,请求报文的seq中填入一个随机值J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。

第二次握手:服务器端收到数据包后由请求报文标志位SYN=1知道客户端请求建立连接,服务器端将应答报文标志位SYN和ACK都置为1,应答报文的ack中填入ack=J+1,应答报文的seq中填入一个随机值K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态

第三次握手:客户端收到应答报文后,检查ack是否为J+1,ACK是否为1,如果正确则将第三个报文标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

3 TCP报头

3.1序列号Seq(Sequence Number)

建立连接时有计算机生成随机数作为初始值,每次发送数据后,累加该数值。解决网络包的乱序问题。

3.2 确认应答号ACK (Acknowledgement Number)

期望下一次收到的数据的序列号,用来解决丢包问题。可以推算出当前数据的序列号就是ACK-1。

3.3 源端口source port目的端口 destination port

各占2个字节,这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。有时一个IP地址和一个端口号也称为socket

3.4 HL数据偏移

  • 占4比特,表示数据开始的地方离TCP段的起始处有多远。实际上就是TCP段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。数据偏移以32位为长度单位,
  • 也就是4个字节,因此TCP首部的最大长度是60个字节。即偏移最大为15个长度单位=1532位=154字节。

3.5 UAPRSF

URG:当URG=1时,注解此报文应尽快传送,而不要按本来的列队次序来传送。与“紧急指针”字段共同应用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,
使接管方可以知道紧急数据共有多长。
ACK:只有当ACK=1时,确认序号字段才有效;
PSH:当PSH=1时,接收方应该尽快将本报文段立即传送给其应用层。
RST:当RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接;
SYN:SYN=1,ACK=0时表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;
FIN:发端完成发送任务。

3.6 窗口

TCP通过滑动窗口的概念来进行流量控制。发送端的发送速度与接受端的接受速度不一样,为了保证数据不丢失,需要进行流量控制, 可以理解成接收端所能提供的缓冲区大小。TCP利用一个滑动的窗口来告诉发送端对它所发送的数据能提供多大的缓冲区。窗口大小为字节数起始于确认序号字段指明的值(这个值是接收端正期望接收的字节)。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。

3.7 检验和

校验整个TCP首部和数据。由发端计算和存储,接收端进行验证。

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

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

相关文章

云之道知识付费v2 3.1.1独立版小程序系统源码

云之道知识付费v2 3.1.1独立版小程序系统源码 很不错的一款知识丰富小程序,感兴趣的可以自己下载搭建尝试一下。

Java官方笔记13集合

Storing Data The Collections Framework is the most widely used API of the JDK. 集合不是数据类型,它是JDK的API,可以用来存储数据等,相当于数据结构。 the Collections Framework is a set of interfaces that models different way of …

chatgpt赋能python:用Python做中文词云

用Python做中文词云 介绍 中文词云是一种常见的数据可视化方式,通过将文本中出现频率较高的关键词以图形的形式展现出来,让人一眼就能了解文本内容的主题和关键词。在搜索引擎优化(SEO)方面,中文词云也常被用来帮助分…

【python】使用Antlr4实现识别sql中的表或视图名

前言 先上成果预览图吧 作为一个数据库sql开发者,肯定有很多人和我一样,想要有一个工具,能传入任意sql,解析出sql中的所有表。 我之前有一篇文章【AIO】将任意查询sql转换成带远程数据库DBLINK的sql 中就提到了,使用纯文本硬解析会存在很多不确定因素,比如oracle新版本…

截取屏幕中指定区域的图像pyautogui.screenshot(区域)

【小白从小学Python、C、Java】 【等级考试500强双证书考研】 【Python-数据分析】 截取屏幕中指定区域的图像 pyautogui.screenshot(区域) [太阳]选择题 关于以下代码说法错误的是: import pyautogui print("【执行】pyautogui.screenshot(region(0,0,2…

麦语言入门~001课

麦语言是一种编程语言,它是由麦肯锡公司开发的一种专门用于数据分析和统计建模的语言。麦语言具有类似于R和Python的功能,并提供了一组丰富的数据处理、统计分析和机器学习的工具。麦语言主要用于解决复杂的商业和统计分析问题,并被广泛应用于…

CRM系统能帮助外贸企业提高哪些工作效率?

外贸企业的业务和客户遍布世界各地,更涉及不同的语言和文化。因此,管理客户信息、提高服务质量、扩大市场份额成为了外贸企业亟待解决的问题。针对这些情况,不少企业开始使用CRM客户管理系统。下面说说,外贸企业为什么要用CRM系统…

Spring面试题--Spring的bean的生命周期

这个问题比较困难,设计到了spring的底层,但是通过这个的学习,可以帮助我们了解Spring容器是如何管理和创建bean实例,以及方便调试和解决问题。 BeanDefinition bean的定义信息,Spring容器在进行实例化时,…

11-C++算法01-枚举排序

📖 C算法 在编程中,算法是解决问题的一系列步骤或规则。在C中,提供了丰富的算法库,可以方便地进行各种常见的算法操作。本篇学习笔记将介绍一些常见的排序算法,帮助你理解和应用这些算法。 🚀 枚举 &…

C语言VS Code 开发环境搭建

文章目录 官方文档安装拓展生成c_cpp_properties.json生成tasks.json生成launch.json测试Debug如何让程序debug完不退出?Windows版本的配置GDB和LLDB的区别 由于之前使用VS Code较少,缺少在VS Code上开发C程序的经验。本篇博文主要记录使用VS Code开发C程…

基于Tars高并发IM系统的设计与实现-基础篇2

基于Tars高并发IM系统的设计与实现-基础篇2 三大指标 高可用 分为服务高可用与存储高可用。 服务高可用 服务高可用要做到高可用必须具备两个特点: 负载均衡可横行扩展 当服务的请求量比较高的时候,一台服务不能满足需求,这时候需要多…

sklearn.preprocessing模块介绍

数据预处理 Binarizer: 二值化 用于将数值特征二值化。它将特征值与给定的阈值进行比较,并将特征值转换为布尔值(0 或 1),取决于特征值是否超过阈值 Binarizer(*, threshold0.0, copyTrue)参数: threshold&#xf…

AGI—从GPT和大型语言模型中汲取的经验教训

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2306.08641.pdf 计算机视觉研究院专栏 Column of Computer Vision Institute 人工智能…

【计算机视觉 | 图像分类】arxiv 计算机视觉关于图像分类的学术速递(6月 29 日论文合集)

文章目录 一、分类|识别相关(12篇)1.1 Pseudo-Bag Mixup Augmentation for Multiple Instance Learning Based Whole Slide Image Classification1.2 Improving Primate Sounds Classification using Binary Presorting for Deep Learning1.3 Challenges of Zero-Shot Recognit…

万物分割SAM家族 越发壮大!HQ-SAM、FastSAM 和 FasterSAM(MobileSAM)

卧剿,6万字!30个方向130篇!CVPR 2023 最全 AIGC 论文!一口气读完。 1、(更高质量)Segment Anything in High Quality 最近的 Segment Anything Model (SAM) 代表了分割模型的一大飞跃,有强大的零…

从零实现深度学习框架——Seq2Seq机器翻译实战

引言 本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 💡系列文章完整目录: 👉点此👈 要深入理解…

【你哥电力电子】 THE BUCK-BOOST 升降压斩波电路2

BUCK-BOOST电路2 2023年1月30日 nige in Tongji University #elecEngeneer 上链 文章目录 BUCK-BOOST电路26. CCM非理想能量守恒平均分析6.1 CCM非理想大信号平均模型6.2 CCM等效大信号平均模型6.3 CCM的DC电路模型6.4 CCM的小信号线性电路模型6.5 CCM非理想小信号传递函数6.…

【SaaS】多租户系统设计

文章目录 多租户系统设计一、SaaS 的系统分级二、应用程序必须支持多租户三、数据隔离方案3.1、独立应用独立库3.2、同一个应用程序,每个租户一个库3.3、同一个应用程序,同一个数据库3.4、分片多租户 四、我们的模型选择4.1、开发实践4.2、元数据/配置驱…

vue路由传参+案例(使用mock模拟后端数据)

路由传参 跳转路由时,可以给路由对应的组件内传参 声明式导航 /path?参数名值 /path/值 —需要路由对象提前配置 path: ‘/path/:参数名’ 对应的页面组件接收传递过来的值 $route.query.参数名 $route.params.参数名 router/index.js import Vue from vue // 1. …

解析matlab的audioread()输入输出参数

目录 一、API简介 二、实验 1. matlab 2. C语言 一、API简介 链接如下: 读取音频文件 - MATLAB audioread- MathWorks 中国 也可以浏览最新的英文版API说明: 简单说明如下: 1. 读取wav格式的文件,会自动跳过44个字节的文件…