总结TCP各类知识点

前言

本篇博客博主将详细地介绍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.网线断开
与主机掉电的情况相同,只不过是主机都是正常⼯作的

尾语

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

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

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

相关文章

网络安全接入认证-802.1X接入说明

介绍 802.1X是一个网络访问控制协议,它可以通过认证和授权来控制网络访问。它的基本原理是在网络交换机和认证服务器之间建立一个安全的通道,并要求客户端提供身份验证凭据。如果客户端提供的凭据是有效的,交换机将开启端口并允许访问。否则&…

服务器被挖矿了怎么办,实战清退

当我们发现服务器资源大量被占用的时候,疑似中招了怎么办 第一时间重启服务是不行的,这些挖矿木马一定是会伴随着你的重启而自动重启,一定时间内重新霸占你的服务器资源 第一步检查高占用进程 top -c ps -ef 要注意这里%CPU,如果…

1.8.1 摄像机

一、摄像机 OpenGL本身没有摄像机的概念,但是我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 本节将会讨论如何在OpenGL中配置一个摄像机,让你能够在3D场景中…

Web APIs

文章目录 Web APIs1. DOM1.1 介绍DOM 树DOM 节点document 1.2 获取DOM对象1.3 操作元素内容1.4 操作元素属性常用属性修改控制样式属性操作表单元素属性自定义属性 1.5 间歇函数1.6 事件事件监听事件类型事件处理程序 1.7 事件类型鼠标事件键盘事件焦点事件文本框输入事件 1.8 …

【JavaScript】数组 ③ ( JavaScript 数组长度 | 修改数组长度 | 数组案例 )

文章目录 一、JavaScript 数组长度1、数组长度2、修改数组长度 二、数组案例1、求数组元素平均值2、求数组元素最大值 一、JavaScript 数组长度 1、数组长度 在 JavaScript 中 , 数组长度 可以通过 数组变量的 length 属性 获取 , 该属性 返回 数组中的元素数量 , 也就是 数组长…

【Java】ArrayList数组的扩容机制 jdk1.8

📝个人主页:哈__ 期待您的关注 ArrayList和普通数组不同,ArrayList支持动态扩容,那么ArrayList到底是如何扩容的呢?你又是否知道ArrayList数组的初始长度是多少呢? 在开始介绍之前,我们要先介…

【IDEA+通义灵码插件】实现属于你的大模型编程助手

1、前言 大模型到底该以一种什么方式落地,从而嵌入我们的工作当中,助力我们工作效率的提升,其实最好的方式也许就是虚拟助手的方式,就像钢铁侠的"贾维斯"一样,随叫随到能回答问题,能自动的解决一…

python函数参数中独立星号*的作用

python函数中间有一个()分隔,星号后面为*命名关键字参数,星号本身不是参数**。命名关键字参数,在函数调用时必须带参数名字进行调用。如下例子:

【Golang入门教程】Go语言变量的初始化

文章目录 强烈推荐引言举例多个变量同时赋值总结强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 推荐一个个人工作,日常中比较常…

深入剖析哈希表:以Java中的HashMap为例

哈希表是一种非常高效的数据结构,它允许我们以接近常数的时间复杂度进行插入、删除和查找操作。在Java中,HashMap类是实现哈希表的一个非常流行的工具。本文将深入探讨哈希表的工作原理,并通过Java代码来展示HashMap的使用和内部机制。 一、…

Linux 动静态库的制作,使用和加载

Linux 动静态库的制作,使用和加载 一.前置说明1.mylib.h2.mylib.c3.mymath.h mymath.c4.如何制作库 二.动静态库的制作1.静态库的制作1.制作2.使用一下静态库,验证是否成功打包 2.动态库的制作1.编译.c源文件文件生成.o目标文件2.打包生成动态库3.编写makefile文件,自动化制作动…

基于Springboot+vue的鲜花销售商城网站

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,鲜花销售商城当然也不能排除在外。鲜花销售商城是以实际运用为开发背景,运用软件工程原理和开发方法&#x…

多线程的学习1

多线程 线程是操作系统能够进入运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 进程:是程序的基本执行实体。 并发:在同一个时刻,有多个指令在单个CPU上交替执行。 并行:在同一时刻&#xff0c…

程序汪若依微服务华为云Linux部署保姆教程

若依官方有3个版本,程序汪以前已经出了对应的安装部署视频教程 单应用版本 前后分离版本 微服务版本 本视频是若依微服务版本,如果基础的环境软件都不会安装建议看下程序汪的单应用和前后端分离版本教程, 欢迎点击进入 (单应…

全局UI方法-弹窗二-列表选择弹窗(ActionSheet)

1、描述 定义列表弹窗 2、接口 ActionSheet.show(value:{ title: string | Resource, message: string | Resource, autoCancel?: boolean, confrim?: {value: string | Resource, action: () > void }, cancel?: () > void, alignment?: DialogAlignment, …

Lightguide

Resolve Assembly Challenges with Projected AR Workflows The future of assembly is here. It’s not just about automation, it’s about empowering your workforce with the best possible digital toolset. LightGuide AR is a powerful addition to your Industry 4.…

基于单片机的便携式瓦斯检测仪系统设计

**单片机设计介绍,基于单片机的便携式瓦斯检测仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的便携式瓦斯检测仪系统设计是一个针对煤矿等工业环境中瓦斯气体浓度检测的重要项目。以下是该设计…

C++template之类模版进一步了解

前言:这一篇是在我的上一篇文章的基础上,再进一步所写的。 链接:CTemplate<>模版的介绍及深度解析-CSDN博客 一、类模板实例化 1.非类型模版参数 类型模版参数:就是跟在 class后面或者typename后的类型 非…

Java NIO和IO之间的区别

前言 NIO(New IO),这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出…

WebPack的使用及属性配、打包资源

WebPack(静态模块打包工具)(webpack默认只识别js和json内容) WebPack的作用 把静态模块内容压缩、整合、转译等(前端工程化) 1️⃣把less/sass转成css代码 2️⃣把ES6降级成ES5 3️⃣支持多种模块文件类型,多种模块标准语法 export、export…