UDP : User Datagram Protocol
程序发送数据给 UDP socket,数据先被封装成 UDP数据包,然后又被封装成IP数据包,然后被发送到目标方。数据是否被正确传输无任何保证(是否到达目标方,是否按正确顺序到达,是否目标方只收到一份数据)。
每个UDP数据包都有长度,这个长度包含在数据包中发送给目标方。
UDP提供无连接的服务,UDP的client和serve不用保持一个长时间的连接。一个UDP client可以建立一个socket发一个数据包到一个server,然后马上可以用同一个socket发数据给另一个server。同样一个UDP server可以用同一个socket接收多个数据包,每一个都来自不同的client。
Output
application----------------------------------------------->UDP--------------------------------------------------->IP--------------------------------------------->datalink
application buffer( any size )-------------------->UDP datagram------------------------------>MTU-sized IPv4/IPv6 packets-------->
UDP没有send buffer,通过SO_SNDBUF option 可以设置UDP可写到socket的数据包的最大尺寸。如要数据大于这个限制,EMSGSIZE返回。
TCP按照规将send buffer的数据发送出去。peer TCP必须确认数据,并且在没有收到确认前必须存在数据的一个copy。
UDP发送前加上8字节的头,然后发送给IP。IP加上IP头,查找路由表,发送数据到datalink。每个datalink都有一个传输队列,如果己满,一个错误产生。