总结TCP各类知识点

news2024/10/10 4:24:31

前言

本篇博客博主将详细地介绍TCP有关知识点,坐好板凳发车啦~

一.TCP特点

1.有连接

TCP传输的过程中类似于打电话的各个过程

2.可靠传输

通过TCP自身的多种机制来保证可靠传输

3.面向字节流

内容是以字节的方式来进行发送与接收

4.缓冲区

TCP有接收缓冲区,也有发送缓冲区

全双工

5.大小不受限

二.TCP格式

1.源/目的端口号

表示数据是从哪个进程来,到哪个进程去

2.4位TCP报头长度

表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长度是15*4=60。

3.6位标志位

URG:紧急指针是否有效;

ACK:确认号是否有效;

PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走;

RST:对方要求重新建立连接,我们把携带RST标识的称为复位报文段;

SYN:请求建立连接,我们把携带SYN标识的称为同文报文段;

FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段。

4.16位校验和

发送端填充,CRC校验,接收端校验不通过,则认为数据有问题,此处的检验和不光包含TCP首部,也包含TCP数据部分。

5.16位紧急指针

6.40字节头部选项

三.TCP套接字

3.1ServerSocket API

ServerSocket 是创建TCP服务端Socket的API

3.2Socket API 

Socket 是客户端Socket ,或者服务端中接收到客户端建立连接(accept方法)的请求后,返回的服务端Socket。不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及时来与对方收发数据的。

四.TCP可靠与效率机制

可靠机制是不能通过代码实现的,这也是TCP最主要实现的功能之一

4.1确认应答(可靠机制)

4.2超时重传(可靠机制)

原因:网络环境非常复杂,在数据的传输过程中会经过很多交换机,路由器,网线,光纤...这些设备不但要传我们的数据,还要传别人的数据,设备的处理能力也是有上限的,如果网络上的数据太多超过了设备的处理能力就会出现拥堵,就像城市里的堵车一样

1.发送超时

2.响应超时

 

3.超时时间

如果超时时间设的太长,会影响整体的重传效率;

如果超时时间设的太短,有可能会频繁发送重复的包;

故TCP为了保证在任何环境下都能有比较高性能的通信,因此会动态计算这个最大超时时间;

超时重传的时间和重传的次数,是可以能过配置文件手动设置的,不必记忆。

4.3连接管理(可靠机制)

三次握手,四次挥手

4.4滑动窗口(效率机制) 

确认应答是对每一个发送的数据段,都要给一个ACK确认应答。收到ACK后再发送下一个数据段。存在一个比较大的缺点就是效率比较差。

在这个基础上,一次发送多条数据,然后再等待应答,也就说在等待应答的这段时间里发送发没闲着,用来连续发送数据。

所以我们这里可以考虑两种丢包情况:

1)ACK丢了 

2)数据报丢了

滑动窗口与效率

1.效率的高低取决于窗口的大小;

2.窗口越大效率越高;

3.窗口越小效率越低;

4.假设窗口无穷大,此时发送方就完全不需要等待ACK,此时效率就想UDP一样。 

4.5流量控制(可靠机制)

在滑动窗口的基础上,接收方对于发送方的反制,接收方根据自己的接收能力来反向影响发送方后面的发送速率,对发送效率做出限制的机制

4.6拥塞控制(可靠机制)

网络中数据传输的过程是非常复杂的,其中可能会经过很多的交换机,路由器等网络设备,每一个网络设备出现问题都会对传输造成影响

2.工作原理

4.7延迟应答(效率机制)

基于流量控制,引入的提高效率的机制

4.8捎带应答(效率机制)

4.9面向字节流

在面向字节流中的一个典型的问题就是“粘包问题”

4.10TCP异常情况

1.程序崩溃

操作系统会回收进程的资源,其中释放包括⽂件描述符表,就想当于调⽤了对应socket的close, 之后触发FIN操作,进⽽开始进⼊四次挥⼿,和普通的四次挥⼿没有区别

