UDP/TCP协议解析

news2024/9/27 14:28:43

在这里插入图片描述

  • 我最近开了几个专栏,诚信互三!
    ====> |||《算法专栏》::刷题教程来自网站《代码随想录》。|||
    ====> |||《C++专栏》::记录我学习C++的经历,看完你一定会有收获。|||
    ====> |||《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。|||
    ====> |||《C#专栏》::记录我复习C#的经历,深度理解查漏补缺,不定期更新。|||
    ====> |||《计算机网络专栏》::记录我学习计算机网络,看完你一定会有收获。|||

UDP/TCP协议解析

  • UDP报文格式
  • UDP面向数据报解析
  • TCP报文格式及字段解析
  • TCP面向字节流解析
  • TCP三次握手/四次挥手解析
    • TCP为什么需要三次握手
    • TCP为什么要四次挥手
    • 三次握手和四次挥手特点

UDP报文格式

UDP报文格式如下。
在这里插入图片描述
UDP首部字段有八个字节。

{ src port : dest port : len : 校验和}

1).其中len字段代表整个报文长度,16个比特位代的范围[0 — 65,535]字节,大约为64K。
报头的长度就是保证UDP是面向数据报的原理,从缓冲区中读取数据,都可以通过头部字段的len进行一些计算,让每次从缓冲区中读出的都是UDP的整个数据报。

UDP面向数据报解析

面向数据报,及通过缓冲区读入的内容是以整个数据报为单位进行读取的。
报头的长度就是保证UDP是面向数据报的原理,从缓冲区中读取数据,都可以通过头部字段的len进行一些计算,让每次从缓冲区中读出的都是UDP的整个数据报。

TCP报文格式及字段解析

TCP报文格式如下。
在这里插入图片描述
1).对于源端口和目的端口,没有可讲解的。
2).序号:在TCP连接刚建立的时候,OS会随机生成一个序号,序号 = 确认序号 + len(数据长度) - 1,(序号只有在存在数据时,或者在三次握手以及四次挥手的SYN段,RST段,FIN段时才有意义)。
3).确认号:确认号代表在该号之前的所以数据都以及收到,确认号 = 收到的序号 + 1
4).数据偏移:该字段只有4位,范围为[0,15],其代表了整个报头的大小,但是该大小只是一个数字,确定的大小需要在该大小上 * 4。
5).6个标志位:URG=紧急指针,ACK=确认位,PSH=快速交付位,RST=重新设置,SYN=同步位,FIN=终止位,这六种比特位,会在以下介绍。
6).窗口:该字段是用来进行流量控制的主要字段,其表示的是接收窗口剩余字节数量。
7).校验和:用于校验整个TCP数据报是否有错误。
8).紧急指针:紧急指针用于指向TCP数据字段中的某个位置,该紧急指针的长度为一个字节,让该位置的字节会被上层优先获得,从而判断接下来该怎么办。

TCP面向字节流解析

面向字节流,及在传输过程中,报文和报文之间没有明显的分割,对于发送端来说,发送的数据是一个一个字节,对于接收方来说,接收的也是一个一个字节,所以接收方通过接口接收到的数据可能并非是一个完整的报文。

TCP三次握手/四次挥手解析

TCP建立链接是通过三次握手来实现的,TCP三次握手示意图如下。
在这里插入图片描述

1).首先,服务端调用Listen接口,服务器阻塞在Listen接口处,进入LISTEN状态,等待客户端建立链接。
2).其次,先生成随机确认号,同时客户端调用connect接口发送SYN报文,此时客户端进入SYN_SENT状态。
3).在服务端接收到SYN报文,同时服务端发送SYN | ACK报文,此时服务端处于SYN_RECV状态。
4).随后客户端发送ACK报文,此时客户端的链接以及建立成功。
5).最后,在服务端收到ACK报文后,此时服务端的链接建立成功。


TCP四次挥手示意图如下。
在这里插入图片描述
1).首先,由主动关闭通信的一端发送FIN报文,同时进入FIN_WAIT-1状态。
2).其次,在被动关闭端收到FIN报文后,进入CLOSE_WAIT状态,在CLOSE_WAIT状态中,被动关闭端会将缓冲区的所有数据都发送到网络中
3).再次,缓冲区的数据发送到网络中后,被动关闭端会发送FIN | ACK报文,同时被动关闭端进入LAST_ACK端。
4).主动关闭端收到FIN | ACK报文后,主动关闭端发送ACK报文,主动关闭端进入TIME_WAIT状态,该状态需要两个MSL时间。

