首页 > 其他分享 >【TCP/IP】UDP协议数据格式和报文格式

【TCP/IP】UDP协议数据格式和报文格式

时间:2024-08-18 23:26:01浏览次数:14  
标签:UDP 报文格式 IP 校验 传输 长度 数据格式 数据

学习一个网络协议,主要就是学习“数据格式”/“报文格式
image.png

源端口/目的端口

  • 端口号是属于传输层的概念
  • UDP 报头使用两个自己的长度来表示端口号
  • 之所以端口号的范围是 0~65535,是因为底层网络协议做出了强制要求
  • 如果使用一个 10 w 这样的端口,就会在系统底层被“截断”
  • UDP 并不关心后面的正文里面是什么数据,只需要关心报头里面是怎么组织的
  • 报头里面分为四个部分,每个部分固定是两个字节(16 bit),里面没有分隔符,就是通过固定长度来进行区分的

网络通信中,涉及到四个关键信息:源 IP/目的 IP源端口/目的端口

  • 源端口:发出数据报那个程序使用的端口号——>发件人电话
  • 目的端口:接受这个数据报的程序使用的端口号——>收件人电话
  • 源 IP:发出数据报那个程序的 IP——>发件人地址
  • 目的 IP:接受这个数据报的程序的 IP——>收件人地址

UDP报文长度

UDP报文长度:报头长度 + 载荷长度

  • 长度单位是字节,
  • 比如,报文长度 1024,——>整个 UDP 数据报就是 1024 字节;由于是两个字节来表示这个长度,所以最大值 65535——64 KB(65536/1024)
  • 64 KB 放在今天,是个很小的数字,所以如果使用 UDP 协议传输一个很大的数据,就会变得很麻烦

UDP 用了好多年,一直挺好用,但随着业务的发展,广告越来越多,越来越复杂,导致一个网络响应数据报的体积越来越大,逐渐逼近 64 KB。一旦数据超过了 64 KB,就可能到值数据被截断,这样广告可能就无法正常显示了。对于这样的情况,有两个解决方案:

  1. 把一个大的数据报,拆分成多个,分别进行传输
    • 很快就被否决了;因为实现分包、组包的过程非常复杂,充满了不确定性
  2. 直接使用 TCP
    • TCP 对于长度没有限制,其自身也带有可靠传输这样的机制,对于整体的通信质量来说也是有利的
    • 代码的修改成本比较低

校验和

前提:网络传输过程中,非常容易出现错误

  • 电信号/光信号/电磁波——>收到环境的干扰,使里面传输的信号发生改变

校验和存在的目的,就是为了能够“发现”或者“纠正”这里的错误。就可以给传输的数据中,引入“额外信息”,用来发现/纠正传输数据的错误

  • 这里的额外信息就是 checksum
  • 如果只是发现错误,需要携带的额外信息,就可以少一些(发现就会丢弃掉,不会让对方重发)
  • 如果是想要纠正错误,携带的额外信息就要更多(消耗更多带宽)

举个例子:你妈让你去买菜,西红柿、鸡蛋、茄子、晃过,最后补充一句“一共四样”

  • 这里的“一共四样”起到的作用就相当于是“校验和”。通过“一共四样”你可以对手里的菜进行检查,有没有买多、买少

但这样的“校验和”并不能准确的识别出问题,而且容易误判。所以我们希望校验和可以更严格地检查数据的内容,可以结合内容/内容的片段来生成校验和

  • 比如你在默写金庸先生的十五部作品的名称,写完后,你可以通过“飞雪连天射白鹿,笑书神侠倚碧鸳”这一幅对联和你写的书名的第一个字对一下,若能对象,就说名此处的名字都是正确的
  • 这样的校验和就是基于内容来进行校验的
  • 虽然出错的数据恰好没有被校验出来,这可情况也是可能会发生的
  • 但是一个良好的校验和算法,可以让上述问题发生的可能性非常低

CRC 校验和(循环冗余校验)

把 UDP 数据报整个数据都进行遍历,分别取出每个字节,往一个两个字节的变量上进行累加

  • 由于整个数据可能会很多,所以加着加着可能就结果溢出了,但溢出也没关系
  • 我们重点关心的不是最终加和是多少,而是校验和结果是否会在传输中发生改变

例如:我们去传输一个 UDP 数据报

  • 发送方整合整个 UDP 数据,基于这些数据,计算得到一个 checksum1
  • 接收方收到的数据:
    1. 数据的内容
    2. 校验和 checksum1
    • 接收方就可以根据数据的内容,按照同样的算法,再算一遍校验和,得到 checksum2
  • 如果传输的数据在网络通信过程中,没有发生任何改变,则一定有 checksum1 == checksum2

