• UDP和TCP协议报文格式详解


    在初识网络原理(初识网络原理_蜡笔小心眼子!的博客-CSDN博客)这篇博客中,我们简单的了解了一下TCP/IP五层网络模型,这篇博客将详细的学习一下五层网络模型中传输层的两个著名协议:UDP和TCP

    目录

    一, 传输层的作用

    二, UDP

    1,UDP协议的特点

    2,UDP报文格式

    三, TCP

    1,TCP协议的特点

    2,TCP报文格式

    四, UDP和TCP的对比


    一, 传输层的作用

    传输层主要解决的是端对端的数据传输,所以该层的协议会包含端口号这样的信息(目的端口和源端口),端口绑定的是一个主机上的某一程序的,这样在进行数据传输的时候才知道被哪个应用程序接收(注意:一个端口号只能被一个应用程序绑定,但是一个应用程序可以对应多个端口号),端口号的取值范围是0-65535,其中0-1023这个范围的端口被称为"知名端口号/具名端口号",这些端口号已经分配给了一些知名且广泛使用的应用程序了,所以我们在写代码时,不建议使用这个范围内的端口号.

    二, UDP

    1,UDP协议的特点

    无连接通信双方不需要建立对彼此的连接就可以进行数据传输
    不可靠传输UDP协议没有相应的机制可以检验数据是否安全到达对端
    面向数据报数据传输都是以一个完整的数据报为单位
    全双工通信双方既可以接收数据也可以发送数据

    2,UDP报文格式

    我们在研究一个协议的时候,主要是参考该协议的报文结构,观察报文有哪些部分组成,这样才可以更好的理解该协议的工作原理:

    任何一个计算机网络的教科书对于UDP协议的报文结构的画图方式都是如此,因为书本为了排版方便,实际上的的报文结构应该如下:

    UDP报文结构由UDP报头和UDP载荷两部分构成,UDP报头由源端口,目的端口,UDP报文长度和校验和构成,其中每个部分占2个字节,共8个字节.

    • 源端口:表示发送方所绑定的进程
    • 目的端口:接收方所绑定的进程
    • UDP报文长度:表示UDP报文的长度是2个字节,共64kb
    • 检验和:主要用来校验接收的数据是否是发送方传输的数据

    注意:

    1,如果应用层数据报超过64kb该怎么办?

    应用层数据报如果超过64kb(即两个字节),有两种解决办法:1.需要在应用层通过代码的方式针对数据报进行拆分,拆成多个包进行传输,此时需要send多次,没进行一次send就会多一次数据封装分用的过程,故开销较大,一般不采用此方法;2.不用UDP协议,采用TCP协议,TCP没有对传输数据的大小进行限制.

    2,校验和是如何进行校验的?

    校验和用来检验传输的数据是否正确,因为网络传输的过程中,可能会受到一些干扰,造成"比特翻转"的情况(0011变成0010),这样可能会带来不可预估的灾难,同时这种现象是客观存在且不可避免的,因此校验的作用是尤为重要的,主要的工作原理如下:

    如果内容相同,得到的校验和一定相同;但是计算得到的校验和相同,内容不一定相同,但是这种情况理论上很少出现,所以忽略不计.

    三, TCP

    1,TCP协议的特点

    有连接通信双方需要先建立对彼此的连接才可以进行数据传输
    可靠传输TCP协议有相应的机制可以检验数据是否安全到达对端
    面向字节流数据传输都是以一个字节一个字节为单位
    全双工通信双方既可以接收数据也可以发送数据

    2,TCP报文格式

    • 源端口,目的端口和校验和同UDP,不作赘述
    • 4位首部长度:一个TCP报头长度是可变的,首部长度的单位不是字节,而是4个字节,如果首部长度值是5,那么整个报文的长度就是20个字节
    • 选项:选项相当于对TCP报文的一些属性进行解释说明的
    • 保留位:保留位是为了开发的可扩展性考虑的,这个功能暂时可能不需要,但是保不齐以后会用到,这样就可以使用保留位的存储空间对程序进行扩展了,代价较小
    • 序号,确认序号和窗口大小后续在讲解TCP机制的时候再详细介绍

    四, UDP和TCP的对比

    TCP与UDP的主要区别就是TCP是可靠连接,但是并不是说明TCP就是优于UDP,UDP在不考虑网络环境或者在局域网内,通常效率更高,因为UDP没有一系列的机制来控制数据的传输:

    • TCP用于可靠传输的情况,应用于文件传输,重要状态更新等场景;
    • UDP用于对高速传输和实时性要求较高的通信领域,例如,早期的QQ,视频传输等。另外UDP可以用于广播;
  • 相关阅读:
    【数据结构】时间复杂度和空间复杂度
    golang 关于别名
    【Java】lambda表达式,Stream API,函数式编程接口
    【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测
    查看和修改自己的git提交时的作者信息
    Linux 性能调优之硬件资源监控
    第四十章 构建数据库应用程序 - 绑定到属性
    easyswoole学习记录
    100道Java高频面试题(阿里面试官整理)
    用动态规划算法均分纸牌
  • 原文地址:https://blog.csdn.net/qq_47908816/article/details/132653324