2MSL时间中,是为了让主动关闭端等待CLOSE_WAIT状态中发送的报文到达主动关闭端。

同时关闭socket。
5).被动关闭端在接收到ACK报文后,被动关闭端关闭socket。

TCP为什么需要三次握手

TCP是面向链接的传输,同时TCP是全双工通信,所谓的面向链接,并不是真正的建立链接,该链接只是抽象的链接,同时需要帮助TCP的全双工通信这就要求服务端能收到客户端的报文,同时客户端能收到服务端的报文,而当客户端收到SYN | ACK报文后,客户端的链接就已经建立完毕,当服务端收到ACK后,服务端的链接就已经建立完毕,就已经保证了面向链接以及全双工这两种特点。

TCP为什么要四次挥手

由于TCP是面向链接全双工的,四次挥手的目的是为了关闭双方的通信链接(抽象链接),所以,主动关闭方发送FIN报文,被动关闭方发送ACK报文,关闭一条链接,随后被动关闭方发送FIN | ACK报文,同时主动关闭方发送ACK报文,关闭一条链接,自此两条链接被关闭。

三次握手和四次挥手特点

如图。
在这里插入图片描述
在这里插入图片描述
在TCP中,存在一种叫做捎带应答的机制,及需要发送ACK报文只需要将报头的ACK位制为1即可,但是TCP的数据部分却没有被设置,所以我们将多种状态信息或数据信息都装载在同一个TCP报文中发送出去就是捎带应答
所谓的三次握手,实际上就是将ACK报文SYN报文这两种状态信息都放在一个TCP报文中,捎带应答了。
在这里插入图片描述
实际上可以将SYN和ACK分开,分开后,所谓的三次握手本质就是四次握手了。
在这里插入图片描述

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

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

相关文章

mysql一个小问题引发的思考-mysql类型转换-查询缓存 及 MYSQL查询缓存以及自动选择不使用查询缓存的情况

一、mysql一个小问题引发的思考-mysql类型转换-查询缓存 最近在做的一个项目中有一个SQL语句发现点问题,大概如下: select * from table where cid0 or find_in_set(1, cid); 数据表中的字段cid是字符串类型,原来的后端同学未提过此字段还能是…

Pytorch使用教学3-特殊张量的创建与类型转化

1 特殊张量的创建 与numpy类似,PyTorch中的张量也有很多特殊创建的形式。 zeros:全0张量 # 形状为2行3列 torch.zeros([2, 3]) # tensor([[0., 0., 0.], # [0., 0., 0.]])ones:全1张量 # 形状为2行3列 torch.ones([2, 3]) # tensor([[1., 1., 1.], # …

IEC104转MQTT网关轻松将IEC104设备数据传输到Zabbix、阿里云、华为云、亚马逊AWS、ThingsBoard、Ignition云平台

随着工业4.0的深入发展和物联网技术的广泛应用,IEC 104(IEC 60870-5-104)作为电力系统中的重要通信协议,正逐步与各种现代监控、管理和云平台实现深度融合。IEC104转MQTT网关BE113作为这一融合过程中的关键设备,其能够…

人工智能:大语言模型提示注入攻击安全风险分析报告下载

大语言模型提示注入攻击安全风险分析报告下载 今天分享的是人工智能AI研究报告:《大语言模型提示注入攻击安全风险分析报告》。(报告出品方:大数据协同安全技术国家工程研究中心安全大脑国家新一代人工智能开放创新平台) 研究报告…

LeetCode24 两两交换链表中的节点

前言 题目: 24. 两两交换链表中的节点 文档: 代码随想录——两两交换链表中的节点 编程语言: C 解题状态: 没画图,被绕进去了… 思路 思路还是挺清晰的,就是简单的模拟,但是一定要搞清楚交换的…

路由表与IP数据报的转发

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、相关知识 1、路由类型 路由表中有3类路由:直连路由、静态路由、动态路由 直连路由:一般指去往路由器接口直接连接网络的…

Godot游戏制作 05收集物品

创建新场景,添加Area2D节点,AnimatedSprite2D节点 ,CollisionShape2D节点 添加硬币 按F键居中,放大视图。设置动画速度设为10FPS,加载后自动播放,动画循环 碰撞形状设为圆形,修改Area2D节点为Co…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作

