本文主要简单介绍一下传输层TCP、UDP协议,包括TCP的拥塞控制、拥塞避免,快重传和快恢复
1、传输层简介
1.1、传输层功能
- 为相互通信的应用进程提供了逻辑通信
- 网络层提供主机之间的逻辑通信
1.2、TCP、UDP简介
- TCP:传输的文件较大,需要对文件进行分段,建立会话,可靠传输,可以实现流量控制
- UDP:一个数据包就能够完成数据通信,不需要分段,不需要建立会话,不可靠传输,不需要流量控制
- 域名解析就是典型的UDP协议,QQ聊天就是UDP。QQ传文件是TCP,邮件为TCP,FTP为TCP。(前面讲到的视频讲课,所有的学生都能看到老师的视频,老师的数据通过广播在网上发,实际使用的是UDP)
1.3、传输层协议与应用层协议之间的关系
- TCP/UDP + 端口号,就是应用层协议
- http协议=TCP+80端口,https=TCP+443,RDP(远程桌面)=TCP+3389,ftp=TCP+21,共享文件夹=TCP+445,SMTP=TCP+25,POP3=TCP+110,
- Telnet=TCP+23,DNS=UDP+53
1.4、服务和应用层协议之间的关系
- 服务使用TCP或UDP的端口侦听客户端请求
- 客户端使用IP地址定位服务器,使用端口号定位服务
- 可以在服务器网卡上设置,只开放特定端口号,实现服务器网络安全
2、UDP
2.1、UDP主要特点
- 无连接
- 不保证可靠
- 面向报文,无拥塞控制,很适合多媒体通信要求
- 支持一对一、一对多、多对一和多对多交互
- 首部开销小,只有8字节
2.2、UDP首部
- 首部只有8个字节,伪首部是从网络层拿到的信息,主要为了计算检验和
- 长度是首部+数据总长度
检验和的计算方法如下:
3、TCP
3.1、TCP特点
- 面向连接
- 只能一对一
- 可靠传输
- 全双工
- 面向字节流
3.2、TCP 首部格式
- 序号:每段数据的第一个字节是整个数据的第几个字节
- 确认号:需要发送的下一个数据段的首字节号
- 数据偏移:首部中的一个1代表4个字节,数据偏移代表TCP首部一共有多长
- URG:紧急标志位,标记为1后,在缓存里不排队,直接传递
- ACK:为1时,确认号才有效,为0时确认号无效
- PSH:接收到数据时,不需要排队
- RST:为1代表会话出错,需要重新建立连接(打开浏览器时,点了×)
- SYN:同步的时候,SYN为1,SYN攻击,发送多个建立TCP连接的无效报文
- FIN:断开连接时使用
- 窗口:建立连接时,相互告诉对方各自的窗口大小,以及接收的最大数据包大小
- 校验和:(和UDP一样,需要添加伪首部)
- 紧急指针:URG为1时,该字段才起作用,表示紧急数据结束的位置
3.3、TCP可靠传输
- 超时重发
- 停止等待协议:优点简单,缺点信道利用率低
- 流水线传输:发送方连续发送多个分组,不必每发完一个分组就停顿下来等待对方确认。
- 滑动窗口实现可靠传输:TCP每发送一个报文,就对这个报文设置一个计时器,只要计时器设置的重传时间到,但是还没有收到确认,就要重传这一段报文
3.4、TCP流量控制
接收端处理数据不及时,给发送端回复中,调小发送窗口,实现流量控制
3.55、TCP拥塞避免
1. 拥塞控制所起的作用:
2. 慢开始和拥塞避免
- 发送方维持拥塞窗口cwnd,只要网络没有拥塞,cwnd就会增加一些,只要网络出现拥塞,cwnd就会减小一些。
慢开始的原理如图所示
慢开始和拥塞避免算法如下:
当出现网络拥塞的时候,慢开始门限更新为当前拥塞窗口(cwnd)的一半。
3. 快重传算法
正常情况下,发送n个数据包,接收端给个确认信号,让发送端接着发送第n+1个数据包。如果第k个数据包丢了,接收端发现以后,立刻给发送端回复3个确认信息,让其重传k,而不是等到n个数据包接收到以后再重传。
4. 快恢复算法
当发送端接收到连续3个相同的确认信号时,执行拥塞避免算法,从新的慢开始门限处的发送窗口大小,进行快恢复。
5. 发送窗口的实际大小
发送窗口的上限值= Min(rwnd, cwnd),其中rwnd是接收端的接收窗口大小