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可以用于广播;
相关推荐
今朝无言1 小时前
Tri Mode Ethernet MAC IP核详解
网络·网络协议·tcp/ip·fpga开发
C++忠实粉丝1 小时前
计算机网络socket编程(5)_TCP网络编程实现echo_server
网络·c++·网络协议·tcp/ip·计算机网络·算法
丁总学Java5 小时前
netstat -tuln | grep 27017(显示所有监听状态的 TCP 和 UDP 端口,并且以数字形式显示地址和端口号)
网络协议·tcp/ip·udp
钰爱&7 小时前
【操作系统】Linux之网络编程(TCP)(头歌作业)
linux·网络·tcp/ip
java_heartLake7 小时前
网络协议之UDP
网络·网络协议·udp
_西瓜_8 小时前
可通过HTTP获取远端WWW服务信息
网络·网络协议·安全·http
Tony聊跨境9 小时前
TCP vs UDP:如何选择适合的网络传输协议?
tcp/ip·ip
yaoxin52112310 小时前
第二十九章 TCP 客户端 服务器通信 - 记录的拼接
服务器·网络·tcp/ip
网络安全Ash10 小时前
运维之网络安全抓包—— WireShark 和 tcpdump
网络·网络协议·安全·网络安全
向阳121811 小时前
http 流量接入 Dubbo 后端服务
网络协议·http·dubbo