目录
Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是是TCP该协议几乎做了所有的事情。
UDP协议
Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
UDP协议格式
16位源端端口 | 16位对端端口 |
16位数据报长度 | 16位校验和 |
数据 | 数据不超过64K-8(报头长度)字节 |
源端端口和对端端口描述了是哪两个进程之间在进行传输
16位数据报长度:限制了数据长度
16位校验和:利用反码求和算法确保数据发送的准确性
反码求和算法:从第0个字节开始(包含报头)对每个字节取反求和,超出16位的,将高位截断与低16位继续求和。
UDP特性
无连接、不可靠、面向数据报
无连接:udp通信,不需要建立连接,只需要知道对方的地址就能给对方发送数据
不可靠:udp没有任何的丢包检测机制,也没有重传机制和包序管理机制,他不能够确保数据安全、有序到达对端(需要程序员在上层进行设计)
面向数据报:它是一中有最大数据限制的传输方式,整条交付
注意:因为udp是面向数据报的,必须保证sendto发送的数据长度必须小于64k-8个字节
在recvfrom时,给的空间足够大,否则可能接收失败。
udp如何实现可靠传输?
需要程序员在应用层进行处理:
1.包序管理:给每个数据报进行编号
2.进行丢包检测:实现确认应答机制和超时重传机制
TCP协议
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议
协议格式
源端端口和对端端口描述通信两端
32位序号和确认序号实现tcp的包序管理以及确认应答机制
4位报头长度:以4字节为单位,描述tcp的报头长度(0~40字节的选项数据)最大60字节,最小20字节,解析tcp报头时,先取出固定长度20字节,然后根据报头长度-20取出指定的选项数据。
6位保留:暂时没用
6位标志位:用于识别报文类型
URG-紧急指针有效位 |
ACK-确认应答标志位 |
PUSH描述尽快取出报文 |
RST重置连接标志位(服务器收到非法请求或者连接错误) |
SYN-建立连接请求标志位 |