层次结构的基本原则
- 保证数据通路顺畅
- 维护通信端的状态
- 识别通信端
- 数据纠错
类似于责任链模式,分层对一次网络请求进行设计维护
- 各层之间相互独立
- 各层有灵活性
- 各层之间解耦
osi七层模型(未市场化、了解即可)
- 应用层:提供接口和服务
- 表示层:数据处理(编码解码,加密解密)
- 会话层:管理通信会话(建立、维护、重连)
- 传输层:管理端到端的通信连接
- 网络层:数据路由
- 数据链路层:相邻节点之间的数据通信
- 物理层:光电等物理特性
TCP/IP四层模型(重点)
- 应用层:HTTP、FTP
- 传输层:TCP、IP
- 网络层:IP、ICMP
- 网络接口层:Ethernet、ARP
TCP计时器
- 重传计时器
重传时间到了.如果还没有接收到对方的ACK,就从发此包,避免陷入无限等待中 - 坚持计时器
目的:解决零大小窗口导致的死锁问题
死锁产生原因:当接收端窗口大小为0时,发送端停止发送,此后如果接收端有空余空间来接收数据,则发送一个新窗口大小的报文,如果该报文丢失了则导致双方都处于等待状态,产生死锁
工作原理:当发送端接收到接收端发送的零大小窗口的报文时,就启动坚持计时器,当计时器到达计时时间,发送端就主动发送一个报文段告诉接收端你发送的新窗口大小的报文丢失了,需要重新发送
坚持时间:开始先设置为超时重传时间,如果超时了还是没有收到接收端发送的新窗口大小报文,则将计时器的值加倍并且复位,直到大于门限值60s,在此之后每隔60s向接收端发送一个询问报文 - 保活计时器
目的:避免空闲连接长时间的占用服务器资源
工作原理:当服务器收到数据时都将保活计时器重新设置(一般2h),过了2h后,服务器如果没有收到数据,每隔75s发送一个探测报文给客户端,当连续发送10次后,仍然没有收到客户端的回复,则服务器断开连接 - 时间等待计时器
时间等待计时器是在四次握手的时候使用的。时间是2MSL(最长报文生存时间)
网络层的IP协议
IP协议把复杂的实际网络抽象成虚拟互联的网络
IP协议屏蔽了底层实现细节只需要关注网络层的数据转发即可
IP协议解决了虚拟网络中数据报传输路径的问题
数据帧每一跳MAC地址都在变化
IP数据报每一跳IP地址不变,包括源IP地址和目标IP地址
UDP协议
用户数据报协议(数据报:应用层提供的数据,UDP不处理直接传输)
UDP首部
- 无连接协议
- 不可靠,无法感知是否丢失
- 面向报文传输
- 没有拥塞控制(不管网络拥塞与否)
- 首部开销小,只有32*2 64位
TCP协议
传输控制协议
- 面向连接的协议
- 点到点通信
- 可靠传输
- 全双工
- 面向字节流(流:面向字节一段一段传输,对数据块进行合并和分拆)
序号:数据首字节序号
确认号:期望收到的数据的首字节序号
数据偏移:真实数据偏向头部的距离
TCP标记:
窗口:对方发送数据量的大小
紧急执行:URG为1时启动
TCP选项:拓展使用
TCP可靠传输基础
ARQ
基于字节的滑动窗口
未收到消息需要从最前一个未收到的部分开始重新传输
每一次传输都需要收到确认号
TCP流量控制
- 让对方发送速率不要太快
- 流量控制使用滑动窗口来实现(降低窗口大小为0来控制流量)
窗口大小传输失败会使用坚持计时器
窗口探测报文来探测窗口丢失后的问题
TCP拥塞控制
报文超时认定拥塞
- 慢启动算法(由小到大增加发送量,收到一个报文就加一)
- 拥塞避免算法(维护一个拥塞窗口的变量,只要不用拥塞就调大窗口)
TCP三次握手
为什么要三次?
已经失效的连接请求报文传送到对方后,引起传输错误,超时的报文也会建立连接
TCP四次挥手
等待计时器:等待2MSL,最长报文段寿命2min
为什么需要等待计时器?确保第四次挥手被对方收到,确保所有报文过期
HTTP协议
超文本传输协议
- 可靠
- 可传输:文本、图片、视频、音频、文件
- CS模式
GET方法
在地址里制定资源
POST方法
在请求头或请求体里指定资源
HTTPS协议
HTTP是明文传输的
数字证书
可信任组织办法给特定对象的认证
SSL(安全套接层)