【linux网络(四)】传输层协议详解(上)

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到精通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


在这里插入图片描述

Linux网络

  • 1. 前言
  • 2. UDP协议报文详解
  • 3. TCP协议的报文格式
  • 4. TCP的确认应答机制
  • 5. 16位窗口大小的用处
  • 6. TCP的超时重传机制
  • 7. 总结

1. 前言

本篇文章将核心从应用层转移到传输层, 传输层绕不开的两座大山: TCP和UDP. 由于UDP是一种简洁的协议,所以主要讲本篇文章的核心放在TCP协议上!

注: 如果对HTTP协议了解不深刻,建议先阅读这篇文章
HTTP详解

本章重点:

本篇文章会讲解UDP协议的报文格式, 深度解析UDP协议是怎样进行解包/封装的. 之后会讲解TCP的报文格式, 以及TCP协议中为了保证可靠性和效率而采用的方法.

任务:

  1. 对于如何协议都要解决的问题: 如何分离(解包), 如何交互(封装)
  2. 理解协议的报文本身
  3. 详细的了解具体的报文字段

2. UDP协议报文详解

直接上图:
在这里插入图片描述

UDP协议的报头是固定大小的,八字节. 所以解包也很简单: 提取前八个字节的数据, 解析16位UDP长度. 拿到长度后截断整个报文数据!

UDP的报头实际上就是结构体类型:

struct udp_hdr
{
	uint32_t src_port:16;
	uint32_t dst_port:16;
	uint32_t udp_len:16;
	uint32_t udp_check:16;
}

UDP传输过程类似于寄信, 无连接, 不可靠, 面向数据报, 这个在前面的文章有讲解过. 注意UDP的最大数据是2^16-1. 也就是64K. 这里经常会在面试中被问到.


3. TCP协议的报文格式

直接上图:

在这里插入图片描述

一眼看去, TCP协议确实比UDP要复杂的多, TCP协议的报头并不是定长的, 你可能会发现它除了选项和数据的长度是定长的20字节. 但是它的选项的长度是不定的. 在前20字节中有一个叫4位首部长度的字段. 它代表了报头一共有多大. 范围是: 20~60字节

TCP报头的其他字段数据, 比如: 序号, 确认序号, 窗口大小, 6位标志位等. 就是TCP用来保证它的效率和可靠性时需要使用到的字段


4. TCP的确认应答机制

讲个小例子帮助大家理解:
我们看电视剧中的特种兵用对讲机进行通信时, 比如张三对李四说: A点发现敌人, 张三说了这句话后并不确定李四是否听见这句话. 所以此时李四往往会回复一句: 收到. 此时张三才能确信李四收到了刚才的信息

确认应答机制(ACK机制):
为了保证可靠性

确认应答机制就是在说, A端向B端发送一段数据后, B端必须返回给A端一条信息, 代表B端确实收到了这条消息. 那么在上面的TCP协议中, 有一种类型的字段叫六位标记位. 其中之一的ACK标记位就用于确认应答

在这里插入图片描述

除此之外, 确认应答不仅仅会用到ACK标记位, 还会用到确认序号. 那么什么是确认序号? 先来了解TCP对数据的结构划分: TCP将发送缓冲区的每个字节的数据都进行了编号. 即为序列号(将发送缓冲区想象为字符串,编号就是字符串下标).

在这里插入图片描述

比如主机A给主机B发送了1000字节的数据, 那么这个TCP包中的序号就为1000. 当B主机收到TCP包后, 会给A主机发送确认应答, 并且会将确认序号设置为1001, 代表1001以前的数据我都收到了. 可以从1001个字节开始给我发数据了

在这里插入图片描述

同理,要是B主机没有给A发送1001确认序号,而是直接发送了2001. 证明2001以前的数据都收到了, 包括1~1000的

TCP的报头中包含序号和确认序号, 这是因为TCP是全双工的, 一端既可以发数据同时也能接受数据. 并且,系统调用recv,read并不是从网络从将数据读取到内存, 而是将接受缓冲区的数据读取上来. 同理, send和write函数也是讲数据写入发送缓冲区, 而不是直接写入网络

在这里插入图片描述

对确认应答的深刻理解:

确认应答机制只能保证历史发的数据都被接收了, 但是最新的数据对方是否接收了是未知数. 比如B端向A端发送ACK应答后, B端怎么在这里插入图片描述
知道A端有没有收到这条消息? 答案是B端是不知道的!


5. 16位窗口大小的用处

相信聪明的你也思考过, 要是客户端无脑一直给服务器发数据, 把服务器的接受缓冲区塞满了咋办? 是的, TCP协议当然也考虑到了这一点, 于是专门设置了16位窗口大小

用处:

16位窗口大小表示对端接受缓冲区的剩余空间大小, 当客户端收到的窗口大小太小时, 就会减缓发送数据的速度, 留给服务器喘息的机会. 所以发包的一方需要填写窗口大小, 而收包的一方需要解析对端的窗口大小. 当然你可能会问这些工作是谁做的? 答案是操作系统帮我们做的


6. TCP的超时重传机制

上面讲到, 每一次收到数据都会给对方发一个ACK应答表明我收到了. 那么如果我确实没有收到呢?应该怎么办? TCP协议当然也考虑到了这一点

超时重传机制:

主机A发送数据给B之后, 可能因为网络拥堵等原因, 数据无法到达主机B,如果主机A在一个特定时间间隔内没有收到B发来的确认应答, 就会进行重发

在这里插入图片描述

这里还有一种情况: 主机A没收到B的确认应答:

在这里插入图片描述

聪明的你可能又会问了, 超过一定时间会重发, 那么这一定时间具体是多久?

为了在任何环境下都能高性能的通信, 会动态计算超时时间.

  • Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时
  • 时间都是500ms的整数倍.
  • 如果重发一次之后, 仍然得不到应答, 等待 2*500ms 后再进行重传.
  • 如果仍然得不到应答, 等待 4*500ms 进行重传. 依次类推, 以指数形式递增.
  • 累计到一定的重传次数, TCP认为网络或者对端主机出现异常, 强制关闭连接.

7. 总结

TCP协议会有很多方案来保证自身数据传输时的可靠性和效率性, 当然, 今天学习的机制都是和可靠性有关的. 与效率性有关的方案会放在传输层协议详解(下)中讲解. 博主最近在秋招总复习, 所以会更新的比较快. 休息一下, 马上回来!

🔎 下期预告:TCP/UDP协议详解(下) 🔍

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

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

相关文章

备忘录怎么插入文件和附件 备忘录插入文件附件方法

在繁忙的工作与生活中,我们时常需要记录各种信息,而备忘录则成为了我们不可或缺的得力助手。然而,当备忘录中需要包含的文件或附件越来越多时,如何高效、便捷地管理这些文件,便成为了一个亟待解决的问题。 想象一下&a…

深入剖析 Laravel 框架:构建高效PHP应用的最佳实践

引言 随着互联网的高速发展,PHP 作为一门广泛使用的服务器端脚本语言,始终备受开发者青睐。而在众多 PHP 框架中,Laravel 凭借其优雅的设计和高效率,成为了构建现代 Web 应用的热门选择。本文将从零开始,探讨如何使用 …

arcgis portal安装教程(含ECP授权文件)

本文介绍Portal 在windows环境下的安装部署过程,为了顺利进行Portal的安装,建议安装环境是windows server 2016。所以在操作之前首先保证有符合条件的安装机器或虚拟机,安装环境的存储空间建议不低于100G。 安装环境及软件 1、环境&#xff…

o.upload.addEventListener is not a function

o.upload.addEventListener is not a function 在本地的开发环境是可以正常上传的,但是到测试环境,上传就报了这么一个错 在网上寻找的方法 一、 在 node_modules/mockjs/dist/mock.js 第8308行 和 node_modules/mockjs/src/xhr/xhr.js 第216行 添加…

用一个ESP32S3-Zero把有线键盘变为无线

三脚猫最近一直琢磨,那些喜欢买剪线键盘,以及自制键盘瞎折腾的人都是怎么搞的。经过不懈努力,终于想明白除了直接的硬件一个个pin针的高低电压判断后转给蓝牙,拿到现成的古董剪线键盘还有一个方式其实是在usb host转发给蓝牙类似这…

通过iDrac8.0安装Windows Server 2022

1:登录iDrac。 2:启动虚拟控制台。 3:点击虚拟机介质。 4:连接虚拟介质。 5:映射CD/DVD 6: 找到本地的安装镜像。映射设备。 7:在下次引导中选择虚拟CD/DVD/ISO引导。 8:可以在电源中选择重置设备启动&…

替换掉的文件怎么恢复?5个方法,找回数据!

