TCP 协议的相关特性

news/2025/2/13 3:45:01/

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.ppmy.cn/news/44347.html

相关文章

涨点技巧:卷积变体DCNV2引入Yolov8,助力小目标涨点

1.DCN V2介绍 DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems 论文:https://arxiv.org/abs/2008.13535 作者通过在DCN的基础上,增加了2个创新点,分别是调制模块和使用多个调制后的DCN模块,从形成了DCN的升级版…

python列表list元素降序排列两种方法

python列表list元素降序排列的两种方法 sort()方法 python列表内置了一个sort()方法,可以用于为元素列表进行排序,当将默认参数reverse设置为True,sort()方法将为列表进行降序的排序,语法如下: listObj.sort(reverse…

spring boot3.0新特性Http客户端远程调用

1、安装依赖 <!-- For reactive support --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、项目结构 3、新建配置类WebConfig package com.exa…

浏览器断点调试说明

断点调试断点调试面板功能按钮介绍 描述&#xff1a;继续执行脚本 或者叫&#xff08;逐过程执行&#xff09; 快捷键 &#xff08;F8&#xff09;或者是&#xff08;Ctrl\&#xff09; 作用&#xff1a;打断点了的地方&#xff08;比如有是三个断点地方&#xff09;就会 第一个…

CHATGPT免费使用

CHATGPT是一款基于人工智能技术开发的文案写作辅助工具&#xff0c;它可以帮助写作者更高效地撰写文案&#xff0c;提高文案质量和效果&#xff0c;具有以下好处&#xff1a; 1. 提高写作效率&#xff1a;CHATGPT可以根据用户输入的关键词和主题&#xff0c;自动生成相关的文案…

Android四大组件之 Activity的启动过程源码解析

前言 Activity是Android中一个很重要的概念&#xff0c;堪称四大组件之首&#xff0c;关于Activity有很多内容&#xff0c;比如生命周期和启动Flags&#xff0c;这二者想要说清楚&#xff0c;恐怕又要写两篇长文&#xff0c;更何况分析它们的源码呢。不过本文的侧重点不是它们…

SQL Server 连接查询和子查询

提示&#xff1a; 利用单表简单查询和多表高级查询技能&#xff0c;并且根据查询要求灵活使用内连接查询、外连接查询或子查询等。同时还利用内连接查询的两种格式、三种外连接查询语法格式和子查询的语法格式。 文章目录前言1.查询所有学生的学号、姓名、选修课程号和成绩方法…

简单介绍Java网络编程中的HTTP请求

HTTP请求的细节——请求行 请求行中的GET称之为请求方式&#xff0c;请求方式有&#xff1a;POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT&#xff0c;常用的有&#xff1a; GET、 POST   用户如果没有设置&#xff0c;默认情况下浏览器向服务器发送的都是get请求&#xf…