传输层
一、传输层概述
1、传输层的功能
传输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)
传输层还要对收到的报文进行差错检测
传输层提供面向连接和无连接的服务
2、端口
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
端口号 | 服务 |
---|---|
21 | FTP |
23 | telnet |
53 | DNS |
80 | http |
443 | https |
二、用户数据报协议UDP
1、UDP概述
- UDP 是无连接的,即发送数据之前不需要建立连接。
- UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
- UDP 是面向报文的,没有拥塞控制。
- UDP支持一对一、一对多、多对一和多对多的交互通信。
- UDP 的首部开销小,只有8个字节。
2、UDP首部格式
- 源端口:源端口号。在需要对方回信时选用。不需要时可用全0
- 目的端口:目的端口号。这在终点交付报文时必须使用
- 长度:UDP 用户数据报的长度,其最小值是8(仅有首部)
- 检验和:检测 UDP 用户数据报在传输中是否有错。有错就丟弃
三、传输控制协议TCP
1、TCP概述
- TCP 是面向连接的传输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP 提供可靠交付的服务
- TCP 提供全双工通信
- 面向字节流
2、套接字socket
TCP 连接的端点做套接字(socket)
套接字的表示方法:在点分十进制的 IP 地址后面写上端口号,中 用冒号或逗号隔开
套接字 socket = (IP 地址:端口号)
每一条 TCP 连接唯一地被通信两端的两个端点(两个socket)所确定
TCP 连接 = {socket1, sockct2} = {(IP1: port1), (IP2: port2))
3、TCP首部格式
- 源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号
- 序号:占4字节。报文段首字节的在字节流的编号
- 确认号:占4字节。期望收到对方下一个报文段的第一个数据字节的序号
- 数据偏移:占4位。 TCP 报文段的首部长度
- 保留:占6位
- 紧急 URG:当 URG 置1时,发送应用进程就告诉发送方的 TCP 有紧急数据要传送。于是发送方TCP 就把紧急数据插入到本报文段数据的最前面
- 确认 ACK:仅当 ACK =1时确认号字段才有效。当 ACK = 0时,确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置1
- 推送 PSH:在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应,发送方TCP 把 PSH 置1。接收方直接交付接收应用进程(不进缓存)
- 复位 RST:TCP 连接中出现严重差错,必须释放连接,然后再重新建立运输连接
- 同步 SYN:SYN 置为1就表示这是一个连接请求或连接接受报文
- 终止 FIN:FIN=1时,释放一个连接
- 窗口:占2字节。窗口值作为接收方让发送方设置其发送窗口的 依据
- 检验和:占2字节。
- 紧急指针:占2字节。紧急指针仅在 URG = 1时才有意义,指出本报文段中的紧急数据的字节数
- 可选项
- 最大报文段长度 MSS:TCP 报文段长度减去 TCP 首部长度
- 时间戳:计算往返时间 RTT、防止序号绕回 PAWS
四、TCP可靠传输
数据链路层的可靠传输通常使用 确认 和 超时重传 两种机制来完成。
1、工作原理
1)停止等待协议
在发送完一个分组后,必须暂时保留己发送的分组的副本
分组和确认分组都必须进行编号
在不可靠的传输网络上实现可靠的通信
自动重传请求ARQ
2)连续ARQ协议
累积确认:接收方对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都己正确收到了
优点:容易实现,信道利用率高
缺点:不能向发送方反映出接收方己经正确收到的所有分组的信息
2、可靠传输的实现
1)滑动窗口协议
TCP连接的每一端都必须设有两个窗口:一个发送窗口和一个接收窗口
TCP的可靠传输机制用字节的序号进行控制
2)滑动窗口的缓存
环形窗口
五、TCP流量控制
1、流量控制概述
让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞
2、持续计时器
发送方和接收方死锁局面的产生:ack=1、接受窗口为0
TCP 为每一个连接设有一个持续计时器
- 若持续计时器设置的时间到期,就发送一个零窗口探测报文段
- 若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器
- 若窗口不是零,打破死锁
六、TCP拥塞控制
1、拥塞控制概述
资源拥塞的原因:对资源需求的总和 > 可用资源
拥塞控制:是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素
流量控制:往往指在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
2、拥塞控制起到的作用
3、拥塞控制算法策略
拥塞窗口cwnd
原则:没拥塞就增大窗口、出现拥塞就减小窗口
SendWin=min{CongWin, RecvWin}:同时满足拥塞控制和流量控制要求
1)慢开始
当 TCP 连接进行初始化时,将拥塞窗口cwnd置为1。
可用带宽可能 >> MSS/RTT,应该尽快加速,到达希望的速率。
当连接开始时,指数性增加(每个RTT)发送速率直到发生丢失事件(启动初值很低,但是速度很快)
2)拥塞避免
乘性减:丢失事件后将cwnd降为1, 将cwnd / 2作为门限 ssthresh,进入慢启动阶段(倍增直到ssthresh)
加性增:当cwnd > 门限 ssthresh(上次发生拥塞的窗口的一半)时,一个RTT如没有发生丢失事件,将cwnd加1(探测)
3)快重传与快恢复
快重传:接收方每收到一个失序的报文段后就立即发出重复确认,让发送方尽早知道有报文段没有到达接收方。
快恢复:发送方收到3个重复的ACKs,cwnd减半、窗口线性增长
4)总结
当cwnd<ssthresh:发送端处于慢启动阶段,窗口指数性增长。
当cwnd > ssthresh:发送端处于拥塞避免阶段,窗口线性增长。
当收到三个重复的ACK:ssthresh设置成 cwnd/2,进入拥塞避免阶段。
当发生超时timeout:cwnd=1,进入慢启动阶段。
七、TCP传输连接管理
1、TCP3次握手的必要性
2、TCP3次握手
变化的初始序号 + 双方确认对方的序号(3次握手)
3、TCP关闭连接
客户端,服务器分别关闭它自己这一侧的连接:发送FIN bit = 1
的TCP段
一旦接收到FIN
,用ACK
回应:接到FIN
段,ACK
可以和它自己发出的FIN
段一起发送,可以处理同时的FIN交换