“怎么办呀?刚刚在操作电脑的时候一不小心替换了一个文件,现在根本不知道应该怎么操作才能恢复文件,希望大家可以帮帮我!” 在数字化办公和日常生活中,我们时常会面临文件被意外替换的情况。或许是不小心将新版本的文…

据说可以防静电和浪涌的P6KE30CA

公司有些变送器之前在最后一道校准时,经常发生烧毁的情况。所以在电路的防反接的M7二极管前面又增加了一个TVS二极管,型号P6KE30CA。但愿加了这个好使把。今天又研究了一下这个TVS管子,把搜索到的东西记录一下。放这里备忘把,忘记…

Spring5依赖注入(DI)Set方式注入收录

Spring5依赖注入(DI)Set方式注入收录 依赖注入(Dependency Injection,DI)。 依赖 : 指Bean对象的创建依赖于容器,Bean对象的依赖资源。 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配。 Set方式…

用java代码实现一个函数,反转一个整数

import java.util.Scanner; public class Test_A25 {public static int reverseInte(int num){int reverse0;while(num!0){int digitnum%10;reversereverse*10digit;num/10;}return reverse;}public static void main(String[] args){System.out.print("请输入你要反转的…

【图书推荐】《Hive入门与大数据分析实战》

本书重点 Hive的网站流量分析项目、旅游酒店评价大数据分析项目,两个案例(均包括SQL和Java编程两种解决方法,SQL实现不用编程)可用于课题研究和毕业论文素材。 内容简介 Hive是基于Hadoop的一个数据仓库工具,用来进…

【Android】安Android Studio环境搭建注意点

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

通过python操作redis(windows)

注意在连接之前要确保 redis 服务已经安装。 更多的安装信息请查看:https://blog.csdn.net/sinat_20471177/article/details/132042779?spm1001.2014.3001.5501 redis 模块 Python 要使用 redis,需要先安装 redis 模块。如果要做数据导入/导出操作的…

VMware虚拟机-Ubuntu设置共享文件夹(超详细)

目录 前言1. 其他教程2. 创建共享文件夹3. VMware 设置4. Ubuntu 设置4.1 创建 hgfs 目录:4.2 挂载共享目录4.3 验证是否挂载成功4.4 设置开机自动挂载创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄袭!!!违者必究!!! 创作不易,禁止转载抄袭!!!违…

elasticsearch过滤器filter:原理及使用

码到三十五 : 个人主页 目录 一、引言二、Elasticsearch的过滤器概述三、使用DSL进行过滤操作术语过滤范围过滤复合过滤 四、优化策略五、结语 一、引言 Elasticsearch是一个功能强大的开源搜索引擎,广泛应用于各种数据检索和处理场景。在Elasticsearch…

jetson nano音频驱动代码分析

jetson nano音频驱动代码分析 英伟达audio框架(abub) Platform和Codec驱动程序的功能是 tegra210-admaif:代表音频 DMA (ADMA) 和音频集线器 (AHUB) 之间接口的内核驱动程序 tegra210-xxxx:代表AHUB中各种硬件加速器的内核驱动 tegra210-ahub&#xff1…

怎么缩小pdf文件大小

在数字化时代,pdf文件已经成为我们日常生活和工作中不可或缺的一部分。然而,随着pdf文件内容的增多,其大小也会相应增加,这给文件的传输、存储和共享带来了诸多不便。因此,如何有效地压缩pdf文件大小,成为了…

21组Midjourney绘画关键词,专为游戏设计的奇异生物的盛宴

21组AI绘画关键词,无一不在专为游戏设计的领域中发挥着巨大的作用。从2D游戏艺术到Xbox 360图形,从科幻怪物到异世界写实,这些关键词为游戏开发者提供了丰富多彩的创意资源。通过AI绘画工具,游戏画面呈现更加逼真、独特的设计风格…

【Linux应用】Linux系统的设备管理——Udev

1.udev概述 udev是 Linux2.6内核里的一个功能,它替代了原来的 devfs,成为当前 Linux 默认的设备管理工具,能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。 udev以守护进程的形式运行&am…

开源、无广告的小巧的动态壁纸软件

一、简介 1、开源、无广告的小巧的动态壁纸软件。它是绿色软件,软件压缩包大小仅有 0.5MB,目前仅支持 Windows 平台。它简单好用,支持将各种尺寸、分辨率的 MP4、MOV 等主流格式的视频文件设置为桌面动态壁纸,性能表现以及稳定性都…
最新文章