(PPT来源:王道网课)
目录
重点知识
-
UDP ——用户数据报协议
特点:无连接、不可靠(无确认重传机制)、面向数据报(读写不灵活、报文不拆分不合并,应用层手动分包)
缓冲区:无发送缓冲区(数据直接交给内核)、有接收缓冲区(不保证顺序、满则丢弃)
基本协议:NFS 网络文件系统、TFTP 简单文件传输协议、DHCP 动态主机配置协议
BOOTP 启动协议(用于无盘设备启动)、DNS 域名解析协议 -
TCP —— 传输控制协议
协议段格式的6位标志位:URG、ACK、PSH、RST、SYN、FIN
机制:
确认应答机制
超时重传机制(数据包丢失(特定时间后重发)、ACK丢失(重复发来的数据报去重)、时间设置500ms)
连接管理机制(三次握手、四次挥手、TIME-WAIT 时间 = 2MSL)
滑动窗口机制(数据包丢失(3次同样ACK则重发,即高速重发机制)、ACK丢失(后续ACK推断确认))
流量控制机制("窗口大小"字段、窗口探测数据段)
拥塞控制机制(慢开始 + 拥塞避免、快重传 + 快恢复)
延迟应答、捎带应答
面向字节流
粘包问题
相关协议:HTTP HTTPS SSH Telnet FTP SMTP
传输层概述
- 传输层的两个协议
传输层的寻址与端口
- 服务端:服务器一端
客户端:使用服务器的主机
UDP协议
UDP首部格式
UDP校验过程
协议字段 17
TCP协议
TCP报文段的首部格式
首部的填充:要保证是4B的整数倍
- 控制位字段
URG:紧急位 —— 发送方应该尽快发送
PSH:推送位 —— 接收方应该尽快交付
RST:复位 —— 出现异常时一方发出,接收到的一方立即释放连接
- 协议字段 6
TCP连接管理(***三次握手/四次挥手)
可靠性 & 连接?
- 网络传输天生不可靠
- 连接:TCP 协议栈内部,通过一个个五元组来标识唯一的一条连接
五元组(传输层协议、源 IP地址、源端口、目的 IP地址、目的端口)
三次握手
- 客户端 → 服务器端
- Round1:客户端 发送 连接请求
SYN = 1:连接请求报文 / 连接请求的接受报文
seq = x:序号位(4B),随机产生序号
(ACK = 0:即此时ack无意义)
(ack确认号位:此时无效,客户端没有收到服务器端发来的报文段) - Round2:服务器端 返回 确认报文段
SYN = 1:连接请求报文 / 连接请求的接受报文
ACK = 1:有效
ack = x + 1:有效;期待对方接下来发送的报文段的第一个字节
seq = y(随机) - Round3:客户端 发送 确认的确认
SYN = 0
ACK = 1:有效
ack = y + 1
seq = x + 1:确认收到,值更新为 对方所发送报文段的第一个字节
- SYN洪泛攻击
四次挥手
- TCP的连接释放
- Round1:客户端 发送 连接释放报文段
FIN = 1:结束位
seq = u - Round2:服务器端 返回 确认报文段
(半关闭状态:客户停止发送数据,服务器还可以再发)
ACK = 1
seq = 上一个确认的报文段字节序列 + 1
ack = u + 1;返回对接收到的报文段的确认,期待发送下一个 - Round3:服务器端 发送 连接释放报文段
FIN = 1:结束位
ACK = 1
seq = w
ack = u + 1:和上一次的确认号一致,所期待的下一个报文段的字节是一样的 - Round4:客户端 回送 确认报文段
等待2MSL,再关闭
原因:确认 服务器 是否 收到了 此次报文段
异常情况
- OS 可以帮忙:
- 进程终止 —— 应用层没有主动关闭连接时,OS 关闭
- 重启 —— OS 关闭
- OS 无法帮忙:
- A 方进程出现某些异常,不在了 —— B 超时重传到达上限后,关闭自己这侧的连接,向应用层通知异常
- A 方正在读信息 —— B 定期发送消息 / 应用层自己解决,保持心跳;in.read(5s) 使用时间戳防止读入阻塞
- 中间路由器出问题 —— 连接双方 close 连接
- A 方死亡后醒来 —— A 已失忆,B 发送信息后 A 回复 RST,B收到后 close
TCP可靠传输
可靠传输的机制
- 序号
- 确认
- 重传
TCP协议中的 窗口 发送过程中使用的协议等知识 与 链路层知识 大同小异
——————————————————
TCP流量控制
- 让发送方发送慢一些
- TCP协议并不使用 停等协议,而是累计确认机制
TCP拥塞控制
- 资源:带宽等网络容量、交换结点中的缓存、交换结点中的处理机
- 流量控制:点对点的问题
拥塞控制:全局性的问题
- 接收窗口:接收方设置,反映接收方能力
拥塞窗口:反映全局性的网络容量问题
- 慢开始 + 拥塞避免
ssthresh:慢开始门限值;发生网络拥塞后,更新门限值=当前拥塞窗口/2
- 快重传 + 快恢复
传输层总结