UDP协议
协议格式:
16位源端端口以及16位对端端口:描述通信两端;
16位数据报长度:描述报文长度(包括头部),解决粘包问题,限制UDP报文必须小于64K;
sendto最多发送64K-8(报文头部占8个字节);
16位校验和:用于校验接收到的数据是否与对方发送的数据一致(二进制反码求和算法);
协议特性:
无连接,不可靠,面向数据报;
无连接:通信的时候不需要建立连接,知道对方地址即可;
不可靠:不保证数据能够安全到达对端,也不保证有序到达对端;
面向数据报:无连接,不可靠,有固定最大长度限度的传输方式(小于64K);
编程影响:
①UDP有可能会丢包,且不保证有序到达对端,需要程序员在应用层进行丢包检测、丢包重传以及包序管理;
②UDP要求数据整条传输交付,不能半条或多条,要求recvfrom接收数据时缓冲区足够大;
TCP协议
协议格式:
16位源端端口以及16位对端端口:描述通信两端;
32位序号:告诉接收端,这条数据在整体数据中的排序,根据接收信号进行排序;
32位确认序号:向发送端确认,确认序号之前的数据都已经收到了;
4位头部长度:以4节为单位描述TCP报文头部长度,最长为60字节,最小为20字节(上图前五行的固定长度为20字节);
6位保留:未使用的区域;
6位标志位:FIN(表示关闭连接,只表示不再给对方发送数据),SYN(表示当前的数据是连接建立请求数据),RST(重置链接),PUSH(提示接收端应用程序立刻从TCP缓冲区把数据读走),ACK(确认应答),URG(紧急指针有效位);
16位窗口大小:用于实现滑动窗口机制进行流量控制;
16位校验和:用于校验接收到的数据是否与对方发送的数据一致(二进制反码求和算法);
16位紧急指针:指向带外优先数据的结束位置;
0~40字节选项数据:通常为额外的协商信息
协议特性:
面向连接,可靠传输,提供字节流传输服务;