关于tcp协议

目录

前言:

一、TCP协议的基本概念:

二、TCP协议的主要特点:

2.1面向连接:

2.2可靠传输:

2.3基于字节流:

三、TCP连接的建立与终止:

3.1连接建立:

3.1.1SYN:

3.1.2SYN-ACK:

3.1.3ACK:

 3.2图像解释:

3.2.1tcp服务器先创建传输控制块(TCB):

3.2.2tcp客户端进程也创建传输控制块

3.2.3tcp服务器收到请求报文后

3.2.4tcp客户端收到确认后,还要向服务器给出确认

3.2.5双方能够通信:

3.2.6 这里相信也有小伙伴也有疑问为什么tcp客户端最后还要发出一次确认?其实主要防止已经失效的连接请求报文又传送到了服务器,从而产生错误

3.3连接终止:

3.3.1FIN:

3.3.2ACK:

3.3.3FIN:

3.3.4ACK:

​编辑 3.4图像解释:为了更好的帮助大家理解这是对这个图的解读:

3.4.1:连接释放报文,并且停止发送数据:

3.4.2收到连接释放报文,发出确认报文:

3.4.3客户端收到服务器的确认请求:

3.4.4发送完最后的数据,就向客户端发出连接释放:

3.4.5收到服务器的连接释放,等待2msl进入closed状态:

3.4.6服务器只要收到客户端的确认,立即进入CLOSED状态.3.4.7到了这里我猜细心的小伙伴肯定发现了什么?确实,它为什么还有等待2msl

四、TCP协议的工作原理:

五、TCP协议的应用场景:

结语:


前言:


前面我们已经讲了关于网络编程的一些基本的知识,现在我们开始了前面提到的关于TCP协议的学习。由于TCP协议可能会有一点难,不过我尽量去把这个知识点给讲清楚,当然我也借鉴了其他优秀博主的作品,大部分的内容都是来源于网上。这些都是我个人学习的一些总结,希望大家多多鼓励我,也欢迎大家指出我文章还存在的问题,欢迎大家的斧正。

一、TCP协议的基本概念:


TCP(传输控制协议)是计算机网络中的一种通信协议,它位于OSI模型的传输层。TCP协议的主要目的是提供可靠的数据传输服务,确保数据在发送方和接收方之间能够完整、有序地传输。

二、TCP协议的主要特点:


2.1面向连接:


在数据传输之前,TCP协议需要建立一条连接。这条连接在数据传输完毕后会被释放,确保数据传输的可靠性和有序性。

2.2可靠传输:


TCP协议通过一系列机制(如确认、重传等)确保数据的可靠传输。如果数据在传输过程中丢失或损坏,TCP协议会要求重新传输。

2.3基于字节流:


TCP协议将数据看作是无结构的字节流,不关心数据的具体内容,只负责将数据从发送方传输到接收方。

三、TCP连接的建立与终止:


3.1连接建立:


TCP连接的建立过程通常被称为“三次握手”。在这个过程中,发送方和接收方通过交换特定的报文段来建立连接。这是为了确保双方都已准备好进行数据传输。具体过程如下:

3.1.1SYN:


客户端发送一个SYN报文段(SYN=1)给服务器,询问服务器是否打开并准备好接受数据。这个报文段中包含一个随机的初始序列号(ISN)。

3.1.2SYN-ACK:


服务器收到SYN报文段后,如果同意连接,则发送一个应答。这个应答中,服务器首先发送一个ACK报文段(ACK=1)确认客户端的SYN,同时也发送一个自己的SYN报文段,其中包含服务器的初始序列号。

3.1.3ACK:


客户端收到服务器的SYN+ACK报文段后,发送一个ACK报文段确认服务器的SYN。此时,连接建立完成,双方可以开始传输数据。

而这三次握手的过程确保了双方都已准备好进行数据传输,并且双方都知道对方的初始序列号,以便在后续的数据传输中进行确认和重传。

最开始客户端和服务器都是出于关闭的状态,主动打开连接的是客户端,被动打开连接的是服务器.

 3.2图像解释:


为了更好的帮助大家理解这是对这个图的解读:

3.2.1tcp服务器先创建传输控制块(TCB):


tcp服务器先创建传输控制块(TCB),时刻准备接收客户端进程的连接请求,此时服务器进入listen状态

3.2.2tcp客户端进程也创建传输控制块


