数据通信——TCP(三次握手及基础特性)

引言

    TCP(传输控制协议),不像之前的UDP那样,因为这个协议要将很多复杂的东西,所以这次的特性是简单的特性,后续会讲一些复杂难懂的知识,这次先说一些TCP明显的特性

面向连接

    TCP提供了对连接的管理和维持机制,通信基于连接进行。那是什么连接管理机制呢?那就是著名的TCP三次握手

    在正式描述三次握手顺序前,先举个例子。

    你约你女朋友去吃饭,于是发消息

你:在吗?今天去吃饭啊!

女朋友:在吗?我在这。可以去吃饭!那今天几点去啊?

你:我在。我看到你说可以去吃饭的消息了!咱们6点去吧!

    当然,可能发生你女朋友就没给你回话,也有可能发生女朋友跟你回复的话和“今天晚上去楼下吃饭”毫无关系,这都代表通信失败,别舔了。

    你可能觉得上面的通信有点繁琐,有时候我们微信对话都是很简洁,怎么这么复杂,每次发完信息,还要对他上面发的信息说“我收到了”。其实我们是发出去的信息有回复就是默认收到了。但是计算机不是人,它很笨,而且这种复杂更是体现了TCP的细上加细。好了,下面就来看看吧!

先解释下几个词:

1.Seq序号:占32位,是用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

2.Ack序号:占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

3.SYN:同步序列编号(Synchronize Sequence Numbers)。

以下是三次握手的简易流程:

    A与B建立TCP连接时:首先A向B发SYN,然后B回复SYN+ACK,最后A回复ACK确认,这样TCP的一次三次握手的过程就完成了。

再来看看详细流程:

    第一次握手:建立连接时,客户端发送syn包(syn=1)到服务器,其中携带Seq(seq=x)序号,并进入SYN_SEND状态,等待服务器确认;

    第二次握手:服务器收到syn包,回复一个相同的SYN表示我们在同一个序列上,并用ACK确认我收到了你的SYN信息。随后,服务器发来它的seq=y序列号,并用ACK=x+1表示我收到了你上面发来的seq=x的信息。此时服务器进入SYN_RECV状态。

    第三次握手:客户端收到服务器的SYN和ACK包,向服务器发送一个ACK=1,表示你上面的ACK我收到了,随后seq发送之前的ack=x+1,确认包回复之前的Seq=y,ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。   

华为教案对TCP握手的图示

    就好比假设对方给你发送了数据12345,但是你就收到1后居然收到了5,ack并不会理会这个5,他只知道在1之后没有收到数据,会要求对方继续发送后续数据。

    这和UDP不同,UDP不会管你是否收到了数据,它只管发出去就不管了,但是TCP很负责,它不仅要保证自己收到了信息,也要保证发来的顺序必须一致,否则拒绝接收后续报文,要求你重复刚才没有发到的数据。

点对点的全双工通信

TCP仅能通过点对点方式进行通信,连接的双方只有两端。不过它拥有点对点的全双工通信能力。每个端口维护和收/发两个缓存队列,各自管理。

可靠交付与面向字节

    TCP是可靠交付,而且面向字节流通信,不像UDP玩命的发送数据,它对数据的流量有控制能力,而且他非常的细致,发来的数据会以字节流的方式不断地进行发送接收。也就是他将报文拆分成了很多字节流,但是每个字节流都有相应的顺序,顺序不对不会接受后续流量,也因为该特性她并不保留边界。消息由字节流的重组是由应用层处理。TCP可以支持任何大小的流量,对他而言都是一串串字节而已。他还有差错控制,以及窗口的拥塞机制

接下来,我们将向其中的特性细致的讲解。

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

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

相关文章

构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程

文章目录 架构要点优势与应用案例研究:基于云原生大数据平台的智能营销分析未来展望:大数据与人工智能的融合结论 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏…

【STM32RT-Thread零基础入门】 6. 线程创建应用(线程挂起与恢复)

硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、RT-Thread相关接口函数1. 挂起线程2. 恢复线程 二、程序设计1. car_led.c2.car_led.h3. main.c 三、程序测试总结 前言 在上一个任务中&a…

Linux操作系统--常用指令(文件目录类指令)

(1).pwd指令 功能:显示当前工作目录的绝对路径。 如果你使用cd命令进行切换的时候不知道到了哪里,就可以使用该指令输出路径查看。 (2).cd命令 功能:用于切换路径 语法: cd + 路径(路径可以指绝对路径,也可以是相对路径)

URL中传递JSON字符串

今天遇见了一个需求,从post请求中在url里传递json字符串, 就是路径?参数11那种情况 最后怎么解决的呢? 需要使用前端方法,先用JSON.stringify格式化成字符串,再用encodeURIComponent把JSON里面的符号转转为url支持的…

ppt如何转pdf文档?用这个方法可将ppt转pdf

在现代社会中,PPT(幻灯片)已成为一种常见的演示工具,被广泛应用于学术、商务、培训等领域。然而,PPT文件的使用和分享存在一些问题,例如文件格式不兼容、内容修改易被篡改等。为了解决这些问题,将PPT转换为PDF格式已成…

