波奇学Linux:TCP协议

TCP协议传输层有发送缓冲区和接收缓冲区

read,recv,send的函数调用发送缓冲区,本质并不是数据发送到网络当中,数据什么时候发送,发送多少,出错了怎么办,由TCP协议自主决定

发送到对方缓冲区本质上是拷贝

全双工:既能读又能写,原因是因为有两个文件缓冲区

udp 没有发送缓冲区,直接发送

报头和有效载荷如何分离,如何交付给上层

报头20个字节

4位首部长度 [0000,1111]=[0,15] =>[0,60]除了长度大小还有选项

基本单位是4个字节

首部长度-20个字节剩下的40个字节是选项

16位窗口大小: 

流量控制:规避客户端发送大量数据导致服务端接收缓冲区满了,产生大量丢包

TCP保证可靠性,最基本的一个特点,确认应答机制

发送后,发送端接收到发送端的确认应答机制

发送方的流量控制,由接收方剩余空间大小决定,16位窗口大小是发送方接收缓冲区剩余空间大小

因为是全双工的,双方可以根据对方的报文来确定流量控制。

32位序号和32位确认序号

收到应答,最近发送的消息对方收到了,最新的消息是没有应答的,无法保证

tcp最原始的通信过程,不再对应答发送二次应答

客户端一段时间如果没有收到应答,会对信息进行重传

将应答和tcp数据合在一起发送

序号作用一:保证报文按序到达,或者乱序到达后,能排好序

序号是什么

从用户层拷贝下来时,连续的字符串被拆成多个字节,天然每个字节都有自己的序号,本质是数组下标

序号就是报文数据的最后一个下标,根据序号来重新组合发送的数据

确认序号是对收到的报文序号+1,表示确认序号之前的数据已经收到

下次发送请从确认序号+1字符开始发送

可以允许应答有少量丢失,即使前面应答有少量丢失,也可以根据后面的应答来确定前面是否收到。

为什么有两个序号?原因一:既可能是应答也是同时发送数据。

一个服务器可能会给多个服务端服务。

6个标志位的意义

服务器发送的tcp报文有五种类型:三次握手,四次挥手,通信的正常报文,一共有五种类型。

有系统调用改变标识位

ACK:确实位是否有效

SYN:请求建立连接,我们把携带syn的标志位称为同步报文段

在三次握手时用到

FIN:通知对方,本端要关闭

PSH:当接收缓冲区已满时,发送方的会设置PSH表示位为1,发送报文,让接收方把tcp缓冲区读取数据读走

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

作为服务端会存在同时存在多个已经建立好的链接,理解链接的概念,操作系统为链接建立结构体

 

(最后一个ack没有应答,客户端不知道服务端是否收到),client只要把第三次的ack发送过去,就认为建立好

然而当ack发送失败,服务端要发送rst标志位的报文,提醒客户端重新建立连接

urg标志位:紧急指针是否有效

数据插队,优先读取某些重要数据,urg为0紧急指针无效,urg为1,紧急指针有效,紧急数据为数据中紧急数据的偏移量,紧急数据一般为一字节,一般一个报文只有一个紧急数据

场景:当服务器出现问题,发送紧急数据,询问服务器情况,服务器返回紧急数据给客户端

确认应答ACK机制

超时重传机制

主机对于发出的报文是否丢失,无法判定

接收端可能收到重复报文,通过序号去重

超时时间如何确定?

超时时间和网络有关,是动态的而且和网络状态强相关

在linux以500ms为单位控制,且指数增加

如第一次 2*500ms 第二次 4*500ms

tcp的链接管理机制

connect负责发起三次握手,establish connect返回

accept不发起握手,会把发起的链接拿上来

closefd(fd) 发送断开连接tcp报文

tcp通信是基于链接的,是三次握手和四次挥手

保证客户端和服务端至少有一次收和发,验证全双工通路是否通畅