MD5 算法

本质上是一个“字符串 hash 算法”
特点

  1. 定长:无论输入的字符串长度多长,算出的 MD5 的结果都是固定长度——>适合做校验和算法
  2. 分散:输入的字符串哪怕只有一点点发生改变,得到的 MD5 的值都会相差很大——>适合做 hash 算法
  3. 不可逆:根据输入内容,计算 MD5 非常简单,但是如果想通过 MD5 值还原出原始的内容,理论上是不可行——>适合作为加密算法

标签:UDP,报文格式,IP,校验,传输,长度,数据格式,数据
From: https://blog.csdn.net/Yeeear/article/details/141307412

相关文章

  • 浅谈TCP协议、UDP协议
    一、介绍说明TCP(传输控制协议)面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。可靠性:TCP提供可靠的数据传输,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送这些数据包......
  • TCP/UDP网络聊天室
        本博客仅对网络聊天室项目进行分享,仅供学习讨论使用,欢迎大家讨论。UDP网络聊天室项目要求        利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件,服务器也可以自己发送通知给所有客户端。  ......
  • 【网络】UDP回显服务器和客户端的构造,以及连接流程
    回显服务器(EchoServer)最简单的客户端服务器程序,不涉及到业务流程,只是对与API的用法做演示客户端发送什么样的请求,服务器就返回什么样的响应,没有任何业务逻辑,没有进行任何计算或者处理0.构造方法网络编程必须要使用网卡,就需要用到Socket对象创建一个DatagramS......
  • 第六章 网络互连与互联网(五):TCP 和 UDP 协议
    五、TCP和UDP协议在TCP/IP协议簇中有两个传输协议,即传输控制协议(TCP)和用户数据报协议(UDP)。TCP是面向连接的,而UDP是无连接的。1、TCP服务(1)TCP协议提供面向连接的、可靠的传输服务,适用于各种可靠的或不可靠的网络。(2)TCP用户送来的是字节流形式的数据,这些数据缓存......
  • Python 通过UDP传输超过64k的信息
    在UDP中,单个数据包的最大尺寸通常受到网络层的限制,这通常被称为最大传输单元(MTU)。在以太网环境中,标准的MTU大小通常为1500字节。尽管有些网络环境可能支持更大的数据包,但是UDP数据包的理论最大限制是65535字节(64KB),这是由于UDP头部的16位长度字段决定的。然而,如果你需要发送超过这......
  • 时间数据格式出现time data does not match format valueError
    合并文件夹中多个文件数据后,出现ValueError:timedata'19970004'doesnotmatchformat'%Y%m%d'(match)首先,应该查看数据,是数据是否格式正确,我的错误来源于将多个文件合并后,多行标题也在不同的位置进行合并,导致本应该是数据的一行成为了标题行解决方法1:查看数据是否存在......
  • udp和arp之间的交互作用
    udp和arp之间的交互作用arp-a验证arp告诉缓存是空的sock-u-i-nl-w8192svr4discard1.在第一个arp应答返回以前,总共产生了6个arp请求。2.在接收到第一个arp应答时(第7行),只发送最后一个数据报片(第9行)3.在大多数的现实中,在等待一个arp应答时,只将最后一个报文发送给特定目标......
  • udp介绍
    1.udp介绍udp是一个简单的面向数据报的运输层协议,进程的每个输出操作都正好产生一个udp数据报,并组装成一份待发送的ip数据包,这与面向流字符的协议不同,如tcp,应用程序产生的全体数据与真正发送的单个ip数据报可能没有什么联系。udp不提供可靠性:它把应用程序传给ip层的数据发送出......
  • 0229-UDP 发送和接收
    环境Time2022-11-25WSL-Ubuntu22.04Rust1.65.0前言说明参考:https://doc.rust-lang.org/std/net/struct.UdpSocket.html目标之前通过接收整个IP和UDP报文来实现了通信,这里去除报文头的细节,直接通信。main.rsUDP由标准库直接支持,可以直接使用。将发送过来的信......
  • 0226-UDP 请求报文
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0tun-tap0.1.3前言说明参考:https://docs.rs/pnet/latest/pnet/index.htmlRFC792目标了解UDP协议的的字段。从这里开始,将进入第四层,传输层协议。UDP协议基于IP协议。配置TUNIP地址不要和主机的......