TCP协议总结

一、TCP协议概念。

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输层协议。它主要用于在计算机网络中,通过建立可靠的通信连接来进行数据传输。

TCP协议的特点如下:

  • 可靠性:TCP使用确认、重传和超时等机制,确保数据可靠地传输到目标主机,并且按照正确的顺序组装。
  • 面向连接:数据传输之前需要在发送端和接收端建立连接,传输完成后再释放连接。
  • 全双工通信:TCP允许同时进行双向的数据传输,即发送方和接收方可以同时发送和接收数据。
  • 流量控制:TCP通过滑动窗口机制进行流量控制,控制发送速率,以适应接收方的处理能力。
  • 拥塞控制:TCP通过拥塞窗口机制和慢启动算法来进行拥塞控制,防止网络拥塞。
  • 高效性:TCP使用各种优化算法,如快速重传、快速恢复等,提高数据传输的效率。
  • 适用性广泛:TCP被广泛应用于互联网和局域网等各种计算机网络中,支持各种应用程序的可靠数据传输。

二、TCP工作流程。

通过NDS获取IP地址之后,就会把HTTP的传输工作交给TCP协议完成。
在这里插入图片描述

三、TCP报文格式。

在这里插入图片描述

四、三次握手和四次挥手。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 为什么需要四次挥手?
    把ACK和FIN分开发送的原因是因为当主动方在数据传送结束后发出连接释放的通知,由于被动方可能还有必要的数据要处理,所以会先返回 ACK 确认收到报文。当被动方也没有数据再发送的时候,则发出FIN通知,对方确认后才完全关闭TCP连接。
  • 为什么TIME_WAIT等待时间是2MSL?
    MSL是报文的最大生存时间,超过这个时间,报文就将丢弃。
    确保对方能够收到最后一个ack报文,如果服务端没有收到最后的ACK报文,就会触发超时重传FIN报文,从客户端发送ACK报文到接到到服务端重传的FIN报文,一去一来,最多就需要2MSL。

五、TCP协议特点。

1.流量控制

产生原因TCP协议是需要接收方回复给发送方ACK之后才算一次连接的建立,而在等待回复的时间就是浪费的,于是就一次性发送了多条数据,就算遇到丢包的问题,就会在重发最后一次接收到ACK的序列号的后面的封包,这样发送方就需要缓存已经发出但是还没有接收到ACK的封包,接收方把已接收但是没有交给用户进程之前的封包也要保留着,但是缓存是有大小限制的,就需要一种机制来确定这个大小,所以就出现了滑动窗口和拥塞窗口。
TCP把应用交付的数据仅仅看成一串无结构的字节流,TCP不关心应用程序一次将多大的报文发送到TCP的缓存中,而是根据窗口值和当前网络情况来调整当前一个报文应该包含多少个字节。TCP协议通过TCP报文中的窗口大小的信息,因为所有的报文都有这个信息,不论发送方还是接受方都会接收,就会保证实时获取。
获得窗口大小后,换算成流量大小的方法:
接收窗口大致 = 接收缓冲区大小 - 已用大小(接收的数据,暂时没被应用层读走)
最大发送量 = 对方的接收窗口

控制方式:

1.滑动窗口(RWND)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接收方会把AdvertisedWindows这个值回给发送方,发送方就会把这个值当作WindowsSize就会放到TCP头部里面。所以,在TCP协议中,滑动窗口的值是由接收方控制的。
2.拥塞窗口
拥塞窗口的值是由发送方定义的,又名CWND(congestion window)。
拥塞控制是用来处理网络拥堵的情况。
具体做法是:发送端的发送范围是拥塞窗口和滑动窗口中较小的一个,min[rwnd,cwnd]。
拥塞窗口的大小会根据网络情况动态调整。
大体的策略是无拥塞扩大窗口大小,反之减小。
网络不好造成丢包的原因?
拥塞窗口因为网络造成丢包的原因是由发送方引起的。拥塞窗口是TCP协议中用于实现拥塞控制的一个重要参数。它表示在一个往返时间(RTT)内,发送方可以发送的最大字节数量。拥塞窗口的大小会随着网络的拥塞程度进行动态调整。当网络出现拥塞时,网络设备的缓存可能会被填满,导致数据包丢失。此时,TCP发送方会通过观察网络传输过程中是否发生了丢包来确定网络的拥塞程度。当发送方检测到丢失的数据包时,它会认为这是由于网络拥塞引起的。为了降低发送速率以缓解拥塞,发送方会减小拥塞窗口的大小,从而减少每个RTT内发送的数据量。这种减小拥塞窗口的行为就是发送方对网络拥塞的响应。
慢启动
在这里插入图片描述
拥塞避免
在这里插入图片描述
在这个过程中,出现了丢包,就会马上降低CWND,以便网路可以缓过来。
在这里插入图片描述
两者对比
在这里插入图片描述

