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

系列文章目录

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报文会是什么情况呢?

相关推荐
夏幻灵3 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码3 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
不像程序员的程序媛4 小时前
检测网络的命令mtr详解
网络
天启HTTP5 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
bkspiderx5 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
代码什么用5 小时前
Spring基础使用
java·后端·spring
程序员老陆5 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
运维行者_5 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
沐晓时光5 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
Su米苏5 小时前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring