1. 运输层协议概述
(1)进程之间的通信:
运输层向它上面的应用层提供通信服务;
通信的真正端点并不是 主机而是 主机中的进程; 即:端到端的通信 是 应用进程之间的通信;
网络层是 为主机之间提供逻辑通信; 而 运输层 为应用进程之间提供端到端的逻辑通信;此外,运输层还要对收到的报文进行差错检测;
(2)运输层的两个主要协议
运输层需要有两种不同的运输协议: 面向连接的 TCP(传输控制协议) 和 无连接的 UDP(用户数据报协议)
在TCP/IP体系中,两个对等运输实体在通信时传送的数据单位叫做: TCP报文段 或 UDP 用户数据报;
UDP: 在传送数据之前不需要先建立连接; 远地主机的运输层在收到UDP报文后,不需要给出任何确认; 虽然UDP不提供可靠交付,但在某些情况下UDP却是 一种最有效的工作方式;
TCP: 提供面向连接的服务; 在传送数据之前必须先建立连接,数据传送结束后要释放连接; TCP不提供广播或多播服务;由于TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了 许多的开销,如 确认、流量控制、计时器 以及 连接管理等;这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源;
一些常见的应用和应用层协议主要使用的 运输层协议(UDP 或 TCP):
1. UDP: DNS(域名系统)、TFTP(简单文件传送协议)、RIP(路由信息协议)、DHCP(动态主机配置协议)、SNMP(简单网络管理协议)、NFS(网络文件系统)、IP电话,流式多媒体通信、多播(IGMP 网际组管理协议);
2. TCP:SMTP(简单邮件传送协议)、TELNET(远程终端协议)、HTTP(超文本传送协议)、FTP(文件传送协议)
(3)运输层的端口
在运输层使用 协议端口号(端口),用来识别 进程;
虽然通信的终点是应用进程,但我们只要把传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即 最后交付目的进程)就由TCP来完成。
硬件端口 是不同硬件设备进行交互的接口;而软件端口是 应用层的各种协议进程与运输实体进行层间交互的一种地址;
TCP/IP 的运输层 用一个 16位 端口号 来标志一个端口;端口号只具有 本地意思,它只是为了标志本计算机应用层 中的各个进程在 和 运输层交互时的层间接口。
两个计算机中的进程要互相通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用程序)。
因特网上的计算机通信 是采用 客户-服务器方式,因此运输层的端口号分为两大类:
1. 服务器端使用的端口号: 分为两类
(1)熟知端口号(系统端口号): 0 —1023 , 指派给了TCP/IP最重要的一些应用程序,让所有用户都知道;
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) |
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 |
(2)登记端口号: 1024 — 49151 ,给没有熟知端口号的应用程序使用的
2. 客户端使用的端口号( 短暂端口号 ): 49152 — 65535 , 这类端口号仅在客户进程运行时才动态选择,这类端口号是留给客户进程选择暂时使用;
2. 用户数据报协议 UDP
(1)UDP概述:
UDP的主要特点:
UDP是无连接的; UDP使用尽最大努力交付; UDP是面向报文的; UDP没有拥塞控制;UDP支持一对一、一对多、多对一、多对多的交互通信; UDP的首部开销小(只有8个字节,比TCP的20个字节的首部要短);
(2)UDP的首部格式: 数据字段 + 首部字段(8个字节,由4个字段组成:源端口,目的端口,长度,检验和; 每个字段长度都是2个字节)
3. 传输控制协议 TCP概述
(1)TCP最主要的特点:
TCP是面向连接的运输层协议;每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
TCP提供可靠交付的服务; TCP提供全双工通信; 面向字节流;(“流”是指 流入到进程或从进程流出的字节序列)
(2)TCP的连接
TCP连接的端点叫做 套接字或插口;端口号拼接到 IP地址即构成了 套接字;
套接字的表示方法 是在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开, eg: ( 192.3.4.5 : 80 );
套接字 socket = (IP地址 : 端口号 )
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定;
TCP连接的端点是个很抽象的套接字,即 (IP地址:端口号); 同一个IP地址可以有不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中;
同一个名词 socket 却可以表示多种不同的意思;
4. 可靠传输的工作原理
(1)停止等待协议:
a. 无差错情况
b. 出现差错
c. 确认丢失 和 确认迟到
d. 信道利用率
(2)连续ARQ协议:
发送窗口; 累积确认; 滑动窗口协议;
5. TCP报文段的首部格式
首部固定部分各字段的意义为:
源端口和目的端口, 序号, 确认号, 数据偏移,保留,紧急URG(URGent), 确认ACK,推送PSH,复位RST,同步SYN,终止FIN, 窗口,检验和,紧急指针,选项;
6. TCP可靠传输的实现
(1)以字节为单位的滑动窗口
(2)超时重传时间的选择
(3)选择确认SACK
7. TCP的流量控制
(1)利用滑动窗口实现流量控制
流量控制: 让发送方的发送速率不要太快,要让接收方来得及接收;
(2)必须考虑传输效率
8. TCP的拥塞控制
(1)拥塞控制的一般原理
拥塞控制: 防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载;
(2)几种拥塞控制的方法
拥塞控制的4种算法: 慢开始, 拥塞避免, 快重传, 快恢复;
1. 慢开始 和 拥塞避免:
拥塞窗口;
慢开始: 由小到大逐渐增大拥塞窗口数值; 使用慢开始算法后,每经过一个传输轮次,拥塞窗口cwnd 就加倍;
拥塞避免算法: 让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间 RTT就把发送方的拥塞窗口 cwnd 加1,而不是加倍; 这样,拥塞窗口 cwnd 按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多;
AIMD算法(加法增大、乘法减小)
2. 快重传 和 快恢复
接收窗口(通知窗口)
(3)随机早期检测 RED
9. TCP的运输连接管理
运输 连接 是用来传送TCP报文的; TCP运输连接的建立和释放 是每一次面向连接的通信中必不可少的过程;
运输连接就有三个阶段: 连接建立 、 数据传送、连接释放;
(1)TCP的连接建立
三次握手
问题: 为什么A还要发送一次确认?
主要是为了防止已经失效的连接i请求报文段突然又传送到了B,因而产生错误;
假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段,但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求,于是就向A发出确认报文段,同意建立连接,假定不采用三次握手,那么只要B发出确认,新的连接就建立了;
由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。 但B却以为新的运输连接已经建立了,并一直等待A发来数据,B的许多资源就这样白白浪费了。 采用三次握手的办法可以防止上述现象的发生:例如在刚才的情况下,A不会向B的确认发出确认,B由于收不到确认,就知道A并没有要求建立连接。
(2)TCP的连接释放
四次挥手
(3)TCP的有限状态机