传输层主要功能是实现进程之间的端-端通信,实现传输层协议的软件称为传输实体,传输层之间传输的报文称为传输协议数据单元TPDU
分布式进程通信
要解决的两个基本问题:进程标识和多重协议识别
端口号
0-65535
- 0-1023 熟知端口号,给每种标准的Internet服务进程分配的一个确定的端口号
- 1024-49151 注册端口号,用户开发新的网络应用时使用这些网络端口号
- 49152-65535 临时端口号,由运行在客户端上的TCP/UDP软件随机选取,只对一次性进程通信有效
UDP熟知端口号
端口号 | 服务进程 | 说明 |
---|---|---|
53 | DNS | 域名服务 |
67/68 | DHCP | 动态主机配置协议 |
69 | TFTP | 简单文件传输协议 |
161/162 | SNMP | 简单网络管理协议 |
520 | RIP | 路由信息协议 |
TCP熟知端口号
端口号 | 服务进程 | 说明 |
---|---|---|
20 | FTP | 文件传输协议(数据连接) |
21 | FTP | 文件传输协议(控制连接) |
23 | TELNET | 网络虚拟终端协议 |
25 | SMTP | 简单邮件传输协议 |
80 | HTTP | 超文本传输协议 |
179 | BGP | 边界路由协议 |
客户-服务器模式
客户或服务器进程->套接字->传输层软件->IP地址->网络层软件->..Internet..->网络层软件->…->进程客户或服务器
UDP
一种无连接,不可靠的传输层协议,提供一种尽力而为的服务:
- UDP在传输报文前不需要在通信双方建立连接,减少了协议的开销与传输延迟
- UDP对报文除了一种可选的校验和之外,几乎没有其他的保证数据传输可靠性的措施
- UDP检测出收到的分组出错则丢弃,既不确认也不通知发送端重传
UDP报文头部
UDP 伪头部
当UDP运行于IP协议之上时,为了能够计算校验和,需要在UDP的数据报上添加一个伪头部,包括了IP协议的一些信息,但是它并不是发送IP数据报时使用的头部,而只是用来计算校验和而已。
UDP适用范围
- 视频播放
- 简短的交互式应用
- 多播与广播应用
- 实时语音与视频传输
TCP
- 支持面向连接的传输服务
- 支持字节流的传输
- 支持全双工通信
- 支持同时建立多个并发的TCP连接
- 可靠的传输服务
可靠传输
- 理想信道:不会比特错误,不会丢包,接收方速度总是能匹配发送方速度
- 发送方发送数据和接收方接收数据是相互隔离
TCP报文头部
- 源端口目的端口:各占2字节,端口是传输层与应用层的服务接口
- 序号字段:占4字节,TCP连接中传输的数据流中每一个字节都编上一个序号。值指的是本报文发送数据的第一个字节的序号
- 确认号字段:4字节,期望收到对方一个报文段的数据的第一个字节序号
- 头部长度:4位,指出TCP报文的首部长度,最小值5,最大值15
- 保留字段:6位,全0
- 紧急URG:URG=1时表面紧急指针字段有效,告诉系统此报文有紧急数据应当尽快传送
- 确认ACK:ACK=1时,确认字段才会有效,ACK=0时无效
- 推送PSH:接受TCP收到PSH=1的报文段,就应当尽快交付接受应用进程
- 复位RST:RST=1时,表面TCP连接中出现严重差错,必须释放连接再重新建立连接
- 同步SYN:SYN=1时,标识这是一个连接请求或连接接受报文
- 终止FIN:释放一个连接,FIN=1表明此报文的发送端数据已经发送完毕并要求释放连接
- 窗口:2字节,用来让对方设置发送窗口的依据,单位字节
- 校验和:2字节,检验和字段检验范围包括首部和数据两部分,检验时需要在TCP报文前段加上12字节的伪头部
- 紧急指针:16位,指出紧急数据末尾在本报文段中的位置
- 选项:长度可变,最初只规定了一种选项,MSS最大报文段长度
TCP连接与释放
传输连接有三个阶段:连接建立,数据传送,连接释放
连接的建立过程要解决以下三个问题:
- 使得每一方能够确认对方的存在
- 允许双方协商一些参数
- 能够对运输实体资源进行分配
TCP连接建立
三次握手建立TCP连接
- 客户->服务器 SYN=1,seq=x,客户向服务器发送连接请求报文段,首部同部位SYN=1,选择序号seq=1,表面传送数据时的第一个数据字节序号为x
- 服务器->客户 SYN=1,ACK=1,seq=y,ack=x+1,服务器收到连接请求报文段后若同一,则发回确认,SYN=1,ACK=1,其中确认编号ack=x+1,自己选择的序号seq=y
- 客户->服务器 ACK=1,seq=x+1,ack=y+1,客户收到确认报文后向B给出确认,其中ACK=1,确认号ack=y+1,客户端再通知上层应用进程连接已经建立
TCP连接释放
四次握手释放TCP连接
- 客户->服务器 FIN=1,seq=u,数据传输结束后,客户端应用进程先向TCP发出释放链接报文段并停止发送数据主动关闭TCP连接,客户端将报文段首部FIN=1,seq=u,等待服务器确认
- 服务器->客户 ACK=1,seq=v,ack=u+1,服务器发出确认,确认号ack=u+1,序号seq=v,TCP服务通知高层应用进程,TCP处于半关闭状态,若服务器发送数据客户仍然会接收
- 服务器->客户 FIN=1,ACK=1,seq=w,ack=u+1,若服务器没有要发送的数据则通知TCP释放连接
- 客户->服务器 ACK=1,seq=u+1,ack=w+1,客户端收到连接释放报文段后也要发出确认
滑动窗口、确认、重传
TCP连接每一端必须要有:
- 两个缓存:发送缓存与接受缓存
- 一个窗口:接受端的接受窗口
发送缓存
用于暂时存放:
- 发送应用程序给发送方TCP准备发送的数据
- TCP已经发送但是尚未收到确认的数据
接受缓存
用于暂时存放:
- 按序到达但是尚未被接受应用程序读取的数据
- 不按序到达的数据
滑动窗口协议主要特点
- 使用发送与接受缓冲区,以及滑动窗口机制控制TCP连接上的的字节流传输
- 滑动窗口面向字节,起到差错控制的作用。
- 接收端可以在任何时候发送确认,窗口大小可以由接收端根据需要增大或者减小
- 发送窗口值可以小于接收窗口值,不能超过接收窗口值
TCP流量控制
让对方发送的速率不要太快,既要接收方来得及接受也不要使网络发生拥塞。利用滑动窗口机制可以方便地在TCP连接上实现流量控制
TCP拥塞控制
网络中对某资源的需求超过了该资源所能提供的可用部分,网络性能开始变差,产生拥塞