- 是什么
运输层是什么?
运输层在五层协议中,位于网络层之上,应用层之下。从通信和信息处理的角度来看,运输层为应用层提供通信服务,同样的运输层使用网络层提供的通信服务。
- 为什么
网络层通过IP可以将数据从发送端的主机传输到接收端的主机,那么为什么需要运输层?
首先我们要清楚,通信的最终端点是主机吗?数据最终被谁消费了呢?通信的最终端点并不是主机,而是主机中的进程,数据最终被进程所消费。那么网络层通过IP仅仅将数据传输到主机是不够的,所以运输层存在的意义就是将数据传输到指定的进程。
- 怎么做
- 运输层的任务主要是将数据传输到指定的进程,那么有哪些实现?
无连接的UDP、面向连接的TCP。
- 一台主机中往往有多个进程,接收到的数据需要交给哪个进程呢?
- 无连接的用户数据报协议UDP(user datagram protocol)
- UDP是无连接的,即发送数据之前无需建立连接。
- UDP使用尽最大努力交付,即不可靠交付。
- UDP面向报文,将应用层报文添加头部后就直接交给网络层。
- UDP没有拥塞控制,网络阻塞不会导致发送机降低发送速率。
- UDP支持一对一、一对多、多对一、多对多的交互通信。
- UDP首部开销小,仅8字节,TCP20字节。
- 面向连接的传输控制协议TCP(transmission control protocol)
- TCP是面向连接的运输层协议
- 点对点
- 提供可靠交付
- 全双工通信
- 面向字节流
既然TCP是面向连接的,那么连接的建立和释放是如何实现的呢?
- 初始状态:客户端和服务器创建传输控制块,进入监听状态,监听其他主机的连接请求。
- SYN-SEND状态:客户端发送连接请求(SYN=1, seq=x),客户端进入SYN-SEND状态。
- SYN-RECVED状态:服务器接收到连接请求报文,返回确认信息(SYN=1, ACK=1, seq=y,
ack=x+1),服务器进入SYN-RECVED状态。 - ESTABLISHED状态:客户端收到服务器允许连接的回复,客户端进入ESTABLISHED状态,客户端回复确认收的到(ACK=1,seq=x+1, ack=y+1),服务器收到后进入ESTABLISHED状态。
- 连接建立成功。
- 数据传输结束,客户端和服务器的状态全部处于ESTABLISHED状态,任何一方都可以发起连接关闭请求。
- 例如客户端发起关闭请求(FIN=1, seq=u), 客户端进入FIN-WAIT1状态。
- 服务器收到关闭请求,进行答复确认(ACK=1, seq=v, ack=u+1),这是客户端向服务器发送的通道关闭,但是服务端仍然可以向客户端发送数据。
- 客户度收到答复后进入FIN-WAIT2状态,等待服务器发送最终关闭请求(FIN=1, ACK=1, seq=w, ack=u+1)
- 客户度收到服务器最终关闭答复后,发送确认请求(ACK=1, seq=u+1, ack=w+1),服务器接收到答复请求后关闭,客户端等待2个计时周期后关闭。