一次握手可能导致syn洪水,客户端多次发送syn请求

两次握手:优先让server做出连接建立动作

三次握手:奇数次握手保证连接失败是在顾客端的

四次挥手:确保双方都知道对方不想发送数据

在FIN_WAIT_2客户端不想再发送数据

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

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

相关文章

Elasticsearch是什么及作用

初识Elasticsearch 一、Elasticsearch是什么? es是款强大的开源搜索技术,具备非常多强大的功能,能够帮助我们开发人员从海量数据中快速找到需要的内容。例如在GitHub上搜索代码,在jd、tb网站中搜索商品、在baidu中搜索答案。 二、…

智慧停车系统运行原理和影响评估

一:智慧停车系统概述 智慧停车系统运用信息通信技术,整合传感器、摄像头、车牌识别设备,实时监控停车场情况,为车主提供便捷快速的停车体验。主要功能包括车位查询、预约停车、自动计费、无感支付等。车主可通过手机APP或自助终端…

Autodesk Maya 2025 mac玛雅三维动画特效软件

Autodesk Maya 2025 for Mac是一款功能强大、操作简便的三维动画软件,适用于电影、电视、游戏、建筑、工业设计、虚拟现实和动画等领域。无论是专业设计师还是初学者,都可以通过Maya 2025实现自己的创意和想法,创作出高质量的三维作品。 软件…

NEO 学习之 MLE(最大似然估计)

文章目录 简单题目MLE 在不同的分布的运用正态分布指数分布均匀分布泊松分布 如何理解 最大似然估计? 就是我们先取出一堆样本,得到一个L( θ \theta θ) 函数,然后的话,这个是关于 θ \theta θ 的一个函数,那么由于存…

C++学习笔记(入门)

c学习笔记&#xff08;入门&#xff09; 文章目录 c学习笔记&#xff08;入门&#xff09;前言精华一、&#xff08;1&#xff09;c语言结构基础1.头文件2.指明空间&#xff1a;using namespace std3.输入输出&#xff1a;cin >>&#xff0c;cout << ... << …

3.29 文章翻译RO——Robust scheduling of building energy system under uncertainty

highlight 我们建立了一个带有冷却器和冰热能储存的建筑能源系统模型。 提出了一种两阶段鲁棒策略来调度系统运行。 具有适当参数的鲁棒策略优于确定性方法。 鲁棒策略和MPC方法的性能相似。 本文提出了一种鲁棒调度策略&#xff0c;用于在预测不确定的情况下管理具有太阳能发电…

目标检测——服饰属性标签识别数据集

一、重要性及意义 首先&#xff0c;随着电商、时尚推荐等业务的发展&#xff0c;服饰属性标签识别已经成为一项关键的计算机视觉任务。这些标签&#xff0c;如颜色、款式、材质等&#xff0c;对于实现图像搜索、时尚推荐等业务需求至关重要。服饰属性标签识别数据集为此类任务…

编程语言 MoonBit 本周有超多重磅更新等你来探索:expect 测试添加 inspect 函数,还有……

MoonBit 更新 1. expect 测试添加 inspect 函数 expect 测试添加针对 Show 接口的 inspect 函数&#xff0c;签名如下&#xff1a; pub fn inspect(obj: Show,~content: String "",~loc: SourceLoc _,~args_loc: ArgsLoc _ ) -> Result[Unit, String]⚠️ 此…

svn拉代码乱码请执行清理命令

代码有冲突&#xff0c;突然就svn就不好使了&#xff0c;报错&#xff0c;清理也报错 解决办法&#xff1a; 1、下载SQLite工具 地址&#xff1a;SQLite 下载页面 2、新建一个临时文件夹&#xff0c;使用英文名字&#xff0c;将解压后的sqlite.exe文件复制到这个临时文件夹下…

如何利用生成式人工智能(AI)推广海外仓储机器人?

随着全球物流行业的迅速发展&#xff0c;仓储机器人在提高效率和降低成本方面发挥着越来越重要的作用。然而&#xff0c;要在海外市场推广仓储机器人&#xff0c;需要制定一系列有效的营销策略。以下是一些关键步骤&#xff1a; 市场调研和定位 在海外市场推广仓储机器人之前…

OSPF---开放式最短路径优先协议

1. OSPF描述 OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系&#xff0c;并将已知的邻居列表和链路费用LSU报文描述&#xff0c;通过可靠的泛洪与自治系统AS内的其他路由器周期性交互&#xff0c;学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路…

C++项目——集群聊天服务器项目(十一)服务器异常退出与添加好友业务

本节来实现C集群聊天服务器项目中的服务器异常退出与添加好友业务&#xff0c;一起来试试吧 一、服务器异常退出 在Linux环境下&#xff0c;我们在服务器端使用CTRLC结束程序执行&#xff0c;即使用CTRLC让服务器异常退出&#xff0c;这样的后果是本应登录服务器的用户在数据库…

【Linux实验室】NFS、DHCP的搭建

NFS、DHCP的搭建 1、nfs服务搭建及测试什么是NFS&#xff1f;环境准备服务端机器安装nfs-utils和rpcbind包启动NFS服务创建/data/NFSdata目录&#xff0c;配置nfs文件启动服务挂载测试在服务端在共享目录下创建文件测试在客户端在共享目录下创建文件 2、dhcp服务搭建及测试什么…

【算法】回形遍历N*N的二维数组

题目 通常&#xff0c;可以按照逐行、逐列等不同方法输出二维数组中的全部元素。 如果按照回形的路线&#xff08;如下图&#xff09;输出数组中的全部元素&#xff0c;你能给出比较有效的解法吗&#xff1f; 第一行为正整数N(1≤N≤10) 之后有N行、N列个正整数&#xff08;即…

Caddy之静态站点应用场景

一、背景与介绍 无意之中看到公司部门的软件介质下载站点不是使用Nginx部署&#xff0c;而是使用Caddy。就比较好奇了&#xff0c;这个Caddy是个什么东西? 为啥他们没用Nginx呢&#xff0c;带着好奇心搜索了一下相关资料。 官方解释: Caddy is a powerful, extensible platfo…

Linux如何连接github仓库

一.创建一个github账号 如何创建一个github账号 二.在github上创建一个仓库 登录上github后出现这个界面 然后点击左上角头像&#xff0c;在按照图片位置点击&#xff1a; 继续按照图片上的位置进行点击&#xff1a; 创建成功&#xff1a; 三.云主机连接Github仓库 1.在linux中…

【T5模型源码】深入T5模型:源码解析与实现细节

【T5模型源码】深入T5模型&#xff1a;源码解析与实现细节 文章脉络 模型结构图 类关系分析 简单类的源码 T5LayerNorm T5DenseActDense T5DenseGatedActDense T5LayerFF 复杂类的源码 常见参数介绍 最难的T5Attention源码 常见面试提问 总结 我们在日常业务中可能…

QuillEditor无法识别显示含有div和转义字符的问题

在解决前端根据爬取抓过来的数据时&#xff0c;要显示到富文本框中&#xff0c;如下&#xff1a; <div class\"info_cont\" id\"zoomcon\">\n <p><br></p><p style\";text-align: justify;font-family: Calibri;font-size…

解决Quartus与modelsim联合仿真问题:# Error loading design解决,是tb文件中没加:`timescale 1ns/1ns

解决Quartus与modelsim联合仿真问题&#xff1a;# Error loading design解决&#xff0c;是tb文件中没加&#xff1a;timescale 1&#xff0c;一直走下来&#xff0c;在modelsim中出现了下面问题2&#xff0c;rtl文件、tb文件2.1&#xff0c;rtl代码2.2&#xff0c;tb测试2.3&a…

设计模式23--观察者模式

定义 案例一 案例二 优缺点