总结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.网线断开
与主机掉电的情况相同,只不过是主机都是正常⼯作的

尾语

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

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

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

相关文章

SpringBoot 登录认证(二)

SpringBoot 登录认证(一)-CSDN博客 SpringBoot 登录认证(二)-CSDN博客 SpringBoot登录校验(三)-CSDN博客 HTTP是无状态协议 HTTP协议是无状态协议。什么又是无状态的协议? 所谓无状态&…

在低成本loT mcu上实现深度神经网络端到端自动部署-深度神经网络、物联网、边缘计算、DNN加速——文末完整资料

目录 前言 DNN 量化神经网络 并行超低功耗计算范式 面向内存的部署 结果 原文与源码下载链接 REFERENCES 前言 在物联网极端边缘的终端节点上部署深度神经网络( Deep Neural Networks,DNNs )是支持普适深度学习增强应用的关键手段。基于低成本MCU的终端节点…

python-赋值变量-关键字

命名规则 赋值 打出来是彩色的就是关键字 字符串整数浮点数“6”66.0 乘方**乘*除 \ import math a -1 b -2 c 3print((-bmath.sqrt(b**2 -4*a*c))/2*a) print((-b-math.sqrt(b**2 -4*a*c))/2*a) d-b-math.sqrt(b**2 -4*a*c) print(d/2*a) #我是一行注释(只…

[flink 实时流基础] flink组件栈以及任务执行与资源划分

文章目录 7. Flink组件栈1. 部署层(1)Local模式(2)Cluster模式(3)Cloud模式 2.运行时3.API层4. 上层工具 8. 任务执行与资源划分1. 再谈逻辑视图到物理执行图2. 任务、算子子任务与算子链3. Slot与计算资源…

英伟达文本生成3D模型论文:Magic3D: High-Resolution Text-to-3D Content Creation解读

一、摘要 摘要:DreamFusion 最近展示了使用预训练的文本到图像扩散模型来优化神经辐射场 (NeRF) 的实用性,实现了显着的文本到 3D 合成结果。然而,该方法有两个固有的局限性:(a)NeRF 的优化极慢和&#xf…

consul集群部署三server一client

环境: consul:consul_1.16.2_linux_amd64.zip centos7.9 server:192.168.50.154 192.168.50.155 192.168.50.156 client:192.168.70.64 安装目录: [rootrabbit4-64 consul]# pwd /app/consul [rootrabbit4-64 consul]# ls consul consul_1…

【系统架构师】-第15章-面向服务架构设计

面向服务的体系结构 (Service-Oriented Architecture,SOA) 1、应用角度:它着眼于日常的业务应用,并将它们划分为单独的业务功能和流程,即所谓的服务 2、软件基本原理:一个组件模型,它将应用程序的不同功能单元(称为服…

【python】爬取4K壁纸保存到本地文件夹【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 图片信息丰富多彩,许多网站上都有大量精美的图片资源。有时候我们可能需要批量下载这些图片,而手动一个个下载显然效率太低。因此,编写一个简单的网站图片爬取程序可以帮助我们…

OpenHarmony:全流程讲解如何编写ADC平台驱动以及应用程序

ADC(Analog to Digital Converter),即模拟-数字转换器,可将模拟信号转换成对应的数字信号,便于存储与计算等操作。除电源线和地线之外,ADC只需要1根线与被测量的设备进行连接。 一、案例简介 该程序是基于…

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

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

【讲解下go和java的区别】

🔥博主:程序员不想YY啊🔥 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家💫 🤗点赞🎈收藏⭐再看💫养成习惯 🌈希望本文对您有所裨益,如有…

flume配置文件后不能跟注释!!

先总结:Flume配置文件后面,不能跟注释,可以单起一行写注释 报错代码: [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:158)] Unable to deliver event. Exception follows. org.apache.flume.EventDel…

关于Linux中的history命令

前言:本文内容为实操学习记录,不具有调研价值,仅供参考! 正文: 接触过Linux操作系统的朋友一般都知道history命令,直接输入history命令,会显示当前用户的历史输入记录。这个原理是linux会记录我…

constexpr与std::is_same_v碰撞会产生什么火花?

1. 只编译会用到的if分支 示例代码一中,checkType_v1和checkType_v2两个函数的区别就是if的条件里一个加了constexpr一个没加,加与不加从结果来看都一样,那在编译时和运行时各有什么区别呢? 示例代码一,test_01.cpp&…

ctfshow靶场sql注入wp

目录 web171 web172 web173 web174 web175 web176 web177-179 web180-183 web184 web185 web187 web190 web191 web192 web193 web194 web195 web196 web197 web199 web201 web202 web203 web204 web205 web206 web207 web208 web209 web210 web…

vscode调试Unity

文章目录 vscode调试UnityC#环境需求开始调试 Lua添加Debugger环境配置联系.txt文件配置Java环境 添加调试代码断点不生效的问题 vscode调试Unity C# 现在使用vscode调试Unity的C#代码很简单,直接在vscode的EXTENSIONS里面搜索“Unity”,第一个就是&am…

VMware虚拟机更换引导顺序

前言 我用wmware装了黑群晖测试,将img转成vmdisk的格式之后发现系统引导盘之后1G,有点太小了 我准备把wmware的黑群晖系统迁移到新添加的虚拟磁盘里 1.登录黑群晖的SSH 请先在黑群晖的控制面板中的终端机和SNMP里面启用SSH功能,才能使用ss…

PLC_博图系列☞P=:在信号上升沿置位操作数

PLC_博图系列☞P:在信号上升沿置位操作数 文章目录 PLC_博图系列☞P:在信号上升沿置位操作数背景介绍P:在信号上升沿置位操作数说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 P 背景介绍 这是一篇关于PLC编程的文章…

DC-5靶机

一.环境搭建 1.下载地址 靶机下载地址:https://download.vulnhub.com/dc/DC-5.zip 2.虚拟机配置 切换nat模式,有问题全选重试和是,打到这了,我感觉这个配置我都不用写了,启动靶机如下图所示即可 二.开始渗透 1.信…

Few-short Learning笔记-1

Few short learning 用很少的样本进行分类或者是回归 support set:小的数据集(无法训练出深度神经网络) few short learning的目标是让机器自己学会学习。 few shot learning是一种meta learning(learn to learn) 举…