2.正常关机
通过开始菜单或执⾏关机命令,系统会强制结所有进程,回收资源,与程序崩溃执⾏的流程类似
3.主机掉电
⼤多数发⽣的情况
1. 接收⽅掉电
发送⽅并不知道接收⽅挂了,继续发送数据
发送数据后收不到ACK应答,触发超时重传
多次重传都没有收到ACK应答,会尝试进⾏连接重置(RST标识位)
连接重置也失败,只能放弃连接
2. 发送⽅掉电
⼀般出现在⻓连接中,服务器与客户端会维护⼀个⼼跳包(客户端每隔1秒给服务器发送⼀个数
据包,证明⾃⼰存活)
如果服务器⼀直收不到这个⼼跳包,⽐如过了10秒之后还没有收到,就判定为客户端挂了,⾃
⾏断开连接
客户端⽹络恢复之后再次进⾏重连即可
4.网线断开
与主机掉电的情况相同,只不过是主机都是正常⼯作的

尾语

这篇博客到这里就结束啦,希望可以给大家带来帮助~~

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

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

相关文章

谈一谈BEV和Transformer在自动驾驶中的应用

谈一谈BEV和Transformer在自动驾驶中的应用 BEV和Transformer都这么火,这次就聊一聊。 结尾有资料连接 一 BEV有什么用 首先,鸟瞰图并不能带来新的功能,对规控也没有什么额外的好处。 从鸟瞰图这个名词就可以看出来,本来摄像头…

使用启智OpenI平台体验Open-Sora笔记

OpenI准备部分 镜像代码仓 创建云脑任务 新建调试任务 镜像选择 如果不想体验整个安装配置过程的话,我准备了一个Open-Sora的环境镜像应该可以直接开箱即用 地址: 192.168.204.22:5000/default-workspace/99280a9940ae44ca8f5892134386fddb/image:Open…

【C++的奇迹之旅】C++关键字命名空间使用的三种方式C++输入输出命名空间std的使用惯例

文章目录 📝前言🌠 C关键字(C98)🌉 命名空间🌠命名空间定义🌉命名空间使用 🌠命名空间的使用有三种方式:🌉加命名空间名称及作用域限定符🌠使用using将命名空间中某个成员…

NSGA算法

