TCP 协议的相关特性

news2024/11/25 19:27:19

TCP 协议的相关特性

  • 🔎TCP协议的特点
  • 🔎TCP协议段格式
  • 🔎TCP协议的相关特性
    • 确认应答(ACK)
    • 超时重传
    • 三次握手
    • 四次挥手
    • 三次挥手与四次握手的注意事项
  • 🔎结尾

TCP(Transmission Control Protocol)
传输控制协议

🔎TCP协议的特点

(1)有连接
(2)可靠传输
(3)面向字节流
(4)全双工

🔎TCP协议段格式

在这里插入图片描述
图片来自网络

URG: 确认紧急指针是否有效
ACK: 确认序号是否有效
PSH: 提示接收端应用程序立刻从 TCP 缓冲区把数据读走
RST: 对方要求重新建立连接, 就把携带 RST 标识的称为 复位报文段
SYN: 对方请求建立连接, 就把携带 SYN 标识的称为 同步报文段
FIN: 通知对方, 本端要关闭了, 就把携带 FIN 标识的称为 结束报文段

🔎TCP协议的相关特性

确认应答(ACK)

在这里插入图片描述

主机A 向主机B 发送数据, 主机B 收到数据后返回给主机A一个响应(确认应答)

举个栗子🥝

滑稽老哥约女神出去吃饭
于是就给女神发消息说, 女神女神, 我请你吃饭好吗
这时候女神收到滑稽老哥发送到的消息并返回一个好呀好呀(确认应答)

在这里插入图片描述

滑稽老哥一琢磨, 既然女神上次都同意和我一起吃饭了, 那这次我约女神是不是也会和我一起吃饭呢
滑稽老哥想着想着, 既然女神上次都同意和我一起吃饭了, 那是不是也同意做我女朋友了呢

于是滑稽老哥就给女神发送消息说
女神女神, 我能请你吃饭吗?
女神女神,你能做我女朋友吗?

在这里插入图片描述

结果不出所料, 女神发送的是一个滚
但是由于网络的原因
滑稽老哥最先收到的是滚, 后面才收到好呀好呀

也就是说
滑稽老哥接收的情况是
女神, 我能请你吃饭吗? 滚
女神, 你能做我女朋友吗? 好呀好呀

但实际情况却是
女神, 我能请你吃饭吗? 好呀好呀
女神, 你能做我女朋友吗? 滚


为了解决上述问题, 就需要针对发送的消息进行编号
给发送的消息分配一个序号, 同时应答报文, 给出确认序号

在这里插入图片描述

这样滑稽老哥就不会错解女神的意思了

在这里插入图片描述

TCP 将每个字节的数据都进行了编号, 即为序列号
(针对每个字节进行编号)

在这里插入图片描述

超时重传

有两种情况会导致超时重传
(1)数据直接丢了, 接收方没有收到, 自然不会确认应答(ACK)
(2)接收方收到了数据, 返回的 ACK 丢了

在这里插入图片描述

情况1
数据直接丢了, 接收方没有收到, 自然不会确认应答(ACK)

在这里插入图片描述
情况2
接收方收到了数据, 返回的 ACK 丢了

针对上述情况
如果接收方收到重复数据
TCP 会在接收缓冲区根据收到的数据的序号, 自动去重

那么, 如果重传的数据也丢了呢?
这种情况就属于第一种情况(数据丢了, 接收方没有收到)
TCP 会继续超时重传

数据每丢失一次, 等待重传的时间都会变长(重传的频率降低了)
如果多次重传, 都无法得到 ACK, 此时 TCP 就会尝试重置连接
如果重置连接也失效, TCP 就会关闭连接, 放弃网络通信

三次握手

握手指的是通信双方, 进行一次网络交互
三次握手, 相当于客户端与服务器之间, 进行了三次交互, 建立了连接关系

在这里插入图片描述

syn: 同步报文段
(一方向另一方申请建立连接)

ack: 确认应答
(一方收到另一方的请求后给予的响应)

举个栗子🥝

滑稽老哥和女神开黑打游戏
为了确保能够开黑顺利, 双方需要判断通信设备是否正常

(1)
滑稽老哥向女神发出"喵喵喵"(syn)
(判断自己的麦克风🎤及女神的耳机🎧是否正常)

(2)
女神向滑稽老哥发出"喵喵"(ack + syn)
(表示自己的耳机🎧及滑稽老哥的麦克风🎤正常)(ack)
(判断自己的麦克风🎤及滑稽老哥的耳机🎧是否正常)(syn)

