计算机网络 - UDP协议 与 TCP协议可靠性(传输层)

news2024/11/16 23:43:06

前言

本篇介绍UDP报文格式,认识UDP报文,介绍TCP报文格式,了解TCP可靠性的核心机制,TCP通信中三次握手与四次挥手;如有错误,请在评论区指正,让我们一起交流,共同进步!


文章目录

  • 前言
  • 1. 认识UDP协议报文格式
    • 1.2 校验和
  • 2. TCP报文格式
    • TCP的可靠性
  • 总结

本文开始

1. 认识UDP协议报文格式

UDP报文包含两部分:
UDP报头 (header) : 报头共8字节分为4部分,每部分两个字节;
1-2字节是源端口号;3-4字节是目的端口号;5-6字节是报文长度;6-8字节是校验和;

传输层中UDP协议上只包含端口,不包含IP;
【注】每个端口号包含在UDP报文中,并占两个字节;
端口号取值范围:0 - 65535;小于1024的端口称为知名端口号,为有名的服务器所预留的端口(但不建议使用,如果想用可以用);

UDP 正文 / 载荷 ( payload):包含一个完整的应用层数据报;

图示:

在这里插入图片描述

UDP报文长度两个字节 0 - 65535 =》 UDP报文最大长度 64KB;
【注】使用UDP编程需要注意数据不能太长!

1.2 校验和

网络传输并非很稳定,可能会受到外界干扰,产生问题,导致数据传输出错;(电磁传输受干扰造成比特翻转,从而数据传输错误)

校验和的作用判断一下当前传输的数据是否出错;
① 如果校验和不对,此时数据一定不对;
② 如果校验和对,此时数据也有一定概率是错误的;(不能完全保证)

对于上述问题,为了让校验和有更高的识别率,通常会用数据的内容作为参数进行计算;此时数据变化,校验和也会变化;
=》校验和一般取内容 或者 内容的一部分,通过一些算术运算,数学公式得到一个数值来判断;

例如:目的是想要记住一些书名,就把这些书名的每个开头的字记录下来作为校验和,根据这些开头字来确认记住的书名是否正确,这样就提高了校验的识别率;

验证数据报的准确性过程:
前提:认为输入的内容一样,按照同一个算法得到的校验和也应该一样;
发送方:把载荷数据,通过校验和算法,得到校验和结果s1,然后再发送数据;
接收方:收到数据,再次通过校验和算法,得到校验和结果s2;
如果 s1 != s2 ,校验和不同,数据(内容)一定出现了问题;

2. TCP报文格式

TCP报文格式:

在这里插入图片描述

TCP特点:
有连接:

在这里插入图片描述

面向字节流: 读写操作涉及字节;

在这里插入图片描述

全双工通信: Socket 服务器和客户端都可使用;
可靠传输;

认识TCP核心机制:可靠传输;

TCP的可靠性

1.确认应答
在网络传输中,传输的数据可能会出现后发的消息,先到达的情况,为了解决这种问题,就给发送的消息分配序号,同时应答报文,给出确认序号;

在TCP中:
序列号(序号):TCP将每个字节的数据都进了编号;-》
确认序号:取发送方发过来的全部数据,最后一个字节的下一个字节的序号;

确认序号1001的理解:
① 小于1001的数据,接收方已经收到
② 接收方下面向发送方索要从1001开始的数据(1001之后的数据);
发送方与接收方传输:

在这里插入图片描述

消息后发先至产生的原因:
多个报文发送开始是有序的,但在网络传输过程中,每个报文走的路径有不相同,就导致后面的报文可能跑到前面来;
为了解决这种情况,TCP会有接收缓冲区,TCP就可以按照序号针对收到的信息进行整队,让报文再次变得有序;

2.超时重传
确认应当在正常情况下,会顺利进行,但也有不正常情况丢包;

什么是丢包?
网络传输会经过很多节点和设备,每个设备都有自己转发能力的上限,当到达设备流量达到峰值,就可能会引起部分数据被丢包;

超时重传:发送方一直拿不到应答报文,等待一段时间后,还没有收到应答报文,发送方此时认为刚才的数据丢包了,会重新发送一遍数据;

发送方对于丢包的两种判定:一定时间内,没有收到ack(应答报文)
① 数据直接丢失,接收方没直接收到数据,不会发送ack;

在这里插入图片描述

