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

系列文章目录

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

相关推荐
StayInLove3 分钟前
G1垃圾回收器日志详解
java·开发语言
对许7 分钟前
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
java·log4j
道法自然04028 分钟前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
无尽的大道11 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒14 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~18 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
小鑫记得努力20 分钟前
Java类和对象(下篇)
java
binishuaio23 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE25 分钟前
【Java SE】StringBuffer
java·开发语言
老友@25 分钟前
aspose如何获取PPT放映页“切换”的“持续时间”值
java·powerpoint·aspose