UDP和TCP协议报文格式详解

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

目录

[一, 传输层的作用](#一, 传输层的作用)

[二, UDP](#二, UDP)

1,UDP协议的特点

2,UDP报文格式

[三, TCP](#三, TCP)

1,TCP协议的特点

2,TCP报文格式

[四, UDP和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可以用于广播;
相关推荐
孤寂大仙v1 分钟前
【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、
网络协议·tcp/ip·计算机网络
江南忆1 小时前
微信wx://和支付宝alipays://协议格式详解
网络协议
fareast_mzh2 小时前
How API Gateways handle raw TCP packets
网络·网络协议·tcp/ip
ikkkkkkkl13 小时前
可靠数据传输原理
网络协议·tcp/ip
观音山保我别报错16 小时前
TCP协议
网络·网络协议·tcp/ip
嵌入式学习菌17 小时前
mqtt协议连接阿里云平台
物联网·网络协议·阿里云·云计算
前进的程序员19 小时前
ZigBee 协议:开启物联网低功耗通信新时代
网络协议·zigbee
老六ip加速器20 小时前
不同电脑同一个网络ip地址一样吗?如何更改
网络·tcp/ip·电脑
小王努力学编程21 小时前
【Linux网络编程】传输层协议TCP,UDP
linux·网络·c++·udp·tcp
s_little_monster1 天前
【Linux】网络--传输层--深入理解TCP协议
linux·运维·经验分享·笔记·网络协议·学习·tcp/ip