TCP/UDP:
一、什么是TCP/UDP协议
1、回顾一下IP和端口号:
- IP:标识网络上的唯一主机
- port端口号:标识主机上的唯一进程
- IP+port端口号:标识网络上的唯一主机上的唯一进程
- 端(IP+port)对端(IP+port):四个信息标识唯一的一个端对端通信------->四元组
- 四元组+协议(TCP/UDP协议)=五元组:在TCP/IP协议栈内部用来标识传输层上的唯一一个端对端通信
2、TCP/UDP协议是什么?
TCP和UDP协议是TCP/IP协议的核心。TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。
- TCP协议: TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;
- UDP协议:UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。
接下来将对两大协议进行详细讲解。
二、UDP协议
1、UDP协议的特点
- 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接;只是发送数据,具体发送到了没有或者时服务器是否有响应,一概不管。
- 不可靠: 没有确认机制,没有重传机制:如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;
- 面向数据报: 不能够灵活的控制读写数据的次数和数量。
针对无连接和不可靠的特点,我们主要对比TCP来理解。
2、UDP协议段格式
由上图可以看出,UDP数据由header(UDP首部)和UDP数据部分组成;Header部分为8字节,也就是64比特位。
3、UDP数据的封装:
由上图可以看出:UDP数据的封装就是应用层的数据+UDP的首部,就包装成了UDP数据。
Header中的数据主要作用是:1>解包; 2>分用; 3>内部使用
4、UDP数据的分用
当对UDP数据进行分用的时候,应该从什么地方进行切割呢?切割多大长度呢?
我们知道,UDP数据的Header部分是将应用层数据封装成UDP数据的,所以在解包的时候应该将Header和应用层数据之间切割。所以应该切割8字节(Header部分)。
在分用的时候,是谁对数据进行分用呢?
在UDP数据Header中,有四元组信息,其中的目的端口已经唯一确定了某一进程,所以目的端口对应的进程来分用数据。
5、UDP数据的校验和机制(Checksum)
校验和机制: 利用Hash做数据正确性验证,也叫数据签名。
校验和不对的情况下,就直接丢包。在我们用户的角度就可能是平时见到的卡(应用层)或者是没有接收到消息。
6、UDP数据的缓冲区
UDP没有发送缓冲区,但有接收缓冲区。
我们以发送包裹为例,阐述一下缓冲区问题,见下图。
UDP使用注意事项:
我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部).
然而64K在当今的互联网环境下, 是一个非常小的数字。如果我们需要传输的数据超64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;
应用层分包:
比如:如果一个聊天应用使用的是UDP协议,UDP一个数据报文最多发送50个字,但是我却要发送180个字,这个时候应用层就需要把这180个字分四次发送。
三、TCP
有关TCP的介绍请看下一篇博客,文章链接: TCP.