思维导图
基本概念
协议
提前的一种约定就叫作协议。(用于保证网络传输双方能够正常通讯的)
OIS七层
应用层:针对特定应用的协议 表示层:设备固有的数据格式和网络标准格式的转换 会话层:用来关闭通讯双方之间的会话 传输层:保证通讯双方的数据能够正常传输 网络层:地址的管理和路由选择 数据链路层:确保两个相邻节点间的数据传递 物理层:将数字信号转换成光电信号
TCP / IP
应用层:HTTP(80)、FTP(21)、SSH(22)、TELNET(23)、DNS(53) 传输层:TCP、UDP 网络层:IP 数据链路层:MAC
数据传输的 5 个要素
1.源地址 IP 2.源地址端口号 3.目的地 IP 4.目的地端口号 5.协议类型
数据传输过程
封装:从应用层一步步到物理层的过程【装快递】 分用:从物理成再到应用层的过程【拆快递】
端口号
作用
找到应用程序
端口号与程序关系
一对一或多对一
端口号分类
知名端口号: 0-1023 普通端口号:1024-65535
IP vs MAC
IP:32位(互联网协议地址,不可修改),MAC:48位(网卡地址,出厂全球唯一,但可修改) IP冲突:上不了网;MAC冲突:如果不在同一内网,无影响;在同一内网,间歇性收到消息。
UDP
包含信息
16位源端口号、16位目的端口号、16位UDP长度、16位效验和、数据
特点
UDP:无连接、不可靠、面向数据报、无发送缓冲区,有接收缓冲区
存储大小
16位的长度(数据+头部),UDP的最大包必须是16位可以表示的,理论可以传输的大小为64K
如果UDP编程的数据包大于64K的解决方案:
- 在应用层进行数据包的拆分和组合(程序员定义)
- 不进行手动处理,交给TCP/IP协议去处理,他会在网络层进行分包和组包
基于UDP的协议
NFS: 网络文件系统 TFTP: 简单文件传输协议 DHCP: 动态主机配置协议 BOOTP: 启动协议(用于无盘设备启动) DNS: 域名解析协议
TCP
包含信息
源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去
32位序号/32位确认号:标识唯一TCP
4位TCP报头长度
6位标志位: URG:表示紧急消息; ACK:确认应答表示; PSH:用来表示让接收端将消息从缓冲区取走; RST:复位标识符; SYN:同步标识符。TCP初次连接; FIN:结束表示。TCP断开连接
16位窗口大小:它记录的是接收缓冲区窗口的大小,这个是动态改变的
16位校验和: 用来确定当前数据是否是正确的
16位紧急指针: 标识哪部分数据是紧急数据;
40字节头部选项
TCP 10 大特性
1.确认应答
(保障稳定性最关键的措施)
2.超时重传
策略: a)动态的重传频率,每次重复的时间间隔是上一次的一倍 b)当重试一定次数之后就会停止重传
3.连接管理
初始状态: 双方都为 closed (关闭)状态 启动服务器后,服务器变为 listen (监听)状态
三次握手: 客户端syn_send(发送) —— SYN(同步标识符) —— 服务器端syn_rcvd(recivied接收) 服务器端 syn_rcvd(recivied接收) —— SYN(同步标识符) + ACK(确认应答) —— 客户端 established(成立) 客户端 established(成立) —— ACK(确认应答) —— 服务器端 established(成立)
数据传输: 客户端 —— data数据 —— 服务器端 服务器端 —— ACK(确认应答) —— 客户端
四次挥手: 客户端 fin_wait_1 (等待结束1) —— FIN(结束标识符) —— 服务器端 close_wait(等待关闭) 服务器端 close_wait(等待关闭) —— ACK(确认应答) —— 客户端 fin_wait_2 (等待结束2) 服务器端 last_ack(最后应答) —— FIN(结束标识符) —— 客户端 time_wait (等待时间) 客户端 time_wait (等待时间) —— ACK(确认应答) —— 服务器端 closed(关闭)
结束状态: 客户端关闭 closed(关闭)
经典面试题 TIME_WAIT -> CLOSE 为什么要经历两个MSL(最大生存时间)? 2MSL = ACK最大超时连接(1MSL) + 对方发给他消息的一个最大等待时间(1MSL) (1)等ACK (2)失败后,再发一个消息,再等重发的FIN
如果发现服务器端存在大量的CLOSE_WAIT说明程序有什么问题? 程序有BUG,程序中没有调用close()方法主动去关闭连接
3次挥手行不行? 有可能可以,如果服务器端的缓冲区内没有内容,那么可以通过捎带应答,使2,3步合并,从而只需3步就断开连接。
两次握手行不行? 不行,因为TCP是双全攻的,连接需要证明发送端的收发能力以及接收端的收发能力,两次握手不足以证明双方的收发能力
4. 滑动窗口
特点:一次发一批一批,保证数据高效的传递
快重传:当前面的数据被正常补齐之后,服务器端给客户端响应的ack都是最大的ack值
滑动窗口是越大越好吗? 太大的话,数据传输吞吐率较大,需要传递内容多,如果接收能力不强,会导致接收缓冲区爆满,从而大量信息舍弃,触发大量超时重传,形成恶循环。
5. 流量控制
特点:根据接收端的处理能力(接收缓冲区剩余空间), 来决定发送端的发送速度
机制:当接收缓冲区大小为 0 时,停止消息发送,启动一个检测包来定时检测接收缓冲区剩余空间大小
6. 拥塞控制
特点:以当前网络环境的拥塞程度为导向,来决定发送端发送速度
慢开始:发包从1开始,以默认值16为临界值,当小于此值的时候,以指数增加的方式发包,当等于这个此值就有线性增长的方式发包,一直到有大量丢包的请求(发包已经到当前时间段的极致);这个时候就会:将发包值置为1,再将临界值设置为最大发包值的一半,继续重复此过程,一直循环此过程
7. 延迟应答
特点:等待缓冲区的内容多被处理一些的时候,再给服务器应答剩余缓冲区大小,以此来提升性能
策略: a)每隔一定次数之后延迟应答一次 b)每个一段时间延迟一次
注意事项:延迟应答的时间不能超过超时重传的时间
8. 捎带应答
特点:如果有大于一个消息需要同时输送,那么可以搭顺风车,一起组成一个包后进行传输
这让三次挥手有可能,如果缓冲区没有内容的话,服务器端要发送的 ack 和 fin 可以合并传输给客户端
9. 面向数据流
问题:粘包/半包
解决方案:
- 使用固定大小的数据包(造成不必要的网络带宽压力)
- 使用结束符来明确消息边界的方式来解决。例如:/n
10. TCP 异常处理
- 有缓冲时间的异常:关机【和正常的关闭是一样的】
- 没有缓冲时间的异常:断电、断网【TCP 健康检测机制】
基于TCP应用层协议
HTTP:简单的请求-响应协议 HTTPS:以安全为目标的 HTTP 通道 SSH:安全外壳协议 Telnet:Internet远程登录服务的标准协议 FTP:文件传输协议 SMTP:电子邮件传输的协议
TCP vs UDP
- UDP是无连接的;TCP是有连接的
- UDP是不稳定的;TCP是稳定的
- UDP是面向数据报的;TCP是面向数据流的
- UDP没有发送缓冲区;TCP有发送缓冲区
- UDP是以高效性著称;TCP是以稳定性著称
- 使用的场景不同
如果对稳定性要求比较高,那么应该使用TCP 如果对消息丢失不敏感,要求性能比较高,那么可以考虑使用UDP
IP
协议内容
4位版本号、4位头部长度、8位服务类型、16位总长度、3位标志字段、13位分片偏移、8位生存时间SSL
网段划分
最早划分 A-E 造成了很多 IP 浪费,后面使用 IP 地址+ 子网掩码按位与得到 网络号
内网网段
- 10.*:前8位是网络号,共 16,777,216 个地址
- 172.16. 到 172.31.,前12位是网络号,共1,048,517 个地址
- 192.168,*, 前16位是网络号,共65,536个地址,包含再这个范围中的,都成为私有IP,其余的则称为全局IP(或公网IP)
- 127.0.0.1:本地回环地址
数据链路层
MAC地址 vs IP地址
IP地址描述的是路途总体的 起点 和 终点; MAC地址描述的是路途上的每一个区间的起点和终点
MTU
大传输单元
MTU 对 UDP 的影响: 1500 - UDP(固定头部信息)8字节 - IP协议头部20字节 = 1472 字节
MTU对于TCP协议的影响: MSS:TCP最大报文长度 MTU = IP Header + TCP Header + DAT(MSS)
ARP协议
定义:ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议
作用:ARP协议建立了主机 IP地址 和 MAC地址 的映射关系
浏览器中输入url后, 发生的事情
- 浏览器会先检查你的url地址的正确性
- 浏览器会检查这个url有没有缓存,如果有缓存就取缓存
- DNS域名解析,拿到IP进行访问
- TCP 3次握手(TCP握手的内容传递和状态变化)
- HTTP 协议 Resquest 内容发送 (首行,head,空行,body)
- 服务器接收到请求,并且进行相应的业务处理
- 服务器端将结果返回给客户端
- 浏览器拿到返回的结果并调用浏览器的内核,实现前端页面的渲染
- TCP 的4次挥手
|