思维导图模式 -- 深度理解及复习 网络 知识

Posted 满眼*星辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维导图模式 -- 深度理解及复习 网络 知识相关的知识,希望对你有一定的参考价值。

思维导图

在这里插入图片描述

基本概念

协议

提前的一种约定就叫作协议。(用于保证网络传输双方能够正常通讯的)

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的解决方案

  1. 在应用层进行数据包的拆分和组合(程序员定义)
  2. 不进行手动处理,交给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. 面向数据流

问题:粘包/半包

解决方案:

  1. 使用固定大小的数据包(造成不必要的网络带宽压力)
  2. 使用结束符来明确消息边界的方式来解决。例如:/n

10. TCP 异常处理

  • 有缓冲时间的异常:关机【和正常的关闭是一样的】
  • 没有缓冲时间的异常:断电、断网【TCP 健康检测机制】

基于TCP应用层协议

HTTP:简单的请求-响应协议
HTTPS:以安全为目标的 HTTP 通道
SSH:安全外壳协议
Telnet:Internet远程登录服务的标准协议
FTP:文件传输协议
SMTP:电子邮件传输的协议

TCP vs UDP

  1. UDP是无连接的;TCP是有连接的
  2. UDP是不稳定的;TCP是稳定的
  3. UDP是面向数据报的;TCP是面向数据流的
  4. UDP没有发送缓冲区;TCP有发送缓冲区
  5. UDP是以高效性著称;TCP是以稳定性著称
  6. 使用的场景不同
    如果对稳定性要求比较高,那么应该使用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后, 发生的事情

  1. 浏览器会先检查你的url地址的正确性
  2. 浏览器会检查这个url有没有缓存,如果有缓存就取缓存
  3. DNS域名解析,拿到IP进行访问
  4. TCP 3次握手(TCP握手的内容传递和状态变化)
  5. HTTP 协议 Resquest 内容发送 (首行,head,空行,body)
  6. 服务器接收到请求,并且进行相应的业务处理
  7. 服务器端将结果返回给客户端
  8. 浏览器拿到返回的结果并调用浏览器的内核,实现前端页面的渲染
  9. TCP 的4次挥手

以上是关于思维导图模式 -- 深度理解及复习 网络 知识的主要内容,如果未能解决你的问题,请参考以下文章

思维导图模式 -- 深度理解及复习 网络 知识

思维导图模式 -- 深度理解及复习 JavaWeb 知识

思维导图模式 -- 深度理解及复习 JavaWeb 知识

思维导图模式 -- 深度理解及复习 JavaWeb 知识

思维导图模式 -- 深度理解及复习数据库知识

思维导图模式 -- 深度理解及复习 数据库 知识