(3)
滑稽老哥再次向女神发出"喵"(ack)
(表示女神的麦克风🎤及自己的耳机🎧正常)

在这里插入图片描述

经过上面的三次连接, 可以判断通信双方的通信设备是否正常

三次握手本质上就是验证客户端和服务器各自的发送能力和接收能力是否正常
为后续的可靠传输奠定基础


三次握手的过程由内核自动完成, 应用程序无法进行干预
建立连接的过程一定是客户端发起的

四次挥手

挥手是指通信双方, 各自给对方发送一个 fin, 再各自给对方返回 ack

在这里插入图片描述

fin: 结束报文
(一方向另一方表示断开连接)

ack: 确认应答
(一方收到另一方的请求后给予的响应)

举个栗子🥝

滑稽老哥终于如愿追到了女神
但过了一些日子, 滑稽老哥还是觉得单身的日子比较快乐
于是他就向女神提出分手

在这里插入图片描述
(1)
滑稽老哥向女神提出分手(fin)
(滑稽老哥想恢复单身的快乐)

(2)
女神对滑稽老哥表示震惊(ack)
(女神表示当初你追我时的那些话都是骗人的, 一脸震惊的看待提出分手的滑稽老哥)

女神对滑稽老哥表示那就分手!(fin)
(女神表示既然你说分手, 那就分, 反正追我的人有很多)

滑稽老哥看着同意分手的女神表示很快乐(ack)
(滑稽老哥如愿恢复单身)


断开连接可以是客户端向服务器断开连接, 也可以是服务器向客户端断开连接
四次挥手有一定几率变成三次挥手
(也就是 ack 和 fin 合并发送)

三次挥手与四次握手的注意事项

为什么三次握手能将 ack 和 syn 合并
而四次挥手不一定能将 ack 和 fin 合并

因为三次挥手的过程中, ack 和 syn 是由内核来完成的

而四次挥手过程中
ack 是由内核完成的, fin 是由应用程序代码控制的
ack 会在收到 fin 的时候第一时间返回
fin 则是由代码调用到 socket.close() 的时候才会触发
(如果此时的 close 方法前面还有其他任务需要执行, 比如 sleep() 等, 就会造成不能及时的发送 fin)

🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油

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

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

相关文章

Hbase伪分布安装配置

Hbase安装配置 文章目录Hbase安装配置Hbase安装前提下载Hbase压缩包软件版本兼容性Hadoop和HbaseHbase和JDK软件安装软件位置创建数据保存和日志保存文件夹修改配置文件修改hbase-site.xml文件修改hbase-env.sh文件修改~/.bashrc文件启动hbase并验证权限问题Permission denied修…

外源6-BA在缓解多花黄精种子出苗过程中的代谢及转录组学变化

文章标题:Transcriptomics and metabolomics changes triggered by exogenous 6-benzylaminopurine in relieving epicotyl dormancy of Polygonatum cyrtonema Hua seeds 发表期刊:Frontiers in Plant Science 影响因子:6.627 作者单位&a…

电镀废水中的三价铬去除效率

电镀废水中铬的主要存在形式为六价铬(绝大多数)和三价铬,二者在一定条件下可互相转换,且二者都可能具有致癌左右,有所区别的是六价铬的毒性大约是三价铬毒性的100倍。 目前电镀废水中对铬的处理工艺一般为先将毒性较大…

KD2684S绕组匝间故障检测仪

一、产品简介 KD2684S匝间冲击耐压试验仪适用于电机、变压器、电器线圈等这些由漆包线绕制的产品。因漆包线的绝缘涂敷层本身存在着质量问题,以及在绕线、嵌线、刮线、接头端部整形、绝缘浸漆、装配等工序工艺中不慎而引起绝缘层的损伤等,都会造成线圈层…

【高危】Apache Linkis <1.3.2 存在反序列化漏洞(CVE-2023-29216)

漏洞描述 Apache Linkis 是一个用于将上层应用与底层数据引擎解耦,提供标准化接口的中间件。 该项目受影响版本存在存在反序列化漏洞,由于SqlConnection.java中未对host、port、username,、password等参数进行充分过滤,当恶意用户完全控制应…

SpringSecurity之权限模块设计

目录 前言 实现思路 代码结构 使用说明 前言 前面我们了解了关于微服务权限设计方案以及J W T的相关介绍,今天我们来聊一下,如何避免自己重复的写相同的代码,一次代码实现,即可完美复制到任何项目中实现权限相关的功能。 实现…

