在初识网络原理(初识网络原理_蜡笔小心眼子!的博客-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可以用于广播;