【网络编程】网络原理(一)

ops/2024/11/15 0:20:02/

系列文章目录

1、 初识网络
2、网络编程的基础使用(一)


文章目录

  • 系列文章目录
  • 前言
  • 一、端口号的使用
  • 二、UDP报文学习
    • 1.报文格式
    • 2.MD5算法
  • 总结


前言

在前文中,主要对UDP和TCP协议有了简单的了解,而这两种协议是负责传输层的内容。我们知道,在传输层中,有IP地址和端口号的概念,在这里我们需要注意,每个进程/应用程序的端口号是不能被重复使用的。
在下面的文章中,我们将继续深入了解这两个协议。


一、端口号的使用

在传输层中,两个进程不能绑定同一个端口号。

  1. 如果一个是TCP服务器,一个是UDP服务器,二者使用同一个端口是不会影响的。同种协议下的二者进程端口号是不能一致的。
  2. 一个进程可以同时绑定多个端口号。常见于根据端口号的不同提供,服务器执行的对应逻辑不相同。

二、UDP报文学习

1.报文格式

在UDP协议中,应用层数据抵达UDP之后,就会给这些数据加上UDP报头。
UDP数据报(DatagramPacket) = 报头+数据载荷
报头长度为8字节,分为4部分,每部分长度为2字节。 下图为UDP数据报的报文格式。
在这里插入图片描述

  1. 源端口号:即发送方端口号。

  2. 目的端口号:即接收方端口号。

  3. UDP长度:长度为2字节,即0-65535b = 64kb 这就是一个UDP数据报最大的容量了。通过UDP长度我们就可以知道载荷的容量。
    我们知道,现如今64kb已经是一个很小的容量了,随着数据的增多,就会越来越接近于64kb的上限。这就会导致一份大容量的数据需要被拆分成多个UDP数据报的形式进行发送,不仅大大消耗了系统资源,同时对性能也是一个不小的考验。

  4. UDP校验和(checkSum):数据在网络传输过程中可能会存在数据出错的现象,我们称之为“比特翻转”。简单一点理解就是原本二进制为0的数据可能会在传输过程中变成二进制为1的情况。

     为此,我们需要对发送过来的数据进行检验,是否与原来的数据一致。[1]基于UDP数据报中本身容量的限制,在UDP中,我们只能做到检查数据是否出错的程度。使用的方式为CRC检验。[2]校验和的方式是对数据进行一系列的计算,如果数据发生改变,校验和得到的结果也就不相同了。
    

    对校验和简单理解:在A端对数据内容进行计算得到检验和A,而发送到B端后对数据内容计算得到校验和B,通过校验和B与检验和A对比之后就可以知道数据是否出错。
    在这里插入图片描述

  5. 由于UDP数据报属于不可靠传输,适用于性能要求比较高,可靠性要求不高的场景。

2.MD5算法

在UDP数据报中,只能通过CRC算法简单得出数据是否出错,却不能知道数据在哪个地方出错。
而之后不断推陈出新的协议中,开始引入了MD5算法,通过MD5算法,一个错误的数据和正确的数据之间所得出来的校验和相差巨大。可以通过这样的特性来弄清楚数据错误的大致位置。
对于MD5算法,将数据转换成16进制是十分简单的,而还原难度十分大。感兴趣的可以在下面的链接中进行测试。
MD5在线网站


总结

在本文中,对于UDP协议的报文格式有了简单的了解,我们知道了UDP报文格式的内容,那么TCP报文会是什么情况呢?


http://www.ppmy.cn/ops/90021.html

相关文章

C语言之递归函数

文章目录 🍊自我介绍🍊递归函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好,我是小珑也要变强(也是小珑&…

CSS学习 02 利用鼠标悬停制造按钮边框的渐变方向变化

效果 页面背景为深灰色,使用Karla字体。容器内的按钮居中显示,按钮有一个彩色渐变的边框。按钮的背景为黑色,文字为浅灰色。当鼠标悬停在按钮边框上时,边框的渐变方向变化,按钮文字变为白色,并且按钮内边距…

linux查看nginx服务器访问量排在前10位的IP地址

方法: cat /var/log/nginx/access.log | awk {print $1} | sort | uniq -c | sort -nr |head -n10 [rootlogstash nginx]# cat /var/log/nginx/access.log | awk {print $1} | sort | uniq -c | sort -nr |head -n1019 192.168.10.1 [rootlogstash nginx]#

Gazebo之Actors简介

Gazebo之Actors简介 1. 源由2. Actors简介3. Skeleton3.1 Skin3.2 Animation 4. Scripted trajectory4.1 脚本参数4.2 轨迹移动 5. 简单测试6. 参考资料 1. 源由 在仿真环境添加角色(人、物等),并为之创建脚本动画,可以使得模拟更加贴合实际应用场景&am…

Centos8搭建npm和maven的nexus私服

nexus私服部署需要依赖JDK,故首先在服务器上部署JDK。 JDK 8 的安装教程 1. 下载安装包 官网下载: Java Archive 注: 官网下载需要注册 Oracle 账户并登录。 2. 安装 将下载下来的tar包上传到服务器上,示例为上传到服务器的/…

PyTorch乐器声音音频识别应用

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 乐器声音音频识别对实现自动化乐理分析、音乐信息检索和音频内容识别等应用具有重要意义。乐器声音音频识别是指通过对乐器演奏或录制的音频进行分析,自动判断出音频中所使用的乐器种类。这对于音乐家、音乐学者…

sqlilab本地靶场注入less-1~less-6

如何通过information_schema数据库查表名,列名 首先要了解mysql和mariadb数据库默认自带的tables有哪些: mariadb自带数据库 information_schema performance_schema mysql MySQL自带数据库 information_schema performance_schema mysql…

优化Apache Kylin性能:从调优到高效查询

优化Apache Kylin性能:从调优到高效查询 Apache Kylin 是一个开源的分布式分析引擎,能够提供超高速的查询能力,特别适用于大规模数据集上的多维分析(OLAP)。优化Kylin的性能对于确保其在大数据环境下的高效运行至关重…