关于tcp协议

news2024/11/18 3:32:30

目录

前言:

一、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协议的内容我就先分享到这里了,如果说的有问题欢迎大家的斧正,也欢迎大家在评论区和谐讨论。

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

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

相关文章

资产管理系统建设方案参考

1系统概述 软件开发全套文档下载、源码下载:软件项目开发全套文档下载_软件开发文档下载-CSDN博客 1.1需求描述 1. 实现公司内部固定资产管理全生命周期管理,包括资产采购、资产入库、资产领用、资产借用、资产归还、资产报废、资产维修、资产调拨等全…

RC522刷卡电路设计及程序

一、RC522刷卡电路组成 基于RC522的刷卡电路如上图所示。该电路组成主要分为三部分: Receiving Circuit:接收电路,接收卡发送的数据。 Filtering Impedence-Transtorm circuit:滤波和阻抗变换电路,抑制高次谐波并优化到读卡器天线…

Python使用lxml解析XML格式化数据

Python使用lxml解析XML格式化数据 1. 效果图2. 源代码参考 方法一:无脑读取文件,遇到有关键词的行再去解析获取值 方法二:利用lxml等库,解析格式化数据,批量获取标签及其值 这篇博客介绍第2种办法,以菜鸟教…

【AI大模型应用开发】【LangChain系列】9. 实用技巧:大模型的流式输出在 OpenAI 和 LangChain 中的使用

大家好,我是同学小张,日常分享AI知识和实战案例欢迎 点赞 关注 👏,持续学习,持续干货输出。v: jasper_8017 一起交流💬,一起进步💪。微信公众号也可搜【同学小张】 🙏 本…

Linux环境(Ubuntu)上搭建MQTT服务器(EMQX )

目录 概述 1 认识EMQX 1.1 EMQX 简介 1.2 EMQX 版本类型 2 Ubuntu搭建EMQX 平台 2.1 下载和安装 2.1.1 下载 2.1.2 安装 2.2 查看运行端口 3 运行Dashboard 管理控制台 3.1 查看Ubuntu上的防火墙 3.2 运行Dashboard 管理控制台 概述 本文主要介绍EMQX 的一些内容&a…

Vulnhub - DevGuru

希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢! 个人博客链接:CH4SER的个人BLOG – Welcome To Ch4sers Blog DevGuru 靶机下载地址:DevGuru: 1 ~ VulnHub 目录 0x01 信息收集 0x02 Web漏洞利用 - W…

GPT-4.5 Turbo意外曝光,最快明天发布?OpenAI终于要放大招了!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

什么是信创?什么是信创测评?

信创,全称为信息技术应用创新,我的理解,其核心是知识产权与供应链的自主可控与可持续发展。 我国在经历了无数风雨后,已经浴火重生,国家实力日益强大,人民生活水平也不断提高。然而,我们必须清…

彩虹知识付费模板MangoA全开源包含秒杀/抽奖/社群/推送等功能

二次开发增加以下功能每日秒杀每日签到官方社群多级分销在线抽奖项目投稿 每日秒杀 每日签到 官方社群 多级分销 在线抽奖 项目投稿 下载地址:https://pan.xunlei.com/s/VNstMfOecGliiqew7UIorsOnA1?pwdhywi#

2024年云仓酒庄:店中店增项新模式,开启葡萄酒文化新篇章

2024云仓酒庄:店中店增项新模式,开启葡萄酒文化新篇章 在葡萄酒行业蓬勃发展的今天,云仓酒庄以其独特的经营模式和创新思维,在市场中脱颖而出。2024年,云仓酒庄继续深化其战略布局,不仅在多地开设酒庄实体…

微信小程序开发系列(三十二)·如何通过小程序的API实现页面的上拉加载(onReachBottom事件)和下拉刷新(onPullDownRefresh事件)

目录 1. 上拉加载 2. 下拉刷新 1. 上拉加载 上拉加载是小程序中常见的一种加载方式,当用户滑动页面到底部时,会自动加载更多的内容,以便用户继续浏览小程序中实现上拉加载的方式: ① 在app.json或者page.json中配置距离页面…

比特币创造历史新纪录

综合来源:coindesk and cointelegraph 编译:秦晋 3月11日,比特币在亚洲交易时段首次突破71,000美元,这个是比特币创造的价格新纪录。自1月11日比特币现货ETF在美国获批以来,比特币一直在稳步上涨。以太币突破4000美元。…

JAVA基础—集合详细解析

1.JAVA中的4种集合类型 Set:无序、不可重复的集合List:有序、重复的集合Queue: 队列Map:映射关系 首先,JAVA的集合类主要有两个接口派生而出:Collection和Map。Collection和Map就是JAVA集合的根接口。所以后…

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解

学习视频:Faster-RCNN理论合集 概念辨析 在目标检测中,proposals和anchors都是用于生成候选区域的概念,但它们在实现上有些许不同。 Anchors(锚框): 锚框是在图像中预定义的一组框,它们通常以…

代码随想录算法训练营Day45 ||leetCode 70. 爬楼梯 (进阶)|| 322. 零钱兑换 || 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 本质上和leetcode377一样 #include <iostream> #include <vector> using namespace std; int main() {int n, m;while (cin >> n >> m) {vector<int> dp(n 1, 0);dp[0] 1;for (int i 1; i < n; i…

antd vue Tabs控件的使用

Ant Design Vue-------Tabs标签页 今天就讲讲Ant Design Vue下的控件----tabs 标签页 结合项目中的需求&#xff0c;讲一下该控件如何使用&#xff0c;需求&#xff1a; &#xff08;1&#xff09;竖排样式 &#xff08;2&#xff09;如何使用v-for绑定数据源 &#xff08;3…

Midjourney新算法来袭!解决你角色形象一致性的大难题——亲测猫与女孩跨场景表现

嘿&#xff0c;朋友们&#xff0c;你们想过这个问题吗&#xff1f; 当你在制作一部电影或写一部小说时&#xff0c;你总希望同一个角色能在不同的场景和背景下出现&#xff0c;对吧&#xff1f; 但这时&#xff0c;一个难题冒出来了&#xff1a;如何确保这个角色的形象在各个…

基于经验模式分解和小波阈值的自适应降噪研究_杨铮

目的 针对轴承信号在采集过程中容易受到不同环境下噪声干扰&#xff0c;提出EMD分解结合小波阈值的自适应降噪的方法&#xff0c;对轴承振动信号进行降噪处理&#xff0c;提取出所需要的振动信号。方法 首先对含有噪声的轴承信号进行EMD分解&#xff0c;得到n个IMF并进行小波阈…

武汉云仓酒庄:品牌细节,用心呈现葡萄酒文化新高度

武汉云仓酒庄&#xff1a;品牌细节&#xff0c;用心呈现葡萄酒文化新高度 在繁忙的武汉都市中&#xff0c;有一处静谧的角落&#xff0c;那便是云仓酒庄。这里不仅仅是葡萄酒的汇聚之地&#xff0c;更是葡萄酒文化传播与交流的重要平台。近日&#xff0c;武汉云仓酒庄以其精心…

搭建Hadoop3.x完全分布式集群

零、资源准备 虚拟机相关&#xff1a; VMware workstation 16&#xff1a;虚拟机 > vmware_177981.zipCentOS Stream 9&#xff1a;虚拟机 > CentOS-Stream-9-latest-x86_64-dvd1.iso Hadoop相关 jdk1.8&#xff1a;JDK > jdk-8u261-linux-x64.tar.gzHadoop 3.3.6&am…