数据通信——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.hqwc.cn/news/84212.html

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

相关文章

卷积神经网络——下篇【深度学习】【PyTorch】【d2l】

文章目录 5、卷积神经网络5.10、⭐批量归一化5.10.1、理论部分5.10.2、代码部分 5.11、⭐残差网络(ResNet)5.11.1、理论部分5.11.2、代码部分 话题闲谈 5、卷积神经网络 5.10、⭐批量归一化 5.10.1、理论部分 批量归一化可以解决深层网络中梯度消失和…

[matlab]matlab配置mingw64编译器

第一步:下载官方绿色版本mingw64编译器然后解压放到一个非中文空格路径下面 比如我mingw64-win是我随便改的文件名,然后添加环境变量,选择用户或者系统环境变量添加下面的变量 变量名: MW_MINGW64_LOC 变量值:自己的m…

SVM详解

公式太多了,就用图片用笔记呈现,SVM虽然算法本质一目了然,但其中用到的数学推导还是挺多的,其中拉格朗日约束关于α>0这块证明我看了很长时间,到底是因为悟性不够。对偶问题也是,用了一个简单的例子才明…

CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现

一、漏洞描述 CVE-2022-34527 D-Link DSL-3782 v1.03及以下版本被发现包含通过函数byte_4C0160的命令注入漏洞,根据已知公开在cfg_manger 文件的代码 sub_474c78 函数中,byte_4C0160作为system的参数执行。 固件地址:https://media.dlink.e…

数据结构数组栈的实现

Hello,今天我们来实现一下数组栈,学完这个我们又更进一步了。 一、栈 栈的概念 栈是一种特殊的线性表,它只允许在固定的一端进行插入和删除元素的操作。 进行数据的插入和删除只在栈顶实现,另一端就是栈底。 栈的元素是后进先出。…

【Linux】进程状态|僵尸进程|孤儿进程

前言 本文继续深入讲解进程内容——进程状态。 一个进程包含有多种状态,有运行状态,阻塞状态,挂起状态,僵尸状态,死亡状态等等,其中,阻塞状态还包含深度睡眠和浅度睡眠状态。 个人主页&#xff…

【C++】初步认识模板

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、泛型编程二、函数模板2.1 函…

【80天学习完《深入理解计算机系统》】第十一天 3.4 跳转指令

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

【docker】运行registry

registry简介 Docker registry是docker镜像仓库的服务,用于存储和分发docker镜像。 Docker registry主要特点和功能: 存储docker镜像:提供持久化存储docker镜像的功能,存储镜像的各个layer。 分发镜像:拉取和推送镜像的去中心化存储和分发服务。 支持版本管理:给镜像打标签…

DNS域名解析服务器

一、DNS简介 1、因特网的域名结构 2、域名服务器的类型划分 二、DNS域名解析的过程 三、DNS服务器配置 两个都定义,ttl的优先: 能解析,不能拼通(没有13这个主机) 别名: 测试: 主(192…

【SkyWalking】分布式服务追踪与调用链系统

1、基本介绍 SkyWalking是一个开源的观测平台,官网:Apache SkyWalking; 可监控:分布式追踪调用链 、jvm内存变化、监控报警、查看服务器基本配置信息。 2、SkyWalking架构原理 在整个skywalking的系统中,有三个角色&am…

vue ui 创建项目没有反应

问题 cmd中输入 vue ui 没有反应 解决办法 vue ui命令需要vue3.0以上的版本才可以 1、查看当前版本 vue --version vue版本在3.0以下是没有ui命令的 2、查看版本所拥有的命令 vue -h 3、卸载之前版本的vue npm uninstall vue-cli -g 卸载完成,检查是否已经…