tcp客户端进程也创建传输控制块,然后向服务器发出连接请求报文,报文首部位SYN=1,同时选择一个初识序列号seq=x,此时,tcp客户端进入SYN-SEND(同步已发送)状态.

3.2.3tcp服务器收到请求报文后


tcp服务器收到请求报文后,如果同意连接,则发出确认报文,确认ACK=1,SYN=1,确认号是ack=x+1,同时自己也要消耗掉序列号seq=y,此时tcp服务器进程就进入SYN-RECV(同步收到)状态.

3.2.4tcp客户端收到确认后,还要向服务器给出确认


tcp客户端收到确认后,还要向服务器给出确认.确认报文ACK=1,确认号ack=y+1,自己的序列号为seq=x+1.此时,tcp建立连接,客户端进入ESTABLISHED(已建立连接)状态.这个时候可以携带数据了,但是如果不携带数据,也要消耗序号

3.2.5双方能够通信:


当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就能通信

3.2.6 这里相信也有小伙伴也有疑问为什么tcp客户端最后还要发出一次确认?
其实主要防止已经失效的连接请求报文又传送到了服务器,从而产生错误

如果使用两次握手,客户端发送的第一次请求可能没被接收到,那么客户端会发送第二次,如果是两次就能建立连接,服务器收到第二次就会发送确认就能够产生连接.但是如果第一次又成功的发送给了服务器,服务器如果又确认了,那么将会产生第二次连接,这是不必要的.

如果是三次握手,就算第一次的报文传过来了,服务器确认,但是客户端不会确认,然后服务器没有收到客户端的确认就知道客户端没有要连接,连接就不会产生

3.3连接终止:


数据传输完毕后,TCP连接需要被终止,也被称为是四次挥手。连接终止的过程通常包括发送FIN报文段和等待确认等步骤。当数据传输完成后,TCP连接需要被中止。这个过程通常被称为“四次挥手”,因为需要四个报文段来完成连接的终止。具体过程如下:

3.3.1FIN:

数据传输结束后,客户端发送一个FIN报文段给服务器,表示客户端没有数据要发送了,要求关闭连接。

3.3.2ACK:

服务器收到客户端的FIN报文段后,发送一个ACK报文段确认收到客户端的FIN。此时,服务器到客户端的连接关闭,但服务器还可以继续发送数据。

3.3.3FIN:

当服务器也没有数据要发送时,服务器发送一个FIN报文段给客户端,表示服务器也没有数据要发送了,要求关闭连接。

3.3.4ACK:

客户端收到服务器的FIN报文段后,发送一个ACK报文段确认收到服务器的FIN。此时,客户端到服务器的连接也关闭,连接完全终止。


 3.4图像解释:
为了更好的帮助大家理解这是对这个图的解读:

3.4.1:连接释放报文,并且停止发送数据:


客户端发出连接释放报文,并且停止发送数据,释放数据报文首部FIN=1,序列化为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时客户端进入FIN-WAIT1(终止等待1),不能携带数据

3.4.2收到连接释放报文,发出确认报文:


服务器收到连接释放报文,发出确认报文ACK=1,ack=u+1,并且携带自己的序号seq=v+1,此时服务端进入CLOSE-WAIT(关闭等待).客户端没有数据要发送了,但是服务器如果还有数据,客户端依然要接受.

3.4.3客户端收到服务器的确认请求:


客户端收到服务器的确认请求后,进入FIN-WAIT-2(终止等待2),等服务器发出剩下的数据

3.4.4发送完最后的数据,就向客户端发出连接释放:


服务器发送完最后的数据,就向客户端发出连接释放,FIN=1,ack=u+1,因为之前可能发送了一些剩下的数据,假设序号为seq=w,此时,服务器就进入了LAST-ACK(最后确认),等待客户端的确认

3.4.5收到服务器的连接释放,等待2msl进入closed状态:


客户端收到服务器的连接释放,必须发出确认,ACK=1,ack=w+1,自己的序号为seq=u+1,此后,客户端进入TIME-WAIT(时间等待).必须经过2*MSL(最长报文段寿命)的时间后,才会进入CLOSED状态

3.4.6服务器只要收到客户端的确认,立即进入CLOSED状态.
3.4.7到了这里我猜细心的小伙伴肯定发现了什么?
确实,它为什么还有等待2msl

