• 计算机网络


    OSI 七层模型

    OSI模型指的是Open System Interconnection Reference Model,即开放式系统互联模型。它是世界上第一个试图在世界范围内规范网络标准的框架。

    物理层数据链路层网络层传输层会话层表现层应用层
    在这里插入图片描述

    应用层

    位于OSI模型最上方
    只关心业务逻辑,不关心数据的传输
    在这里插入图片描述

    表现层

    负责协商用户传输的数据格式,并转换数据格式
    在这里插入图片描述

    会话层

    负责管理两个连网实体间的连接
    功能及特点:建立连接维持通信释放连接
    在这里插入图片描述

    传输层

    负责将数据从一个实体(一个服务或应用)传输到另一个实体,但不负责数据传输的方式
    传输层的能力:

    • 数据分隔重组:将数据拆分后按顺序重组
    • 纠错:在数据传输过程中出现问题后采取方式进行纠正
    • 管理连接:数据处理的频繁交换
    • 流量控制:控制传输数据的速率
    • 端口寻址:标明参与传输的实体端口号

    例如上海搬去广州
    在这里插入图片描述

    网络层

    负责把一个封包从一个ip地址传输到另一个ip地址

    数据链路层

    确保两个临近设备间数据的传输,并隐藏底层实现
    帧同步:两个设备直接传输时的协商速率问题
    数据纠错

    物理层

    封装和隐藏具体的传输手段,并且提供稳定的传输接口
    比如:电缆、光纤、蓝牙等
    在这里插入图片描述

    TCP/IP(互联网)协议群的5层模型

    应用层,传输层,网络层,数据链路层,物理层

    应用层:数据从一个应用发往另一个应用的过程
    传输层:主机到主机之间的传输
    网络层:提供路由和寻址
    数据链路层:两个节点之间的物理连接
    物理层:负责0-1信号的传输
    在这里插入图片描述

    解决的5大问题

    报文拆分、增加协议头、数据在相邻设备间数据传输、路由和寻址、数据重组

    • 报文拆分
      数据量大,网络底层设备不支持
      复用路径
      在这里插入图片描述
    • 增加协议头
      数据方块后再接受端需要重组,所以需要使用头部来添加描述字段
      在这里插入图片描述
    • 数据再相邻设备间数据传输
      在这里插入图片描述
    • 路由和寻址
      路由算法:通过算法寻找下一个要到达的节点
      在这里插入图片描述
    • 数据重组
      在这里插入图片描述

    可选协议

    • 传输层:TCP协议、UDP协议、TLS/SSL、SCTP协议等
    • 网络层:IP协议(ipv4和ipv6)、ICMP协议、IPSec协议

    TCP协议

    TCP全名是(Transport Control Protocol),是一个可以提供可靠的、支持全双工、连接导向的协议,因此在客户端和服务端之间传输数据的时候,必须先建立一个连接
    在这里插入图片描述

    三次握手过程

    客户端发送SYN
    服务端针对客户端的SYN给出ACK
    服务端发送SYN
    客户端发送ACK
    在这里插入图片描述

    四次分手的过程

    客户端发送断开请求FIN
    服务器收到请求,发送ACK
    服务端经过一个等待(结束业务),确定关闭连接,发送FIN
    客户端收到FIN,处理完自身的业务后发送ACK
    在这里插入图片描述

    TCP主要功能

    报文拆分
    添加TCP请求头
    数据重组
    在这里插入图片描述

    报文拆分

    应用层数据无法一次性传输完成
    可以拆分后并行传输
    在这里插入图片描述

    如何保证顺序?

    **TCP发送序号(Seq)就是接受序号(Ack)**(seq等于ack)
    一个端发送的序号是另一个端的接受序号
    在这里插入图片描述

    在这里插入图片描述

    增加TCP请求头

    在这里插入图片描述
    源端口:描述发送方机器上的应用
    目标端口:描述接收方服务器上的应用
    发送序号(seq)/接受序号(Ack)

    标志位

    TCP扩展协议:NS、CWR、ECE
    ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题
    URG:紧急标志位
    SYN(Synchronize Sequence Numbers):同步序号,就是建立连接
    FIN:终止连接
    ACK(Achnowledgment):响应
    PSH(push):传送数据
    RST(Reset Connection):重置连接

    TCP协议周边配置

    纠错能力:保证数据可靠性;
    流控能力:协同两边速率,保证可靠性;
    拥塞控制能力:确定网络的拥堵情况和传输速度

    纠错和Checksum

    TCP拥有一个16bit的Checksum字段
    Checksum是一个函数把原文映射到一个不可逆的16bit的编码中这样就可以知道原文传输过程中有没有发送变化

    流控能力

    主要目标:让发送方和接收方协商一个合理的收发速率,让两边都可以稳定工作
    利用滑动窗口

    IP协议

    Internet Protocol :网络层协议
    在这里插入图片描述

    网络层需要降级的三个问题

    延迟
    吞吐量
    丢包率

    IP协议目前主要有两种,IPv4和IPv6,IPv4目前是应用最广泛的互联网协议

    IP协议的工作原理

    分片,增加协议头,延迟、吞吐量、丢包率,寻址,路由
    在这里插入图片描述

    分片

    把数据切分成片
    适配底层传输网络

    在这里插入图片描述

    增加协议头

    在这里插入图片描述
    协议头

    • Type Of Service:服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间的关系。
    • IHL(Internet Header Length):IP协议头的大小。
    • Total Length:报文(封包datagram)的长度
    • Identification:报文的ID,发送方分配,代表顺序
    • Fragment offset:描述是否要分包(拆分),和如何拆分。
    • Time To Live:封包存活的时间。
    • Protocol:描述上层的协议,比如TCP=6,UDP=17
    • Options:可选项
    • Checksum:检验封包的正确性

    延迟、吞吐量、丢包率

    延迟:1bit的数据从网络的1个终端传输到另一个终端需要的时间。
    吞吐量:单位时间内可用传输的平均数据量。
    丢包率:发送出去的封包没有到达目的地的比例。

    三者无法同时满足

    寻址

    给一个地址,然后寻找这个位置
    IPv4地址(32位):逐级寻址

    例如:103.16.3.17
    在这里插入图片描述

    寻址过程:逐级找到网络,最后定义设备
    在这里插入图片描述
    寻址步骤

    • 找到顶层网络:
      103.16.3.1 最顶层的网络号和 255.0.0.0 (子网掩码)做位与运算得到:
      103.16.3.1 & 255.0.0.0 = 103.0.0.0
      (ip地址与子网掩码进行与运算得到顶层网络)
      在这里插入图片描述

    • 找到下一层网络
      用ip地址和下一级的子网掩码做位与运算

    103.16.3.1 & 255.255.0.0 = 103.16.0.0
    在这里插入图片描述

    • 依次找到下级网络

    使用 255.255.255.0 子网掩码找到下一级网络:

    103.16.3.1 & 255.255.255.0 = 103.16.3.0
    在这里插入图片描述

    路由

    若寻找的IP地址不在局域网中,需要路由找到去往对应网络的路径
    IP地址和子网掩码位与的过程是由路由算法实现的
    在这里插入图片描述
    在这里插入图片描述

    IPv6协议

    背景
    IPv4只能支持43亿设备,不够用。

    IPv6的工作原理

    IPv6和IPv4两者工作原理相似,为切片增加封包头路由(寻址)几个阶段。

    在这里插入图片描述

    IPv6和IPv4的主要区别

    • 地址
      地址数量:IPv4有4个8位,共16位,IPv6有8个16位,共128位
      分隔符号:
      IPv4的地址用.分割,如103.28.7.35 。每一个是8位,用0-255的数字表示。
      IPv6的地址用:分割,如0123:4567:89ab:cdef:0123:4567:89ab:cdef 。每个是一个16位的16进制数字,就是4个符。

    书写方式:IPv6地址可简写
    在这里插入图片描述
    在这里插入图片描述

    • 寻址
    全局单播

    站点前缀(Site Prefix):48bit,一般是由ISP(Internet Service Provider运营商)或RIR(Regional Internet Registry,地区性互联网注册机构)。RIR将IP地址分配给运营商。
    子网号(subnet ID):16bit,用于站点内部区分子网。
    接口号(Interface ID):64bit,用于站点内部区分设备。
    在这里插入图片描述

    本地单播

    给定地址,本地网定位设备

    例子:fe80::123e:456d
    在这里插入图片描述

    分组多播
    • 需要以8个1,也就是 ff00 开头,后面跟上一个分组的编号。
    • 所在的网络中已经定义了该分组编号,而且有设备可以识别这个编号。
    • 拥有分组下设备的完整清单,并把数据发送给对应的设备们。
    • IPv4也支持分组多播,但需要网络配置整体配合。

    UDP协议

    User Datagram Protocol 用户数据报文协议,允许丢包

    协议简单,搭建在IP协议之上
    尽可能减少通信机制,速度非常快
    该协议的RFC只有两页

    在传输层提供直接发送报文(datagram)的能力
    发送报文,无法拆分数据

    UDP的封包格式
    在这里插入图片描述
    Source Port :源端口号
    Destination Port:目标端口号
    Length:消息体长度
    Checksum:检查封包是否出错
    Data octets:一个字节一个字节的数据。Octet是8位。

    UDP和TCP

    本质:

    • TCP:提供可靠的网络传输
    • 提供报文交换,简化协议
      可靠性:
    • TCP:可靠
    • UDP:不可靠
      顺序:
    • TCP:有序
    • UDP:无序
      负载:
    • TCP:负载大
    • UDP:负载小

    UDP适合场景
    影视音乐传输可以使用UDP,允许丢包
    广播
    语音视频通话,会议

    TCP适合场景
    聊天室

    Http适合UDP吗?

    合适,Http3.0就是建立在UDP上的

    HTTP协议

    Http协议(Hyper Text Transfer Protocol):应用层协议
    目标是处理客户端服务端之间的通信
    在这里插入图片描述
    http将web应用抽象成一个请求返回的模型

    请求

    一次请求,分成头(Header)和体(Body)
    URL
    在这里插入图片描述

    返回

    一次返回,也分为头(header)和体(Body)
    状态码
    在这里插入图片描述

    网址(URL)

    在这里插入图片描述

    DNS

    (Domain Name System)域名解析器

    工作原理

    在这里插入图片描述
    1.先查询浏览器的本地缓存(通常在内存中)
    2.本地没缓存,查找到操作系统的hosts文件,该文件在linux的/etc/hosts
    3.上述步骤没有找到,dns会查询本地服务提供商(ISP)

    CDN

    将请求分散到全世界各地,分发流量,加快访问速度
    在这里插入图片描述
    CDN上无法部署业务逻辑,更新慢,无法保证一致性,比较适合 静态资源,比如图片、视频、脚本文件、样式文件等。(Nginx)

    常见请求头参数

    Content-Type
    • text/html:HTML格式
    • text/css:css文本
    • application/json: JSON数据格式
    • image/jpeg:jpg图片格式
    • text/plain:纯文本格式
    Origin:描述请求来源地址
    Accept

    HTTP协议协商能力的体现,用于建议服务端返回何种媒体类型(MIME Type)

    • */*代表所有类型(默认)
    • 多个类型用逗号隔开例如:text/html, application/json
    • Accept-Encoding:建议服务端发送哪种编码(压缩算法)
    • deflate, gzip;q=1.0, *;q=0.5
    • Accept-Language:建议服务端传递哪种语言
    • Accept-Language:fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
    Connection

    决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭。
    Http1.0 默认是 close
    Http1.1 后默认是 keep-alive

    HTTP的方法

    • GET:从服务器获取资源
    • POST:在服务器创建资源(幂等性)
    • PUT:在服务器修改资源
    • DELETE:在服务器删除资源

    状态码

    1xx:提供信息
    100 continue 101 切换协议(switch protocol)
    2xx:成功
    3xx:重定向
    4xx:客户端错误
    5xx:服务端错误

    2xx状态码

    200 – OK
    201 – Created 已创建
    202 – Accepted 已接收
    203 – Non-Authoritative Information 非权威内容
    204 – No Content 没有内容
    205 – Reset Content 重置内容
    206 – Partial Content 服务器下发了部分内容(range header)

    3xx状态码

    300 – Multiple Choices 用户请求了多个选项的资源(返回选项列表)
    301 – Moved Permanently 永久转移
    302 – Found 资源被找到(以前是临时转移)
    303 – See Other 可以使用GET方法在另一个URL找到资源
    304 – Not Modified 没有修改(缓存部分特别说明)
    305 – Use Proxy 需要代理
    307 – Temporary Redirect 临时重定向
    308 – Permanent Redirect 永久重定向

    4xx状态码

    400 – Bad Request 请求格式错误
    401 – Unauthorized 没有授权
    402 – Payment Required 请先付费
    403 – Forbidden 禁止访问
    404 – Not Found 没有找到
    405 – Method Not Allowed 方法不被允许
    406 – Not Acceptable 服务端可以提供的内容和客户端期待的不一样

    5xx状态码

    500 – Internal Server Error(内部服务器错误)
    501 – Not Implemented(没有实现)
    502 – Bad Gateway(网关错误)
    503 – Service Unavailable(服务不可用)
    504 – Gateway Timeout(网关超时)
    505 – HTTP Version Not Supported(版本不支持)

    HTTP缓存

    传统的HTTP协议层网络结构的三种实体:Web服务器,浏览器,代理

    Http缓存最重要的配置项为Cache-Control http返回头。不仅浏览器可以缓存,浏览器和服务器之间的HTTP代理服务器也可以缓存。

    在这里插入图片描述

    HTTP连接

    keep-alive

    多次请求复用一个TCP连接
    在这里插入图片描述

    keep-alive的断开
    • 单个请求:请求完成后,在timeout时间内没第二个请求进来则会关闭。
    • 多个请求:在一个请求响应之后,在 timeout 时间内有另一个请求进来,就会利用相同的 TCP 连接继续响应这个请求,直到没有更多请求进来,可以通过 max 字段设定最多响应的请求数。
    keep-alive是否是长连接

    keep-alive并不是长连接
    WebSocket:长连接,提供在HTTP协议退化成TCP协议的方式。让客户端和服务器之间保持很长时间的连接且不中断

    加密、解密和证书

    加密

    将明文消息变成不可读的密文内容,只有拥有解密方法的对象才能够将密文还原成加密前的内容。

    在这里插入图片描述

    对称加密

    加密和解密使用同一个密钥,且加密方和解密方都知道秘钥,如DES,3DES等

    在这里插入图片描述

    非对称加密

    非对称式加密就是加密和解密使用的不是同一个密钥,通常有两个密钥,称为“公钥”和 “私钥”,它们
    两个必须配对使用,否则不能打开加密文件。非对称加密安全性高,但速度慢,如RSA算法。
    在这里插入图片描述

    摘要算法

    将原文和摘要同时传输给接收方
    在这里插入图片描述
    特点:公开一致难碰撞

    场景举例:密码保存
    在这里插入图片描述
    场景举例:数据传输
    在这里插入图片描述

    HTTPS和HTTP2.0

    HTTPS

    应用层协议(有(SSL)加密后的证书)
    在这里插入图片描述
    Https采用对称加密的方式加密传输数据,使用对称加密的秘钥,采用非对称加密的方式进行协商。

    过程
    1.TCP协议三次握手
    2.服务器利用TCP将证书发送给浏览器
    3.浏览器通过本地Root CA验证网站证书
    4.浏览器用证书的公钥加密:协商对称加密的算法和密码、
    5.服务器响应,确定对称加密算法和密码
    6.会话建立(来往数据使用对称加密)

    常用的Linux网络指令

    ssh/scp 远程操作相关的
    ifconfig/netstat 查看本地网络状态
    ping/telnet 测试网络情况
    host/dig/nslookup dns查询
    curl/wget 模拟发送请求

    reboot 重启linux
    scp 文件名 用户名@机器名 :路径 远程复制文件指令
    scp file.txt user@remotehost:/home/user/

    netstat 查看本机网络使用状态
    netstat -ntlp | grep 9092 查看9092端口

    ping ip地址 可以查看丢包率

    telnet
    telnet www.baidu.com 80 连接主机

    TCP和UDP区别

    面向流(面向连接)vs面向报文
    TCP保证可靠性,UDP不保证可靠性
    BIOvsNIO,AIO
    TCP有延迟问题vsUDP有丢包问题
    UDP实现广播成本低
    TCP有三次握手四次分手的过程

    都是传输层协议

    TCP如何保证数据的顺序

    利用(seq,ack)编号确定封包的唯一性

    NIO优势

    reactive模型+非阻塞(减少线程切换)
    内核级别拷贝内存到JVM(减少系统调用)
    缓冲区增加数据处理的灵活性(clear/flip等操作)

    处理IO场景有着明显的性能优势(例如日志请求)

  • 相关阅读:
    PDF文件怎么解密?教你三种解密的方法
    微信小程序 - 小程序二维码迷之开发版
    Day21——二叉搜索树的最小绝对差、二叉搜索树中的众数 、二叉树的最近公共祖先
    git基本使用
    Redis优化之持久化
    [附源码]java毕业设计高考志愿填报系统
    2024三掌柜赠书活动第十三期:API安全技术与实战
    @Autowired 和 @Resource 的区别(为什么更推荐使用@Resource ?)
    Mybatis映射配置文件详解
    javaee之黑马乐优商城3
  • 原文地址:https://blog.csdn.net/Forbidden_City/article/details/132917247