2.超时重传机制

超时重传是为了保证可靠性传输而采取的一种机制。当发送方发送数据后,会启动计时器来等待接收方的确认(ACK)。
如果在规定的时间内(超时时间)未收到接收方的确认,发送方就会认为数据包丢失,并进行超时重传。发送方会重新发送相同的数据包,以确保接收方正确收到数据。
超时重传的目的是保证数据的可靠性,即使在网络中发生了丢包或延迟等问题,通过重传机制可以尽可能保障数据的传输成功。

六、与UDP的对比。

TCP(传输控制协议)和UDP(用户数据报协议)是两种常见的传输层协议,它们在功能和特点上有以下几个主要区别:

  • 连接性:TCP是面向连接的协议,而UDP是面向无连接的协议。TCP在通信之前需要先建立连接,确认双方的身份和通信参数,然后才能进行数据传输;而UDP直接发送数据,无需先建立连接。
  • 可靠性:TCP提供可靠的数据传输,它通过序列号、确认应答、超时重传等机制来确保数据的完整性和顺序性;而UDP不保证可靠性,它只负责将数据包发送到目标地址,但不能保证是否成功送达。
  • 建立和断开连接:TCP使用三次握手来建立连接,即发送方发送连接请求,接收方回复连接确认,最后发送方再回复一个确认;而UDP不需要建立和断开连接,可以直接发送数据。
  • 传输效率:由于TCP提供了可靠性保证和数据流控制机制,它的传输效率相对较低,通信过程中会有较多的开销;而UDP没有这些机制,传输效率较高,但也容易受到网络条件的影响。
  • 应用场景:TCP适合于对数据可靠性要求较高的应用场景,如文件传输、Web浏览器访问等;而UDP适用于实时性要求较高且对数据可靠性要求相对较低的应用场景,如音频、视频流传输、在线游戏等。

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

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

相关文章

unity操作_光源组件 c#

准备工作 添加资源导入后先不管,现在主要学习自带Directional Light 我们首先创建一个平面Plane 然后重置一下位置 然后创建一个Cube 也重置一下位置然后修改y0.5刚好在这个平面上 ctrl d复制一个Cube 修改位置和旋转角度 给物体一个颜色 接下来创建一个点光源 我们…

大型语言模型:RoBERTa — 一种鲁棒优化的 BERT 方法

一、介绍 BERT模型的出现导致了NLP的重大进展。BERT的架构源自Transformer,在各种下游任务上实现了最先进的结果:语言建模,下一句预测,问答,NER标记等。 大型语言模型:BERT — 来自变压器的双向编码器表示 …

用于物体识别和跟踪的下游任务自监督学习-2-背景

2.1用于现实世界应用的计算机视觉的基本概念 有许多中间步骤涉及应用计算机视觉算法来解决现实世界中的问题。机器视觉算法从光学传感器的图像采集开始,并最终解决现实世界的决策任务,如自动驾驶汽车、机器人自动化和监控。设计现代计算机视觉算法包括传感器数据编码、解码、…

php单独使用think-rom数据库 | thinkphp手动关闭数据库连接

背景(think-orm2.0.61) 由于需要长时间运行一个php脚本,而运行过程并不是需要一直与数据库交互,但thinkphp主要是为web站点开发的框架,而站点一般都是数据获取完则进程结束,所以thinkphp没提供手动关闭数据…

底部Taber的抽取

1.会抽取一个布局样式 2.布局样式里面抽取一个底部样式 这个是layout的代码 <template><view class"layout-wrapper"><view class"layout-content"><slot></slot></view><!-- 底部 --><Tabbar :activeInde…

Go 语言切片扩容规则是扩容2倍?1.25倍?到底几倍

本次主要来聊聊关于切片的扩容是如何扩的&#xff0c;还请大佬们不吝赐教 切片&#xff0c;相信大家用了 Go 语言那么久这这种数据类型并不陌生&#xff0c;但是平日里聊到关于切片是如何扩容的&#xff0c;很多人可能会张口就来&#xff0c;切片扩容的时候&#xff0c;如果老…

李沐深度学习记录5:13.Dropout

Dropout从零开始实现 import torch from torch import nn from d2l import torch as d2l# 定义Dropout函数 def dropout_layer(X, dropout):assert 0 < dropout < 1# 在本情况中&#xff0c;所有元素都被丢弃if dropout 1:return torch.zeros_like(X)# 在本情况中&…

electronjs入门-聊天应用程序,与Electron.js通信

