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

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

相关文章

TCP性能机制

延迟应答 为什么有延迟应答 发送方如果长时间没有收到ACK应答,则会触发超时重传机制,重新发送数据包。但如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小,发送方一次只能发少量数据,效率较低。 举个例子理解一…

wazuh环境配置和漏洞复现

1.wazuh配置 虚拟机 (OVA) - 替代安装 (wazuh.com)在官方网页安装ova文件 打开VMware选择打开虚拟机,把下载好的ova文件放入在设置网络改为NAT模式 账号:wazuh-user 密码:wazuh ip a 查看ip 启动小皮 远程连接 账号admin …

BMP图片读写实践:rgb转bgr

本实理论上支持24位图和32位图&#xff0c;实际上只测试了24位。原理很简单&#xff0c;就是RGB中的蓝色字节和红色字节交换。 测试代码1&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/stat.h> #include <stdlib.h> #include &l…

pdf.js构建时,报Cannot read property ‘createChildCompiler‘ of undefined #177的解决方法

在本地和CI工具进行构建时&#xff0c;报如下错误。 Cannot read property createChildCompiler of undefined #177解决方法&#xff1a; 找到vue.config.js&#xff0c;在 module.exports {parallel: false, //新增的一行chainWebpack(config) {....config.module.rule(&…

Docker搭建Redis集群

Docker搭建Redis集群 一 、搭建Redis集群的优点 先说说单个redis的缺点&#xff1a; 1、单个redis具有不稳定性。当redis服务死机了或者redis服务被kill掉了&#xff0c;就没有可用的redis服务了。 2、单个redis的读写能力是有限的。 再根据单个redis服务的缺点谈谈redis集群的…

计算机视觉 – Computer Vision | CV

计算机视觉为什么重要&#xff1f; 人的大脑皮层&#xff0c; 有差不多 70% 都是在处理视觉信息。 是人类获取信息最主要的渠道&#xff0c;没有之一。 在网络世界&#xff0c;照片和视频&#xff08;图像的集合&#xff09;也正在发生爆炸式的增长&#xff01; 下图是网络上…

LVS集群 (四十四)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、集群概述 1. 负载均衡技术类型 2. 负载均衡实现方式 二、LVS结构 三、LVS工作模式 四、LVS负载均衡算法 1. 静态负载均衡 2. 动态负载均衡 五、ipvsadm命令详…

【分析绘图】R语言实现一些常见的绘图

微生信-在线绘图网站 线性图 library(ggplot2)x <- rnorm(100, 14, 5) # rnorm(n, mean 0, sd 1) y <- x rnorm(100, 0, 1) ggplot(data NULL, aes(x x, y y)) # 开始绘图geom_point(color "darkred") # 添加点annotate("text",x 13,…

Mybatis小记

目录 Mybatis第一个程序 xml文件 测试类 错误排查 Mybatis第一个程序 1.搭建实验数据库 2.导入MyBatis相关jar包 3.编写MyBatis核心配置文件 4.编写MyBatis工具类 5.创建实体类、 6.编写Mapper接口类 7.编写Mapper.xml配置文件 8.编写测试类 对象传参只引用需要的属性就可…

springcloud3 GateWay章节-Nacos+gateway(跨域,filter过滤等5

一 常用工具类 1.1 结构 1.2 跨域 Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowe…

lua的函数

1.一个示例实现列表的元素的求和 [root]# more funcAdd.lua function add(a)local sum 0for i 1,#a dosum sum a[i]endreturn sum enda {1,2,3,4,5,6}local sum add(a)print(sum)

Flask入门一 ——虚拟环境及Flask安装

Flask入门一 ——虚拟环境及Flask安装 在大多数标准中&#xff0c;Flask都算是小型框架&#xff0c;小到可以称为“微框架”&#xff0c;但是并不意味着他比其他框架功能少。Flask自开发伊始就被设计为可扩展的框架。Flask具有一个包含基本服务的强健核心&#xff0c;其他功能…

大模型理解之CLIP

前言 2021年2月份&#xff0c;CLIP模型被提出&#xff0c;想法很简单&#xff0c;性能高效&#xff0c;而且具备很好的泛化性。我在这里简单谈论下我对CLIP模型的理解&#xff0c;以及发现的一些问题。 我是在沐神的视频中了解的CLIP, 里面提到CLIP最大的贡献在于打破了固定类…

ELK之LogStash介绍及安装配置

一、logstash简介 集中、转换和存储数据 Logstash 是免费且开放的服务器端数据处理管道&#xff0c;能够从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的“存储库”中。 Logstash 能够动态地采集、转换和传输数据&#xff0c;不受格式或复杂度的…

10.Oracle中decode函数

【函数格式】&#xff1a; decode ( expression, condition_01, result_01, condition_02, result_02, ......, condition_n, result_n, result_default) 【函数说明】&#xff1a; 若表达式expression值与condition_01值匹配&#xff0c;则返回result_01&#xff0c;…

[ DPU / SmartNIC/ 网卡 ]系统级的测试验证

开局一张图&#xff0c;其他慢慢来编 信雅纳DPU测试解决方案荣获第三届DPU峰会的“匠芯技术奖” 看完这张&#xff0c;小编再送一张&#xff1a;&#xff1a;&#xff1a; 网卡进化 更智能的加速卡SmartNIC/DPU 例如&#xff0c;将部分网络协议处理的功能卸载到 DPU 网卡&am…

初试Eureka注册中心

Eureka是spring cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)P(分区容错性)。一个Eureka中分为eureka server和eureka client。其中eureka server是作为服务的注册与发现中心。 搭建eureka服务 引入eureka依赖 引入SpringCloud为eureka提供的starter依…

Arcgis colorRmap

arcgis中colorRmap对应的名称&#xff1a; 信息来源&#xff1a;https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm 在arcpy中使用方法&#xff1a; import arcpy cr arcpy.mp.ColorRamp("Yellow to Red")python中 ma…

Python“牵手”淘宝商品列表数据,关键词搜索淘宝API接口数据,淘宝API接口申请指南

淘宝平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;淘宝API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问淘宝平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现淘宝平台…

【面试题】MVC、MVP与MVVM模式是什么?

MVC模式 MVC是应用最广泛的软件架构之一&#xff0c;一般MVC分为&#xff1a; Model&#xff08; 模型 &#xff09;、Controller&#xff08; 控制器 &#xff09;、View&#xff08; 视图 &#xff09;。 这主要是基于分层的目的&#xff0c;让彼此的职责分开。View 一般…