首先是保证客户端发送的最后一次确认报文能够到达服务器.因为这个报文可能会丢失,如果在这段时间内,服务器没有收到确认,将会再次发出连接释放,所以客户端收到再次的连接释放就会知道服务器没有收到确认,于是重新发送确认给服务器,重启这个时间.

其次是为了防止已经失效的报文出现,在这个时间内,可以使本次连接中所有产生的报文都从网络中消失.

四、TCP协议的工作原理:


TCP协议通过一系列机制实现可靠的数据传输。这些机制包括序列号、确认号、滑动窗口等。序列号用于标识每个字节在数据流中的位置,确认号用于确认已接收到的数据。滑动窗口机制则用于控制数据的发送速率,防止发送方过快地发送数据导致接收方无法处理。

五、TCP协议的应用场景:


TCP协议广泛应用于需要可靠数据传输的场景中,如文件传输、网页浏览等。在这些场景中,数据的完整性和有序性至关重要,因此需要使用TCP协议来确保数据的可靠传输。

结语:


总结来说,TCP协议是一种面向连接的、可靠的传输层通信协议。它通过一系列机制实现数据的可靠传输和有序性保证,广泛应用于各种需要可靠数据传输的场景中。关于TCP协议其实有很多用处在我们使用网络的时候。关于这个TCP协议的内容我就先分享到这里了,如果说的有问题欢迎大家的斧正,也欢迎大家在评论区和谐讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SystemVerilog】结构体真是太好用了~

前言 Verilog最大的缺陷之一是没有数据结构。在SystemVerilog中可以使用struct创建结构,struct只是把数据组织到一起,是数据的集合,所以是可综合的。 结构体是可以通过模块接口进行传递的,这就是本文想描述的内容。 一、结构体的…

YOLOv7改进 | 更换主干网络之PP-LCNet

前言:Hello大家好,我是小哥谈。PP-LCNet是一个由百度团队针对Intel-CPU端加速而设计的轻量高性能网络。它是一种基于MKLDNN加速策略的轻量级卷积神经网络,适用于多任务,并具有提高模型准确率的方法。与之前预测速度相近的模型相比,PP-LCNet具有更高的准确性。此外,对于计…

字符串函数(C语言详解)

1.字符串简介 字符串是一串连续的且以\0结尾的字符 char arr[]"zhangsan";//将字符串存到数组里面 char*a"lisi";//常量字符串 char arr1[]{z,h,a,n,g};//字符数组 注意: 1.以第一种形式初始化字符串时,计算机会自动在字符串末尾加…

指针(1)

1.内存和地址 1.1 内存 生活中我们有了房间号才能够快速找到房间,同样,在计算机中CPU(中央处理器)在处理数据时,需要的数据是在内存中进行读取的,处理完之后又会放回内存中。 在内存空间中&#xff0c…

OJ_最长公共子序列

题干 C实现 #include <iostream> #include <stdio.h> #include <algorithm> using namespace std;int dp[1002][1002];int main() {int n,m;char s1[1001];char s2[1001];scanf("%d%d",&n,&m);scanf("%s%s",s1,s2);//dp[i][j]是…

拼多多、淘宝、抖音、小红书商家,如何轻松在1688找到靠谱货源?

无论你是做拼多多、淘宝、抖音小店、小红书或者1688运营及采购商们&#xff0c;只要想在1688上寻找靠谱货源时&#xff0c;可以按照以下几个步骤进行筛选&#xff1a; 一、明确需求 首先&#xff0c;你需要清晰地了解自己的经营方向、目标消费群体以及所需产品的具体规格、材…

可变形卷积v4 |更快更强,效果远超DCNv3

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、论文摘要 我们介绍了可变形卷积v4 (DCNv4)&#xff0c;这是一种高效的算子&#xff0c;专为广泛的视觉应用而设计。DCNv4通过两个关键增强解决了…

26.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-实现生成日志文件的功能

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;25.利用全新的通…

PTA- - -个位数统计(C语言)

Hello,好久没更新啦&#xff0c;今天给大家讲解一下PTA平台上面的“个位数统计”这道题吧~ 题目是要统计一个数字每个位上数字出现的次数。下面是一个解决方案的思路和相应的 C 语言代码&#xff1a; 思路&#xff1a; 初始化一个大小为10的数组&#xff0c;用于计数每个数字…