目录 项目论文介绍 论文中实际开展的工作 非扩散性的肖像动画 基于扩散的肖像动画 方法论 基于Ubuntu的部署实践开始 1. 克隆代码并准备环境 2. 下载预训练权重 3. 推理 快速上手 驱动视频自动裁剪 运动模板制作 4. Gradio 界面 5. 推理速度评估 社区资源 政安…

Apollo部署与简易架构梳理

文章目录 apollo 安装apollo的基本架构组件机制component编译与加载 节点通讯数据的传输消息读写的实现消息的写端消息读端 常用术语ComponentChannelTaskNodeReader/WriterService/ClientParameter服务发现CRoutineSchedulerMessageDag文件Launch文件Record文件Mainboard Moni…

机会性加密技术:网络安全的新趋势

在当今数字化时代,网络安全已成为各行各业不可忽视的重要议题。随着网络攻击手段的不断演进,传统的加密方式已难以满足复杂多变的安全需求。机会性加密技术(Opportunistic Encryption,简称OE),作为一种新兴…

快速入门Jupyter notebook

快速入门 Jupyter notebook 一、前言(一)优点(二)特点(三)调用运行(四)新建 二、认识界面快捷键(一)三种模式(1)蓝色模式:…

qt做的分页控件

介绍 qt做的分页控件 如何使用 创建 Pagination必须基于一个QWidget创建,否则会引发错误。 Pagination* pa new Pagination(QWidget*);设置总页数 Pagination需要设置一个总的页数,来初始化页码。 pa->SetTotalItem(count);设置可选的每页数量…

Spring中使用到的设计模式及其源码分析

前言 众所周知,Spring框架是一个强大而灵活的开发框架。这不,上次的面试刚问到这些,没防住!!!因此下来总结一下。这篇文章主要介绍Spring中使用到的设计模式,自己做个面试复盘,同时…

51单片机嵌入式开发:19、STC89C52R控制LCD1602码表+数码管+后台数显(串口)

STC89C52R控制LCD1602码表数码管后台数显(串口) 1 概述1.1 项目概述1.2 项目组成部分1.3 功能描述 2 开发环境2.1 支持设备2.2 硬件电路 3 软件代码工程4 演示4.1 Proteus仿真4.2 实物演示 5 总结 1 概述 1.1 项目概述 本项目旨在利用STC89C52R单片机实…

C语言程序设计结构(未完待续...)

文章目录 **C**语言设计的核心(灵魂)**C**语言程序设计的设计结构顺序结构选择结构循环结构 **C**语言的语句 C语言设计的核心(灵魂) 程序 数据结构 算法 算法:对于问题解决的方法思路或者步骤 算法的特征&#x…

mac|安装PostgreSQL

1、官网下载:EDB: Open-Source, Enterprise Postgres Database Management 选择需要的版本: 双击得到的.dmg文件 双击,弹窗选择打开,一路next,然后输入你要设置的密码,默认账号名字为:postgres…

vite构建vue3项目hmr生效问题踩坑记录

vite构建vue3项目hmr生效问题踩坑记录 hmr的好处 以下是以表格形式呈现的前端开发中HMR(热模块替换)带来的好处: 好处描述提升开发效率允许开发者在不刷新整个页面的情况下实时更新修改的代码,减少等待时间保持应用状态在模块替…

一起学Java(1)-新建一个Gradle管理的Java项目

一时兴起,也为了便于跟大家同步学习进展和分享样例代码,遂决定创建一个全新的Java项目,并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点(如Gradle等)。为了紧跟技术潮流和提高操作效率&a…

怎么给PDF文件加密码?关于PDF文件加密的四种方法推荐

怎么给PDF文件加密码?给PDF文件加上密码是保护文件安全的一种重要方法,特别是当需要在不受授权的访问下保护敏感信息时。这个过程不仅仅是简单地设置密码,而是涉及到对文档内容和访问控制的深思熟虑。加密PDF文件可以有效防止未经授权的用户查…

electron TodoList网页应用打包成linux deb、AppImage应用

这里用的是windows的wsl的ubuntu环境 electron应用打包linux应用需要linux下打包,这里用windows的wsl的ubuntu环境进行操作 1)linux ubuntu安装nodejs、electron 安装nodejs: sudo apt update sudo apt upgrade ##快捷安装 curl -fsSL http…