传输层 和 UDP协议
传输层
传输层的功能,是提供进程之间的端到端的逻辑通信。
- 首先是提供的是进程之间的通信,这有区别与网络层的提供主机之间的逻辑通信,同样先不考虑逻辑二字,这里的主机可以理解为主机的IP地址,也就说网络层认为通信的端点是两个或者多个IP地址,但是传输层认为通信的两个或者多个端点是进程,进程是存在于应用层的概念,是实实在在的软件实体,所以传输层给进程或者(应用层的)感觉就是直接将信号交付给传输层就可以有一个直接的链路通向目的进程。
- 其次,实际情况是,直接搭建在两个传输层之间的通信链路是不存在的,是靠下层的网络层,链路层分层实现的,所以这只是一个假象的逻辑链路方便理解而抽象出来的,所以是一个逻辑通信。同样,传输层为网络层提供逻辑通信,意思也是对于传输层的协议(TCP,UDP)来讲,网络层似乎存在一个直接通向目的主机的一条直接物理通信链路,但是这又是不存在的。
- 最后,没有端到端的修饰词,是因为传输层中有UDP协议和TCP协议,UDP既可以提供端到端的,也可以提供多到一,一到多,多到多的通信,而TCP只可以提供端到端,即一对一的通信。
传输层要解决的事情:
- 解决下层未解决的,提供可靠通信,由于网络层提供的是尽最大努力的交付功能,而不是完全可靠的传输,所以出现了TCP。即使这样,传输层也可以提供不可靠的通信,这可以再上交给应用层来解决,这就是UDP,上层应用层可以使用校验和和重传技术来保证可靠。
- 一个主机上的进程许许多多,传输层的协议要实现分用和复用的功能。因为许多进程要同时工作,所以要互相区分,但是不可以用进程号,因为进程号的创建和消失都是动态的,而且每次都不清楚系统会分配哪一个进程号给进程,刚开始建立连接时候,发起端不知道要给那个进程号发送建立消息。所以引入了端口号的概念,并且给指定服务指定端口号,这样刚开始建立连接的时候,发起端就知道给哪一个端口号发送消息。
UDP协议:
UDP全程是 User Datagram Protocol ,用户数据报协议。
1)无连接的 ,最大可能交付,可靠传输的服务就交给应用层了,或者就不采用可靠传输 2)首部开销小,源和目的端口号,占四个字节,报文长度占两个字节,校验和占两个字节 3)没有拥塞控制 4)是报文段为单位发送的,无论应用层传下来的报文段多么长,都一次性封装发送 5)支持一对一,一对多,多对一,多对多。
UDP头部:
UDP头部中的校验和除了校验自身数据之外(报文数据加头部)另外还有一个伪头部。伪头部的内容是4个字节的源IP,4个字节的目的IP,1个字节的全0,1个字节的协议号,2个字节的UDP长度。其中1个字节的协议号17,是在IP分组的头部规定的1个字节,规定:
TCP | UDP | OSPF | ICMP | … |
---|---|---|---|---|
6 | 17 | 89 | 1 | … |
IP分组的协议字段
设想发送端应用层程序在应用层利用TCP协议发送文件给目的主机,在网络层IP分组的包头协议字段是6,但是在中间路由的时候,路由器只是做到了网络层,通过由物理层层层拆包,拆到网络层看到目的IP和要交给的协议号,查看路由表分组转发到指定端口在层层添加包头转发,但是路由器会不会看到协议号是6,代表TCP,因为