计算机网络5——运输层
目录
5.1、运输层的定义
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
传输层的相关定义:
- 传输层的通信:两个主机中的应用进程互相通信。应用进程之间的通信又称为端到端的通信,运输层提供应用进程间的逻辑通信。网络核心部分中的路由器和传输过程只使用下面三层的功能,在主机的协议栈中才有传输层。
- 复用:发送方不同的应用进程可以使用同一个运输层协议传送数据。
- 分用:运输层从IP层收到数据报之后发送给个计算机不同端口的不同应用进程。
5.2、UDP
UDP特点:
- UDP用户数据报只能提供不可靠的交付。
- UDP是无连接的,发送数据之前不需要建立连接,UDP的主机不需要维持复杂的连接状态表。
- UDP使用尽最大努力交付,即不保证可靠交付,也不使用拥塞控制。
- 网络出现的拥塞不会使源主机的发送速率降低,这对某些实时应用是很重要
- UDP是面向报文的。UDP对应用程序交下来的报文不再划分为若干个分组来发送。
- UDP 支持一对一、一对多、多对一和多对多的交互通信。
- 用户数据报只有8个字节的首部开销,比TCP的20个字节的首部要短。
- 使用UDP的常见协议有DNS,RIP,DHCP;
UDP的报文格式:
5.3、TCP
(1)TCP的特点
- TCP是面向连接的运输层协议,每条TCP连接只能有两个端点,TCP 连接只能是点对点的(一对一)。不可能是一对多、多对一或多对多的。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
- TCP面向字节流。
- TCP 报文段首部的前20个字节是固定的。
(2)TCP建立连接
套接字:
由端口和IP地址共同确定一条唯一的TCP连接,只有IP地址和端口不能确定一条TCP连接,一个端口(或IP地址)可以对应多个TCP连接。
为什么TCP连接要进行三次握手?
答:主要是为了防止已失效的连接请求报文突然传送到了服务器(B)端,因而产生错误。失效的连接请求报文来源是,A第一次发送的连接请求报文出现长时间的滞留,导致A没有收到确认报文,于是A发送了第二个连接请求报文,然后与B建立了正确的连接,传输数据后释放连接,此时第一次连接请求报文到达B,于是A会重新建立连接发送确认报文给A,确保是一个有效的连接。所以需要建立三次握手而不是两次。
(3)TCP报文格式
- 源端口和目的端口字段,各占2字节。
- 序号字段占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。
- 确认号字段占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。确认号N,表示N-1之前为止的所有数据都已正确收到。
- 数据偏移,占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位不是字节而是32位字(4 字节为计算单位)。
- 紧急位URG,当 URG 1 时,表明紧急指针字段有效。告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
- 确认位ACK只有当 ACK =1 时确认号字段才有效。当ACK=0时,确认号无效。
- 推送位PSH,接收TCP收到PSH = 1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
- 复位位RST,当 RST=1 时,表明 TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
- 同步位 SYN ,当 SYN = 1 时,表示这是一个连接请求或连接接受报文。
- 终止位FIN,用来释放连接。当 FIN= 1 时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
- 窗口:表明现在允许发送方发送的数据量。
UDP报文分析示例:
(4)TCP可靠传输的实现
流量控制——滑动窗口
TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节,在 TCP 报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。
流量控制:就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。滑动窗口机制可以很方便地在TCP连接上实现流量控制。
拥塞控制——慢增长策略
可靠传输——三次握手,四次报文握手
(1)建立连接
(2)传输数据
(3)释放连接
传输层协议 | TCP(传输控制协议) | UDP(用户数据报协议) |
建立连接 | 传输之前需要建立连接 | 不需要建立连接 |
是否可靠 | 可靠交付 | 尽最大努力交付 |
面向对象 | 面向字节流 (应用层与TCP交互是一次一个数据块) | 面向报文 (应用层传递给UDP什么UDP就一次性发送什么) |
重传 | 重传丢失的数据 | 不负责检查是否丢失数据和重传 |
开销 | 高 | 底 |
传输速率 | 底 | 高 |
适用数据量 | 从少量到几个GB的数据 | 从少量到几百个字节的数据 |