AI夏令营第三期用户新增挑战赛学习笔记

1、数据可视化 1.数据探索和理解:数据可视化可以帮助我们更好地理解数据集的特征、分布和关系。通过可视化数据,我们可以发现数据中的模式、异常值、缺失值等信息,从而更好地了解数据的特点和结构。2.特征工程:数据可视化可以帮助…

TinyVue - 华为云 OpenTiny 出品的企业级前端 UI 组件库,免费开源,同时支持 Vue2 / Vue3,自带 TinyPro 中后台管理系统

华为最新发布的前端 UI 组件库,支持 PC 和移动端,自带了 admin 后台系统,完成度很高,web 项目开发又多一个选择。 关于 OpenTiny 和 TinyVue 在上个月结束的华为开发者大会2023上,官方正式进行发布了 OpenTiny&#…

成都睿趣科技:抖音开网店前期的流程是什么

随着互联网的快速发展,电子商务成为了商业领域中的一大利器,而在电商领域中,抖音作为一个强大的平台,也吸引了众多商家的目光。然而,要在抖音上开设一家成功的网店,并不是一件简单的事情,需要经…

研磨设计模式day12命令模式

目录 定义 几个参数 场景描述 代码示例 参数化设置 命令模式的优点 本质 何时选用 定义 几个参数 Command:定义命令的接口。 ConcreteCommand:命令接口的实现对象。但不是真正实现,是通过接收者的功能来完成命令要执行的操作 Receiver&#x…

无涯教程-进程 - 信号(Signals)

信号是对进程的通知,指示事件的发生。信号也称为软件中断,无法预知其发生,因此也称为异步事件。 可以用数字或名称指定信号,通常信号名称以SIG开头。可用信号kill –l(列出信号名称为l)检查可用信号,如下所示- 无论何…

骨传导耳机和普通耳机哪个危害大?一文读懂骨传导耳机!

作为一个5年重度运动爱好者,常年跑步、爬山、骑行,入手过的各类耳机超30款,用真实体验告诉大家,骨传导耳机和普通耳机哪个危害大! 首先大家要知道的是,不管什么类型的耳机,如说说音量过大&…

SpringBoot生成和解析二维码完整工具类分享(提供Gitee源码)

前言:在日常的开发工作当中可能需要实现一个二维码小功能,我参考了网上很多关于SpringBoot生成二维码的教程,最终还是自己封装了一套完整生成二维码的工具类,可以支持基础的黑白二维码、带颜色的二维码、带Logo的二维码、带颜色和…

Spring Cloud Alibaba-Sentinel-Sentinel入门

1 什么是Sentinel Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里…

【深度学习】实验02 鸢尾花数据集分析

文章目录 鸢尾花数据集分析决策树K-means 鸢尾花数据集分析 决策树 # 导入机器学习相关库 from sklearn import datasets from sklearn import treeimport matplotlib.pyplot as plt import numpy as np# Iris数据集是常用的分类实验数据集, # 由Fisher, 1936收集…

JetBrains 2023.2全新发布!IDEA、PyCharm等支持AI辅助

日前JetBrains官方正式宣布旗下IDE系列今年第二个重要版本——v2023.2全新发布,涵盖了 IntelliJ IDEA、PyCharm、WebStorm等一众知名产品,接下来我们一起详细了解一下他们的更新重点吧~ IntelliJ IDEA v2023.2——引入AI辅助开发 IntelliJ IDEA 2023.2…

动捕设备助力打造沉浸式虚拟现实体验

在纪录片《超时空寻找》中,借助了实时动捕设备,基于三维数字人技术进行老战士与历史场景还原,让抗美援朝老战士可以通过虚拟现实技术,跨越时空与战友实现隔空对话。 随着动捕设备的不断发展,虚拟现实技术越来越成熟&a…

WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换 资料收集

野火 ATGM332D简介 高性能、低功耗 GPS、北斗双模定位模块 STM32 GPS定位_为了维护世界和平_的博客-CSDN博客 秉火多功能调试助手上位机开源!共六款软件,学到你吐... , - 电脑上位机 - 野火电子论坛 - Powered by Discuz! https://www.firebbs.cn/for…

M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例

使用 M1 Pro (不支持python2的安装)开发,需要使用 Python 2.7 的环境,在使用 pyenv 安装 Python 2 时遇到了各种奇怪的问题。最终,我决定使用 Docker 搭建开发环境,并使用 VS Code 连接到本地容器。以下是详…

Unity 应用消息中心-MessageCenter

Ps:主要解决耦合问题,把脚本之间的联系通过不同消息类型事件形式进行贯通 1.MessageCenter主脚本 2.DelegateEvent消息类型脚本 3.MC_Default_Data具体接收类脚本 using System; using System.Collections; using System.Collections.Generic; using …

unity 模型显示在UI上 并交互(点击、旋转、缩放)

项目工程:unity模型显示在UI上并交互(点击、旋转、缩放)资源-CSDN文库 1.在Assets创建 Render Texture(下面会用到),根据需要设置Size 2.创建UIRawImage,并把Render Texture赋上 3.创建相机&am…