TCP/IP协议---UDP协议总结

一、TCP/IP协议栈

首先我们来了解一下什么是协议

1、协议

网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议(protocol),它最终体现为在网络上传输的数据包的格式。

2、TCP/IP协议栈

TCP/IP协议栈主要有四部分构成:应用层、传输层、网络层和数据链路层,每一层都有相应的协议。
如下图所示:
这里写图片描述
其中TCP、UDP协议就位于传输层.
在Linux 操作系统中,当我们想发送数据的时候,我们只需要在上层准备好数据,然后提交给内核协议栈 , 内核协议栈自动添加相应的协议头。

二、UDP协议

1、认识UDP协议

UDP 是面向数据报的传输层协议(TCP是面向字节流的协议)。面向报文的传输方式是指应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。
因为UDP协议不提供错误更正、重复消除、流量控制、拥塞控制。 所以UDP协议是一种不可靠、无连接的传输层协议。

2、UDP协议特点

(1)UDP协议是一种无连接的、不可靠的传输层协议

理解该特点需要注意以下:
(1)UDP协议在传输报文之前不需要在通信双方建立连接,因此减少了协议开销与传输延迟。
(2)UDP协议对报文提供了一种可选的校验和之外,几乎没有提供其他的保证数据传输可靠性的措施
(3)如果UDP协议检测出收到的分组出错,他就丢弃这个分组,既不确认,也不通知发送端和要求重传。

(2)UDP协议是一种面向报文的传输协议

如下图描述了UDP对应用程序提交数据的处理方式:
这里写图片描述
UDP协议对于应用层提交的程序添加了UDP报头,然后向下提交给IP层。UDP协议对应用程序提交的报文既不合并也不拆分,而是保留原报文的长度和格式,所以在使用UDP协议时,应用程序必须选择合适长度的报文。

3、UDP协议报文格式

这里写图片描述
主要字段如下:

字段说明
源端口号和目的端口号均为16位;源端口号表示发送端进程端口号,目的端口号表示接收端进程端口号
UDP总长度长度字段大小也为16位,他定义了包括报头在内的用户数据报的总长度。最大长度是65535(2^16-1)字节,最小是8字节(固定长度)
校验和UDP校验和是可选的,如果应用进程对通信效率的要求高于可靠性要求,应用进程可选择不使用校验和。

所以报文数据长度=总长度-报头长度

4、UDP服务器端和客户端通信流程图

关于UDP通信与套接字的相关知识,现在让我们用流程图对UDP建立通信过程有一个更加直观的理解:
这里写图片描述

5、UDP缓冲区

UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进 行后续的传输动作; UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一 致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃; UDP的socket既能读, 也能写, 这个概念叫做 全双工

6、UDP使用注意事项

我们注意到, UDP协议⾸首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含 UDP⾸首部). 然而64K在当今的互联网环境下, 是一个非常小的数字. 如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;

7、基于UDP的应用层协议

NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP: 启动协议(用于无盘设备启动)
当然, 也包括你自己写UDP程序时自定义的应用层协议;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值