【LeetCode】升级打怪之路 Day 24:回溯算法的解题框架

今日题目&#xff1a; 46. 全排列51. N 皇后78. 子集 目录 LC 46. 全排列LC 51. N 皇后LC 78. 子集 【classic】1&#xff09;思路一2&#xff09;思路二 今天学习了回溯算法的解题框架&#xff1a;回溯算法解题套路框架 | labuladong 回溯算法的整体框架都是&#xff1a; re…

提高工作效率,选择SmartEDA优质电子电路设计软件

在当今快节奏的工程环境中&#xff0c;电子电路设计软件的选择至关重要。随着技术的不断发展&#xff0c;工程师们需要能够快速、精确地设计和验证各种电子电路。而SmartEDA作为一款领先的电子电路设计软件&#xff0c;为工程师们提供了提高工作效率的强大工具。 1. 提供全面的…

pandas 数据透视和逆透视

本篇介绍 pandas 数据重塑的几个有用变换。假设我们有学生语数外考试的成绩数据&#xff0c;大家常见的是这种格式&#xff1a; 如果数据放在数据库中&#xff0c;下面的格式比较符合数据库范式&#xff1a; 现在&#xff0c;任务来了。要实现由图一向图二的变换&#xff0c;传…

centos破解root密码以及如何防止他人破解root密码

目录 破解root密码 服务器重启 1.再重启页面上下选择第一个按e进入内核编辑模式 2.找到linux16开头的一行&#xff0c;光标移动到最后添加 init/bin/sh Ctrlx 保存 3.进入单用户模式 4.重新挂在根分区 5.关闭selinux 6.更新密码 passwd 7.在根分区下面创建一个隐藏文件…

移动端使用 echarts中 滚动条 dataZoom 改造为内容区域可以左右滚动

移动端使用 echarts中 滚动条 dataZoom 改造为内容区域可以左右滚动 直接上图 &#xff1a; 主要是下面这段代码&#xff1a; "dataZoom": [{"type": "inside","show": false,"xAxisIndex": [0],"zoomOnMouseWheel&…

Frostmourne - Elasticsearch源日志告警配置

简介 配置Frostmourne 接入Elasticsearch源进行日志匹配告警&#xff0c;并静默规则&#xff0c;告警消息发送到企业微信&#xff0c;告警信息使用Markdown。 部署安装教程查看&#xff1a; https://songxwn.com/frostmourne_install ELK 安装教程&#xff1a;https://songx…

Spring Boot整合canal实现数据一致性解决方案解析-部署+实战

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1.前言 2.canal部署安装 3.Spring Boot整合canal 3.1数据库与缓存一致性问题…

golang中new和make的区别

1. 先看一个例子 package mainimport "fmt"func main() {var a *int*a 10fmt.Println(*a) }运行结果是啥呢&#xff1f; 问&#xff1a;为什么会报这个panic呢&#xff1f; 答&#xff1a;因为如果是一个引用类型&#xff0c;我们不仅要声明它&#xff0c;还要为…

若依(ruoyi-vue)后端部署windows系统 (一文搞通,从idea安装到打包部署)

一、下载idea并破解&#xff0c;防止时间久了没法打开 访问 IDEA 官网&#xff0c;下载 IDEA 2023.2.3 版本的安装包&#xff0c;下载链接如下 : https://www.jetbrains.com/idea/download/ 卸载旧版本&#xff0c;安装新版本 弹框会提示选择安装路径&#xff0c;我这里直接选择…

蜡烛图K线图采用PictureBox控件绘制是实现量化交易的第一步非python量化

用vb6.0开发的量化交易软件 VB6量化交易软件的演示视频演示如上 股票软件中的蜡烛图是非常重要的一个东西&#xff0c;这里用VB6.0自带的Picture1控件的Line方法就可以实现绘制。 关于PictureBox 中的line 用法 msdn 上的说明为如下所示 object.Line [Step] …

大模型语言系列-Agent

文章目录 前言一、Agent是什么&#xff1f;二、LLM Agent1.西部世界小镇Agent2.BabyAGI3.AutoGPT4.Voyager Agent 总结 前言 自2022年ChatGPT诞生以来&#xff0c;LLM获得了收获了大量关注和研究&#xff0c;但究其根本&#xff0c;技术还是要为应用服务&#xff0c;如何将LLM…