运输层-UDP

运输层是通信的最高层,再上面就是进程。运输层通过端口和进程通信。

运输层的两端用插口(socket)标记。插口:IP地址+端口号。标记了IP和端口,通信才不会混乱。

netstat显示出来的socket就是这个。

UDP

UDP不使用拥塞控制,但其上层的应用层会提供措施来避免拥塞,如队列(栈)。

UDP和进程的通信使用入队列和出队列方式。入队列负责接收,而出队列负责发送。

如出队列满了,则暂停发送,如入队列满了,则丢弃后面的数据。这样也就起到了流控的作用。

使用两个队列是由于服务器和客户端使用不同的端口。所以要用不同的队列负责接收和发送。

UDP格式

伪首部|源端口|目的端口|长度|检验和

     |

源IP—目的IP—1B的0填充—IP的协议字段17—UDP长度

伪首部:不存在,但是计算检验和的时候要用到。

端口号:用16bit标记,所以总共有65535个端口号。

长度:整个UDP长度(UDP首部+数据部分)

检验和:将整个UDP一起检验。

检验和算法:

1、检验和用0填充

2、UDP数据字段如不是4B的倍数也用0填充

3、按16bit一行排列。

4、由右向左按反码求和逐列计算。0+0=0;0+1=1;1+1=0但是产生进位1加到下一列。

5、求出的结果再取反码,就是检验和。