传输层主要的协议有TCP和UDP
传输层协议主要为主机内部程序提供传输服务,而网络层协议是为两台主机提供传输服务
UDP不可靠无连接的服务(不能保证一个进程所发送的数据能够完整无缺的(全部)到达目的进程)
TCP可靠面向连接的服务
IP尽力而为的交付服务也是不可靠服务
多路复用指在运输层封装套接字绑定的端口信息,多路分解则相反,分解收到的数据报,得到对应套接字绑定的端口。
多路复用在源主机从不同套接字中收集数据库,为每个数据块封装首部信息,从而生成报文段,并将报文段传递到网络层
多路复用的要求
1套接字有唯一标识符
2每个报文段有特殊字段来指示该报文段所要交付到的套接字(特殊字段应该就是指对应的源端口号)
端口号从0-65535,0-1024是系统内部使用的,如80端口443端口都是有特殊用途的。最好不要使用
多路分解将运输层报文段中的数据交付到正确的套接字的工作
UDP只是做了运输协议能够做的最少的工作。除了复用/分解功能及少量的差错检测外,几乎没有对IP添加别的东西。
UDP相较于TCP的优点
1关于何时,发送什么数据的应用层控制更为精细(因为没做什么工作,就交付到下层服务了,所以花的时间少,控制就更精细)
2无需建立连接,没有建立时延
3无连接状态
4分组首部开销小 TCP20个首部字节,UDP8个首部字节
如果要让UDP实现可靠数据传输,需要程序自身建立可靠性机制。
差错检验
接收方反馈 肯定确认ACK,否定确认NAK
重传
回退N步协议(GBN)
如果发现分组有失序,把之后的分组都丢弃,让发送方重发
选择重传