先给自己叠甲,记录自己的学习过程,如有内容错误欢迎指正!!!。 1. NSGA算法简介(Nondominated Sorting Genetic Algorithm) 根据标题,NSGA算法分为两个要点,Nondominated Sorting(非支配排序&a…

基本数据类型

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据类型是一种用于描述数据存储格式的结构。 PL/SQL 和其他编程语言一样也有多种数据类型,PL/SQL 语言中的常用数据类型和 Oracle 数据库中内置的数据类型基本…

基于JSP的母婴用品网站

背景 随着时代的飞速进步,计算机技术已经广泛而深刻地渗透到社会的各个层面。人们生活质量的持续提升,以及对母婴产品需求的日益增长,都推动了母婴用品网站开发的必要性和紧迫性。这类网站依托计算机技术,通过对相关产品信息的有…

简易挛生分拣系统设计

1 工效组合展示 2 方案规划设计 3 数字挛生建模 基础建模、动画设计、模型导出 4 软件体系架构 5 Web交互设计 5.1 页面架构 5.2 初始构造 5.3 模型运用 5.4 WS通信 5.5 运行展现 6 服务支撑编码 6.1 整体调度 6.2 WS服务 6.3 C/S通信 7 系统级调试完善

PyTorch深度学习快速入门(小土堆)

文章目录 16. 神经网络的基本骨架17.卷积操作18.卷积层 16. 神经网络的基本骨架 forward: import torch from torch import nnclass Tudui(nn.Module):def __init__(self):super().__init__()def forward(self,input):outputinput1return output#创建Tudui的实例对象 tuduiTu…

【详细讲解MNN介绍,安装和编译】

🌈个人主页:程序员不想敲代码啊🌈 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家🏆 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提…

基于Arduino IDE 野火ESP8266模块 定时器 的开发

一、delay函数实现定时 如果不需要精确到微秒级别的控制,可以使用Arduino的内置函数 millis()和delay() 来创建简单的定时器。millis()函数返回Arduino板启动后的毫秒数,而delay()函数会暂停程序的执行一段时间。 示例代码如下: delay()函数…

HarmonyOS实战开发-如何构建多种样式弹窗

介绍 本篇Codelab将介绍如何使用弹窗功能,实现四种类型弹窗。分别是:警告弹窗、自定义弹窗、日期滑动选择器弹窗、文本滑动选择器弹窗。需要完成以下功能: 点击左上角返回按钮展示警告弹窗。点击出生日期展示日期滑动选择器弹窗。点击性别展…

electron+VUE Browserwindow与webview通信

仅做记录 前言: electronVUEVITE框架,用的是VUE3.0 主进程定义:用于接收webview发送的消息 ipcMain.on(MyWebviewMessage, (event, message) > {logger.info(收到webmsg message)//转发给渲染进程}) porelaod/webPreload.js定义 cons…

Qt+OpenGL入门教程(二)——OpenGL渲染管线

渲染管线是图形学不可或缺的,在学习它之前,我们先了解一下什么是管线? 管线/流水线 当我们谈到管线时,我们指的是一个由多个阶段组成的过程,每个阶段都完成任务的一部分。在现实世界中,流水线的概念在许多…

vue实现文字一个字一个字的显示(开箱即用)

图示&#xff1a; 核心代码 Vue.prototype.$showHtml function (str, haveCallback null) {let timeFlag let abcStr for (let i 0; i < str.length; i) {(function (i) {timeFlag setTimeout(function () {abcStr str[i]haveCallback(abcStr)if ((i 1) str.length…

C# NumericUpDown 控件正整数输入控制

用到了控件的 KeyPress 和 KeyUp事件。 KeyPress 中控制输入“点、空格&#xff0c;负号”&#xff1b; KeyUp 中防止删空&#xff0c;以及防止输入超过最大值或最小值 。 private void nudStart_KeyPress(object sender, KeyPressEventArgs e){numericUpDownKeyPress(sender…

把组合损失中的权重设置为可学习参数

目前的需求是&#xff1a;有一个模型&#xff0c;准备使用组合损失&#xff0c;其中有2个或者多个损失函数。准备对其进行加权并线性叠加。但想让这些权重进行自我学习&#xff0c;更新迭代成最优加权组合。 目录 1、构建组合损失类 2、调用组合损失类 3、为其构建优化器 …

HiRoPE、MoDiTalker、RecDiffusion、DreamSalon、InterDreamer、BAMM

本文首发于公众号&#xff1a;机器感知 HiRoPE、MoDiTalker、RecDiffusion、DreamSalon、InterDreamer、BAMM Lift3D: Zero-Shot Lifting of Any 2D Vision Model to 3D In recent years, there has been an explosion of 2D vision models for numerous tasks such as seman…

利用lidar生成深度图

前言 目前&#xff0c;深度图像的获取方法有&#xff1a;激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法等。针对深度图像的研究重点主要集中在以下几个方面&#xff1a;深度图像的分割技术&#xff0c;深度图像的边缘检测技术&#xff0c;基于…

HarmonyOS实战开发-实现自定义弹窗

介绍 本篇Codelab基于ArkTS的声明式开发范式实现了三种不同的弹窗&#xff0c;第一种直接使用公共组件&#xff0c;后两种使用CustomDialogController实现自定义弹窗&#xff0c;效果如图所示 相关概念 AlertDialog&#xff1a;警告弹窗&#xff0c;可设置文本内容和响应回调…

网络七层模型:理解网络通信的架构(〇)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…