目录
面向字节流:提供字节流传输服务——有序、可靠、基于连接、双向的一种以字节为单位进行的传输方式
一、UDP协议
1.UDP协议实现
详细介绍:
- 16位源端端口 + 16位对端端口:用于标识进程,描述主机上的通信两端进程
- 16位数据报长度:用于描述一个完整包含头部的UDP报文长度所能存放的最大大小是65535,也就要求一个UDP报文大小必须小于64k(因为UDP报头长度是8字节,因此要求sendto发送的数据大小必须小于64k-8)
- 16位校验和:采用二进制反码求和算法,校验接收到的数据与对方发送的数据是否一致
- 二进制反码求和算法:发送方最初校验和字段设置为0,然后将报文从起始处每个字节取反相加,多出16位的部分截断取出来对低16位相加,最终得到一个校验和的值,填充到校验和字段
- 接收方接收到数据以后,从起始处反码求和,最终能得到0表示数据一致,非0表示数据不一致
2.UDP的特点
无连接、不可靠、面向数据报
无连接:知道对端IP地址和端口号就直接进行传输,不需要建立连接
不可靠:不保证数据有序传达,不保证数据安全到达(没有丢包检测机制和数据排序机制)
面向数据报:描述的是一种有最大固定长度限制的传输方式
3.编程影响
- 如果传输的数据比较大,则需要程序员在应用层进行分包操作(将大数据分成多个小数据进行传输)
- 如果进行了分包操作,则需要程序员在应用层进行包序管理(应用层协议头中定义当前的包序)
- 数据报传输发送数据时,数据直接封装头部进行发送,接收方UDP向上层交付数据时是整条交付(不会交付半条或多条),因此,recvfrom接收数据缓冲区空间必须给的足够大,能够放下一整条完整的数据
额外优点:因为无连接,因此UDP支持局域网广播传输(将数据发送给局域网广播地址,则表示将数据发送给局域网中所有主机)
二、TCP协议
1.TCP协议实现
- 16位源端口号 + 16位目的端口号:描述通信两端
- 32位序号 + 32位确认序号:实现TCP传输的包序管理以及确认应答
- 4位头部长度:以4字节为单位表示TCP报头最大长度为60字节,最小固定20字节,先取出20固定头部长度,根据头部中的头长,取出剩余长度选项数据,剩下的就是要交付的数据
- 6位标志位:
- URG:紧急指针是否有效
- ACK:确认号是否有效</