传输层
传输层为运行在不同主机上的进程提供逻辑通信
1 提供的服务
1. 功能:
1)提供应用进程之间的逻辑通信(端到端的通信)。
2)复用和分用
复用:不同的进程使用同一个传输协议传送数据;
分用:接收方能把一同到来的数据正确交付到各自的目的进程。
3)差错检错:包括首部和数据部分(网络层只检测 IP 数据报的首部)。
4)提供两种协议:面向连接的 TCP 和无连接的 UDP(网络层只能提供其中一种)。
2. 寻址和端口:
1)端口:是传输层的服务访问点,类似网络层的 IP 地址(端口标识应用进程)。
2)端口号
长度 16bit,能表示 65536 个端口号;
服务器使用的端口号:
一类是熟知端口号(0~1023),这些端口号是分配给 TCP/IP 最重要的一些应用进程;
一类是登记端口号(1024~49151),这些端口号必须在 IANA 登记,以防重复。
客户端使用的端口号:49152~65535,仅在客户进程运行时才动态选择。
3)套接字:就是一个通信端点,即 :主机 IP 地址 + 端口号,唯一标识了一台主机上的一个应用(进程)。
3. 无连接服务和面向连接服务:
1)面向连接服务:通信前先建立连接,通信中整个连接情况一直被实时监控管理,通信结束后再释放连接。
2)无连接服务:不需要提前建立连接,直接将信息发送到出去,尽力送达。
3)TCP:
面向连接的传输控制协议;
提供一条全双工的可靠逻辑信道;
不提供组播和广播;
适用于可靠性高的场合(FTP,HTTP,TELNET).
4) DUP:
无连接的用户数据报协议;
在 IP 之上仅提供:多路复用和对数据的检查。
速度较快,实时性较好,适用于小文件传输协议(DNS,SNMP).
2 UDP 协议
1. UDP 数据报:
1)无需建立连接,因此不会引入建立连接的时延;
2)无连接状态,因此也免除了去维护连接的麻烦;
3)分组首部开销小,才 8B,而 TCP 首部是 20B;
4)常用于一次性传输较少数据的网络应用或是多媒体应用;
5)尽力交付不代表不可靠,可靠性工作在应用层完成;
6)报文是 UDP 数据报最小处理单位。
2. UDP 首部格式:
首部 8B,有 4 个字段,每个字段 2B。
1)源端口:源端口号,需要对方回信时选用,不需要是全 0;
2)目的端口:目的端口号,在终点交付报文时必须用到;
3)长度:UDP 数据报长度(首部+数据),最小为 8(仅有首部);
4)校验和:检验整个 UDP 数据报是否有误,错则丢弃,不想校验时,全置 0.
5)接收方发现端口号错误时,丢弃该报文,并由 ICMP 返回“端口不可达”差错报文。
3. UDP 检验:
引入 12B 的伪首部来计算校验和,检错能力不强,但简单,快捷。
1)校验方法:二进制反码运算求和再取反。
2)过程:
发送方:全 0 填入校验和字段并添加伪首部;
把 UDP 数据报视为多个 16 比特的字段,若非偶数个字节还要在末尾添加一个全 0 字节;
二进制反码求和,并把和写入校验和字段。
接收方:收到的数据报加上伪首部二进制反码计算和;
若不是偶数个字节仍要补 0;
结果全为 1 表示无差错,否则有错丢弃。
3 TCP 协议
1. 特点:
TCP 是在不可靠的 IP 层上实现的可靠传输协议,主要解决可靠,有序,无丢失,不重复的问题。
1)是面向连接的;
2)每条 TCP 连接只有两个端点(点对点);
3)全双工通信,两端都有发送缓存和接收缓存;
4)面向字节流,TCP 把应用程序交付的数据视为一连串无结构的字节流。
2. TCP 报文段:
1)首部前 20B 是固定的,后面的 4N 字节是可选项;
2)TCP 数据报既可运载数据,又可建立连接,释放连接和应答;
3)序号字段:其值表示本报文段所发的数据的第一个字节的序号;
4)确认号字段:是期望收到对方的下一个报文段数据的第一个字节号;
5)数据偏移:即首部长度;
6)紧急位 URG:1 表示紧急指针字段有效,第一个字节到紧急指针所指字节就是紧急数据;
7)确认位 ACK:1 确认号有效,0 无效;
8)推送位 PSH:为 1 时,应尽快交付给接受进程,而不等整个缓存存满再提交;
9)复位位 RST:为 1 时表明出现严重错误,必须释放连接再重新建立连接;
10)同步位 SYN:为 1 表示这是一个连接请求(ACK=0)或连接接受报文;
11)终止位 FIN:用来释放连接,为 1 表示此发送方发送完毕,要求释放连接;
12)窗口字段:指出现在允许对方发送的数据量,单位字节;
3. TCP 连接管理:
1)TCP 连接的建立:采用客户/服务器方式,发起者为客户机。
过程:三次握手
①客户机发起一个连接请求报文段,SYN=1,ACK=0,seq=x(随机选择),不携带数据但消耗一个序号。
②服务器若同意建立连接则发回确认(SYN=1,ACK=1,seq=y,ack=x+1),并分配 TCP 缓存和变量。
③客户机再向服务器给出确认,并分配缓存和变量,SYN=0,ACK=1,seq=x+1,ack=y+1。
// 前两步都不含应用层数据但消耗一个序号,第三步可携带数据,不带就不消耗序号。
// 服务器端在第二次握手分配资源,客户机在第三次分配,所以使得服务器易受到 SYN 洪泛攻击。
2)TCP 连接的释放:任何一方都能终止该连接。
过程:4 次握手
①客户机想关闭连接,则发送一个连接释放报文段,并停止发送数据,主动关闭连接,FIN=1.
②服务器收到后回复确认,此时处于半关闭状态,服务器若想发数据可以发且客户机会接受。
③服务器也发送完毕,则发送连接释放报文段,FIN=1.
④客户机接收后必须发出确认,再等 2MSL 后才进入连接关闭状态。
4. TCP 可靠传输:
1)序号:TCP 首部的序号字段用来保证数据有序提交给应用层(每个字节都编上一个号)。
2)确认:发送方缓存区会存储已经发送但未收到确认的报文段,以便重传(使用累计确认)。
3)重传:超时和冗余 ACK 的情况都会重传。
冗余 ACK:
接收方收到乱序到来的 n 个报文段就会发送 n 个冗余 ACK;
当发送方收到三个冗余 ACK 就会判断某个报文段缺失并重传这个报文段。
5. TCP 流量控制:
用来消除发送方使接收方缓存区溢出的可能性。
1)接收窗口:接收方根据自己接受缓存的大小,动态调节发送方的发送窗口大小。
2)拥塞窗口:发送方根据对当前网络拥塞程序的估计而确定的窗口值。
3)发送方的窗口大小取以上二者的较小值。
// 传输层定义的端到端的流量控制,链路层定义的是两个结点间的。
// 链路层的滑动窗口协议的窗口不能动态变化,但传输层的可以。
6. TCP 拥塞控制:
拥塞控制是一个全局性的过程,指防止过多数据注入网络。
1)慢开始和拥塞控制:
①慢开始:每经历一个传输轮次(一个 RTT),拥塞窗口就指数式增倍,一直增加到门限(阈值),再改用拥塞避免算法。
②拥塞窗口不再指数型增大,而是每次加 1,直到出现一次超时就把设置新门限为前一个门限的一半。
2)快重传和快恢复:
①快重传技术使用了冗余 ACK 来检测丢失,较快的重传数据。’
②快恢复:发送方收到三个冗余 ACK 时,新门限减半,在新门限值处开始加 1 增大。