进阶方案:仅主机+NAT实现真机与虚拟机实现真正的互联互通

序 昨天写了NAT模式下使用端口转发实现真机可以访问到虚拟机的方案,但是我觉得应该还可以更简单,不需要使用端口转发,然后今天花了一上午的时间终于解决了这个问题,总结一下 仅主机模式 仅主机模式可以让真机跟虚拟机之间形成一…

【数据结构】算法的时间复杂度和空间复杂度 (上)(附leetcode练习题)

☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:数据结构 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪&…

智慧园区系统未来发展前景及应用趋势分析

完善的系统功能,强大的技术支持,使得智慧园区的应用趋势更加多元化,下面我们一起来了解一下智慧园区系统未来发展前景及应用趋势。 1、人工智能。人工智能技术是智慧园区未来发展的重要方向。人工智能可以帮助园区更好地解决实际问题&…

Docker笔记1 | Docker学习和简介

1 | Docker学习和简介1 学习来源2 官方学习资源3 Docker简介3.1 Docker是什么?3.2 Docker应用场景3.3 Docker架构3.3 Docker的优势3.3 与传统虚拟机的区别1 学习来源 本系列笔记学习主要参考书籍《Docker-从入门到实践》以及结合官网的教程,仅作为个人学…

电脑开机后进不了系统怎么办?

案例:我的电脑开机之后,进入不了系统怎么办? 【今天我打开电脑时,发现进入不了系统,以前从来没有出现过这种情况。有没有小伙伴有解决的办法?在线等,急!】 电脑开机后无法进入系统…

node 服务发布后无法访问

node 服务发布后无法访问问题描述:在本地环境访问ip3060端口能正常访问,部署到服务器后访问接口一直超时 解决方法: 看端口是否对外暴露 操作步骤 设置防火墙 点击Windows defender 防火墙 点击高级设置 点击入站规则 新建规则 将3060端口…

《程序员面试金典(第6版)》面试题 10.10. 数字流的秩

题目描述 假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调用该方法; 实现 g…

全球首个完全开源的指令跟随大模型;T5到GPT-4最全盘点

1. Dolly 2.0:世界上第一个完全开源的指令跟随LLM 两周前,Databricks发布了类ChatGPT的大型语言模型 (LLM)Dolly,其训练成本不到 30 美元。今天,他们发布了 Dolly 2.0,这是业内第一个开源的指令跟随LLM,并根…

飞项的5种应用方法,帮助你轻松学会项目管理

随着时代的更新变化,在现代企业中,项目管理已经成为一项非常重要的能力考核。 而对于刚开始入门项目管理的新手,很多都不知道从哪里入手,怎么入手。同执行者相比,管理者所思考的维度又大不相同,接下来我们就…

java实现定时器的方法

大家在工作中,常常会遇到一些突发的工作,需要在短时间内完成。这就要求我们能够快速的处理这些突发事件,但是如果直接调用方法来做,时间太长了,会导致程序变得臃肿。那么有没有什么好的办法呢?下面我们就来…

notepad++在windows下使用mingw编译C语言

mingw下载链接:https://winlibs.com/ 官网https://www.mingw-w64.org也能下载,不过官网下载的那个不会用,以后再试了。 strawberry里面也集成了gcc编译器,使用它也可以编译,只是试了一下。 解压后有1个多G&#xf…

python入门(五) vscode配置Anaconda 环境,代码自动提示

文章目录1.conda的下载地址:1.配置conda的环境变量安装conda配置path2.vcode配置python插件3.配置conda1) Select Interpreter2) 选择conda环境4.测试vscode配置Anaconda 环境,代码自动提示. 本人工作中,用到了ai相关技术,但是java出身&#…

400元左右的蓝牙耳机哪个牌子好?400以内的蓝牙耳机推荐

目前市面上的真无线耳机是百花齐放,小巧的无线蓝牙耳机携带方便,已经成为很多人生活的标配产品,通勤、办公、音乐、游戏方方面面都离不开TWS耳机。近两年,TWS耳机飞速发展,各方面的功能和体验均已完善,因此…

06_GBDT+LR论文翻译

0.摘要 在线广告允许广告客户仅针对可衡量的用户响应进行出价和付费,例如广告点击。因此,点击预测系统是大多数在线广告系统的核心。伴随每日活跃用户超过7.5亿,活跃广告客户超过100万的情况,预测Facebook广告点击是一项具有挑战…