计算机网络

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等

非对称加密

加密用一个秘钥,解密用另一个秘钥且加密方一般有2个秘钥,解密方有一个秘钥。非对称加密安全性高,但速度慢,如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场景有着明显的性能优势(例如日志请求)

相关推荐
KookeeyLena51 小时前
云手机可以挂在服务器使用吗?
运维·服务器·智能手机
hellojackjiang20111 小时前
即时通讯框架MobileIMSDK的H5端开发快速入门
网络·即时通讯·im开发
老汉忒cpp1 小时前
手动部署并测试内网穿透(ssh 和 nginx)
运维·服务器
有时间要学习1 小时前
Linux——应用层自定义协议与序列化
linux·服务器·网络
hardStudy_h1 小时前
Linux——常用系统设置和快捷键操作指令
linux·运维·服务器
Tony聊跨境1 小时前
什么是 SSL 代理?
网络·网络协议·ssl
我叫啥都行2 小时前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
Monodye2 小时前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
汀、人工智能3 小时前
报错error: RPC failed,curl 16 Error in the HTTP2 framing layer解决方法
网络·git·网络协议·rpc
qq 1778036223 小时前
智能新时代,游戏盾守护顺畅体验
运维·服务器·网络·游戏·云计算·ddos·ip