② 接收方收到数据,但返回的ack丢失了;
对于上述两种判定,发送方都会重传;
如图:发送方重传会产生接收方收到重复数据的问题,这怎么办呢?
解决方式:TCP自动解决,TCP接收缓冲区会根据收到的数据序号自动去重;

在这里插入图片描述

小结TCP可靠性的体现:
① 确认应答保证的可靠性;
② 丢包现象,使用超时重传补充;

3.连接管理
认识TCP如何建立连接 和 断开连接;

3.1 TCP建立连接: 三次握手
何为握手:通信双方,进行一次 网络交互;
三次握手:客户端 与 服务器之间,通过三次交互,建立连接;

【注】syn: 同步报文段,一方向另一个,申请建立连接;
三次握手在内核中自动完成,应用程序不能干预;
syn+ack: 同意客户建立连接的请求,并且服务器也向客户端发起连接申请;
ack: 应答报文段;
图示:

在这里插入图片描述

三次握手的目的:验证客户端与服务器,各自发送能力与接收能力是否正常;(确保通信正常)

问题来了:问什么一定是三次,两次不行吗或者四次可以吗?
如果是两次握手,根据上图就是少了客户端对服务器的ack,这时客户端知道接收和发送通信都正常,但是服务器不知道自己发送通信是否正常;(服务器只知道自己接收正常,但是发送正不正常不知道)

如果是四次相当于把中间ack+syn分开发送,可以是可以,但是效率相比于一次发送两个要低,所以最后是这两个一起发送;

3.2 TCP断开连接:四次挥手
四次挥手:通信双方,各自给对方发送一个FIN,再各自给对方返回ACK;
【注】FIN:结束报文;

图示:

在这里插入图片描述

【注】建立连接:一定是客户端先发起;断开连接:客户端和服务器都可能先发起;

问题:为什么四次挥手不能合并,而三次握手可以呢?
三次握手:ack 和 syn 都是同一时机触发的,都由内核来完成;
四次挥手:ack 和 fin 是不同时机触发的;
ack是内核完成的,在收到fin的时候第一时间返回 (第一次fin,服务器在收到后立即返回ack; 第二次fin, 是服务器发现客户端断开连接后,再close从而触发fin; );而fin是应用程序代码控制的,必须在调用socket的close方法才会触发;


总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

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

相关文章

EDA基础概念

