运输层是通信的最高层,再上面就是进程。运输层通过端口和进程通信。
运输层的两端用插口(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、求出的结果再取反码,就是检验和。