一:
UDP协议:允许发送0字节
UDP头部:8字节 包括:源端口号、目的端口号、长度、校验和 都为2字节
UDP数据:变长
理论上,一个IPV4数据报的最大长度是65535字节,这由IPV4头部的16位总长度字段决定
除去20字节的IPV4头部和UDP头部8字节 数据最大长度就是65507字节
实际上:UDP属于传输层,由下至上来看:
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.
这个1500字节是链路层的最大传输单元.
但这并不是指链路层的长度被限制在1500字节,其实这这个最大传输单元指的是链路层的数据区.
并不包括链路层的首部和尾部的18个字节.
所以,事实上,这个1500字节就是网络层IP数据报的长度限制.
因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节.
而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的.
又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节.
这个1472字节就是我们可以使用的字节数。
二:
TCP协议:头部比UDP更加复杂 是因为TCP明显是一个更复杂的协议,必须保持连接的每一端知道最新状态
TCP头部:20字节 源、目的端口号各16位 32位序号 32位确认序号
首部长度:
标志位:6位 ACK SYN RST FIN URG PSH
窗口大小:16位
校验和16位:
紧急指针16位:只有当URG为1是 紧急指针才有效
TCP数据:可选
三:TCP与UDP:
(1)TCP:面向连接的可靠的流式服务
send是将数据拷贝到套接字的发送缓冲区中,recv也是把套接字的接收缓冲区中的数据拷到buff中
将send的都放到发送缓冲区中,实际每次在发送时的数据长度与send拷贝时的长度可能相同也可能不同
recv拿出来的时候也是 取决于recv接受的buff的长度
发送端执行的写操作次数和接收端执行的读的次数之间没有任何数量关系,
这就是字节流的概念:应用程序对数据的发送和接收是没有边界限制的
适用于文件传输 可靠
recv=0代表对方关闭链接 与管道相似
(2)UDP:无连接不可靠的数据报服务
整个的数据报包在网络中发送 将数据打包发送 发送多少如果可以接收到 接收到的就是完整的
如果对端没有足够的应用程序缓冲区接收就会直接截断
不建立连接可以短歌客户端同时发送数据
适合视频通话之类 丢失就丢失 不会再重传
(3)TCP与UDP端口服务类型不同所以可以共用一个端口