随着第一章中构建的应用程序&#xff0c;我们将开始将其与Electron框架中的模块集成&#xff0c;并以此为基础&#xff0c;以更实用的方式了解它们。 过程之间的通信 根据第二章中的解释&#xff0c;我们将发送每个进程之间的消息&#xff1b;具体来说联系人和聊天&#xff1…

C++构造函数

在本文中&#xff0c;您将学习C 中的构造函数。您将学习什么是构造函数&#xff0c;如何创建它以及C 中的构造函数类型。 构造函数是成员函数的一种特殊类型&#xff0c;它在创建对象时会自动对其进行初始化。编译器通过其名称和返回类型将给定的成员函数标识为构造函数。构造函…

RabbitMQ开启消息发送确认和消费手动确认

开启RabbitMQ的生产者发送消息到RabbitMQ服务端的接收确认&#xff08;ACK&#xff09;和消费者通过手动确认或者丢弃消费的消息。 通过配置 publisher-confirm-type: correlated 和publisher-returns: true开启生产者确认消息。 server:port: 8014spring:rabbitmq:username: …

Reactor网络模式

文章目录 1. 关于Reactor模式的了解2. 基于Reactor模式实现epoll ET服务器2.1 EventItem类的实现2.2 Reactor类的实现Dispatcher函数AddEvent函数DelEvent函数EnableReadWrite函数 2.3 四个回调函数的实现acceptor回调函数recver回调函数sender回调函数errorer回调函数 3. epol…

mac使⽤nginx

⽅法1&#xff1a;homebrew 默认本地已经安装homebrew&#xff1b; 安装与启动 brew install nginx 安装nginx&#xff1b; brew services start nginx 启动nginx nginx⽂件⽬录 1. nginx安装⽂件⽬录/usr/local/Cellar/nginx 2. nginx配置⽂件⽬录/usr/local/etc/nginx 3. con…

【办公-excel】两个时间相减 (二) - 带毫秒的时间进行相减操作

一、使用内部函数 1.1 效果展示 TEXT(((RIGHT(TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"),LEN(TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"))-FIND(".",TEXT(B2,"yyyy-mm-dd hh:mm:ss.000")))-RIGHT(TEXT(A2,"yyyy-mm-dd hh:mm:ss.000"),…

微信支付v2

文档&#xff1a; https://pay.weixin.qq.com/wiki/doc/api/index.html 微信小程序&#xff1a;https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter11_1 需要一个微信认证后的小程序&#xff0c;&#xff0c;还需要一个&#xff0c;在微信商户平台&#xff0c;&…

jdbc(DriverManager+Connection+Statement+ResultSet)+SQL注入+开启预编译+数据连接池

1 JDBC概念 JDBC 就是使用Java连接并操作数据库的一套API 全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接 2 JDBC优势 可随时替换底层数据库&#xff0c;访问数据库的Java代码基本不变 以后编写操作数据库的代码只需要面向JDBC&#xff08;接口&#xf…

C++三大特性——继承(上篇)

文章目录 目录 一、继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 一、继承的概念及定义 1.1继承的概念 继承(inherita…

最新AI智能创作系统源码AI绘画系统/支持GPT联网提问/支持Prompt应用

AI绘图专业设计 不得将程序用作任何违法违纪内容&#xff0c;不要让亲人两行泪 界面部分图解构&#xff1a; 前台show&#xff1a; 前端部署&#xff1a; 安装pm2管理器 点击设置 选择v16.19.1版本-切换版本 再新建一个网站 点击设置 添加反向代理-代理名称随便…

[MongoDB]-权限验证管理

[MongoDB]-权限验证管理 senge | 2023年9月 背景说明&#xff1a;现有两套MongoDB副本集群给开发人员使用时未开启认证。 产生影响&#xff1a;用户若输入账号以及密码则会进行校验&#xff0c;但用户可以在不输入用户名和密码的情况下也可直接登录。 倘若黑客借此进行攻击勒索…

ElasticSearch 学习7 集成ik分词器

网上找了一大堆&#xff0c;很多都介绍的不详细&#xff0c;开始安装完一直报错找不到plugin-descriptor.properties&#xff0c;有些懵这个东西不应该带在里面吗&#xff0c;参考了一篇博客说新建一个这个&#xff0c;新建完可以启动&#xff0c;但是插入索引数据会报错找不到…

Mini-dashboard 和meilisearch配合使用

下载的meilisearch一般是development模式&#xff0c;内置客户端&#xff0c;修改客户端后需要重要全部编译&#xff0c;花时间太长了。前后端分离才是正道&#xff0c;客户端修改不用重新编译后端。 方法如下&#xff1a; 1、修改配置文件/etc/meilisearch.toml&#xff0c;…