EDA基础概念EDA和CADCAD工具EDA工具EDA技术实现目标可编程逻辑器件简称PLD发展历程FPGA简介CPLD简介FPGA和CPLD区别是否需要同时学习FPGA和CPLDXilinx(赛灵思)公司介绍(AMD收购)开发工具Xilinx产品Altera(阿尔特拉&…

Qt关于QPainter绘制1px宽度图形带来的问题思考

前言 前段时间遇到这样一个问题,使用QPainter绘制直线的时候,设置了笔宽为1像素,但是绘制出来的线条却是2px宽度,而且设置的画笔颜色很明显是降低了透明度,不是最“纯正”的颜色。 当时就感觉非常奇怪,明明…

【FPGA实验1】FPGA点灯工程师养成记

对于FPGA几个与LED相关的实验(包括按键点灯、流水灯、呼吸灯等)的记录,方便日后查看。这世界上就又多了一个FPGA点灯工程师了😏 成为一个FPGA点灯工程师分三步:一、按键点灯1、按键点灯程序2、硬件实现二、流水灯1、流…

Vue2-黑马(二)

目录: (1)vue2-基础-属性绑定 (2)vue2-事件绑定 (3)vue2-双向绑定 (4)vue2-计算属性 (1)vue2-基础-属性绑定 属性与js数据绑定: …

react-router原理

前端路由的原理 自己来监听URL的改变,改变url,渲染不同的组件(页面),但是页面不要进行强制刷新(a元素不行)。 hash模式,localhost:3000/#/abc 优势就是兼容性更好,在老版IE中都可以运行缺点是…

DNS配置

TCP/IP提供了通过IP地址来连接到设备的功能,但对用户来讲,记住某台设备的IP地址是相当困难的,因此专门设计了一种字符串形式的主机命名机制,这些主机名与IP地址相对应。 在IP地址与主机名之间需要有一种转换和查询机制&#xff0c…

CANopen | 对象字典OD 06 - 创建对象字典变量,通过TPDO定时发送

文章目录一、前言二、实验目的三、对象字典OD四、TPDO1定时发送tx_Value变量一、前言 该笔记的程序: github 二、实验目的 CANopen从站有一个变量tx_Value,映射到TPDO1上。接着,CANopen从站每1S发送一次TPDO1,将tx_Value发送出去。 三、…

PasteSpider之文件同步软件的介绍

作为PasteSpider系统中的一大特色,那就是文件的差量同步和配置同步。能够实现对不同需求的良好实现。 在网站https://www.pastecode.cn/下载文件同步软件后,完全解压到自己的文件夹内,然后双击“SpiderSyncFile”,如下图: 打开登陆…

Nginx模板自动化

背景 在日常工作中,我们经常需要创建Nginx配置文件的模板,以便在不同的环境中快速部署和配置Nginx服务器。然而,这样的任务通常需要重复性高、耗时长,且容易出错。为了加快这些任务的完成,并提高工作效率,…

C/C++开发,认识opencv各模块

目录 一、opencv模块总述 二、opencv主要模块 2.1 opencv安装路径及内容 2.2 opencv模块头文件说明 2.3 成熟OpenCV主要模块 2.4 社区支持的opencv_contrib扩展主要模块 2.5 关于库文件的引用 一、opencv模块总述 opencv的主要能力在于图像处理,尤其是针对二维图…

字节8年测试经验,送给想要学习自动化测试的同学6条建议

我的职业生涯开始和大多数测试人一样,开始接触都是纯功能界面测试。那时候在一家电商公司做测试,做了有一段时间,熟悉产品的业务流程以及熟练测试工作流程规范之后,效率提高了,工作比较轻松,也得到了更好的…

QML控件--Dial

文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数五、信号一、控件基本信息 Import Statement:import QtQuick.Controls 2.14 Since:Qt 5.7 Inherits:Control 二、控件使用 Dial:是一个旋钮控件; im…

【权限维持】黄金白银票据隐藏账户C2远控RustDeskGotoHTTP

文章目录内网域&单机版-权限维持-基于用户-隐藏用户内网域-权限维持-基于服务TGT-黄金白银票据黄金方法:白银方法:内网域-权限维持-基于软件-GotoHTTP&RustDesk—无需安装C2 GotoHTTPC2 RustDesk 推荐内网域&单机版-权限维持-基于用户-隐藏用…

Plist文件是什么?

plist 文件是一种用于存储应用程序配置信息的文件格式,其中包含应用程序的各种设置和数据。在过去,plist 文件通常是以.plist 格式存储的。然而,随着时间的推移,人们开始使用.plistx 格式来存储更复杂的数据结构和数据。如果您需要…

MySQL日期时间函数汇总、时间格式转换方法

MySQL日期时间函数汇总、时间格式转换方法时间函数日期时间格式转换date_format函数EXTRACT()DATE_ADD()DATE_SUB()DATEDIFF函数时间函数 函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()返回日期或日期/时间表达式的日期部分HOUR()获…

【遗传算法、粒子群、改进遗传算法】基于智能算法的电力系统电网最优规划方案的研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【从零开始学Skynet】工具篇(一):Ubuntu16.04环境搭建

一、Ubuntu系统下载 为了初学者使用方便,我们下载的是Ubuntu16系统的桌面版本:下载地址 二、VirtualBox虚拟机下载 去Virtualbox官网下载:Downloads – Oracle VM VirtualBox 点击这里进行下载,下载完之后点击客户端进行安装,安装…

ros2-foxy windows下安装流程

1.系统要求 本手册安装环境为win10 x64 请确保已在系统路径中安装PowerShell。 请确保网络的通畅性 2.环境安装部分 安装Chocolatey 方案1: 复制以下命令行,使用管理员权限打开PowerShell,复制粘贴大法到PowerShell,安装好ch…

YC-A11(原创)基于springboot,vue网上商城

绪论 课题的开发背景 随着计算机和网络的快速发展,并且越来越普及,互联网日益成为人们收集信息常用渠道,电子商务开始流行,一种全新的理念不断形成并且快速发展,像国内电商巨头淘宝、京东、苏宁易购、唯品会等电商平台…

筑牢合规营销“防火墙”,助力四环医药实现合规营销管理能力全面进阶 | 案例研究

四环医药控股集团有限公司(以下简称“四环医药”)是一家集药品研发、生产和销售于一体的集团化医药企业,公司现拥有心脑血管疾病、肝病治疗、提高机体免疫机能、代谢及抗感染等多领域100品种。四环医药强大的营销体系及独特营销模式确保了自身…