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

系列文章目录

1、 初识网络

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


文章目录


前言

在前文中,主要对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报文会是什么情况呢?

相关推荐
柯南二号7 分钟前
【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
java·spring boot·mybatis
阿珊和她的猫3 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
万能小锦鲤3 小时前
《软件工程导论》实验报告五 设计建模工具的使用(一)类图
软件工程·类图·实验报告·boardmix·文档资源
fouryears_234176 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~6 小时前
C#---StopWatch类
开发语言·c#
桦说编程7 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen7 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研7 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
没有bug.的程序员8 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋9 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat