运输层:为进程之间提供逻辑通信
- 运输层:面向通信部分的最高层,用户功能中的最低层。
- 真正通信的实体是进程。
运输层功能:
- 为运行在不同主机上的应用进程之间提供了逻辑通信
- 复用(transport-layer multiplexing):发送方不同的应用进程可以使用同一个运输层协议通信。
- 分用(demultiplexing):接收方的运输层能够将其正确地送至不同的应用进程。
运输层得到的数据报文并不直接交给应用进程,而是交付给相应的套接字
两个主要协议:
- 用户数据保协议UDP(User Datagram Protocol):
- UDP用户数据报。
- 无连接。
- 传输控制协议TCP(Transmission Control Protocol):
- TCP报文段(segment)。
- 面向连接。
TCP提供的服务:
- 面向连接服务
- 客户端套接字和服务器套接字之间建立一个全双工的TCP连接(客户端既可以下载,也可以上传)
- “面向连接”而非“连接”,是因为TCP连接是一种非常松散的、抽象的连接
- 可靠传输服务
- 拥塞控制服务
- 对整个因特网数据的传输有好处,但是抑制传输速率对一些实时应用非常致命,因此它们会选择UDP
- 报文分组传输
- 多路复用/多路分解
UDP提供的服务
- 数据交付
- 差错检测
- 多路复用/多路分解
- 与TCP的区别:
- 轻量级,提供最小服务
- 无连接,通信前后无需握手
- 不可靠传输服务
- 无拥塞控制机制(可以保证一定的吞吐量,为实时应用所需)
- 不可分组,无分组开销
因为很多防火墙都设置为阻塞UDP流量,因此多媒体和实时应用越来越多的使用TCP
应用举例:
分用实现:使用协议端口号。
- 与硬件端口不同,软件端口是应用进程的“地址”。
- 长16位。
- 只在本主机上有效。
用户在发起通信请求时,必须知道对方的IP和端口号
套接字标识符
- UDP套接字使用 { 目的IP地址,目的端口号 } 二元组来全面标识
因此一个端口只对应一个UDP套接字 - TCP套接字使用 { 源IP地址,源端口号,目的IP地址,目的端口号 } 四元组来全面标识
一个端口可以对应很多个TCP套接字
具有不同源IP地址或源端口号的TCP报文将被定向到两个不同的套接字,除非TCP携带了初始创建连接的请求(带有初始创建连接请求的所有TCP报文段都会被定位到一个welcoming套接字,welcoming套接字再为其创建一个专用套接字(新的线程),像开房一样)
一个进程可以有多个线程,意味着可以有多个连接
端口号分类:
- 服务器使用的端口号:分为熟知端口号(系统端口号,0~1023)和登记端口号。
- HTTP 80
- FTP 21
- 客户端使用的端口号:短暂端口号,客户进程通信时才分配。
用户数据报协议UDP:
- 特点:无连接、尽最大努力交付(不可靠)、面向报文(对应用程序送来的报文不合并也不拆分,对IP层上交的数据报直接去除头部就交给应用进程。)、无拥塞控制、支持一对一、多对多、一对多和多对一的交互通信、首部开销小(只有8字节)。
- UDP用户数据报格式: