OSI模型指的是Open System Interconnection Reference Model,即开放式系统互联模型。它是世界上第一个试图在世界范围内规范网络标准的框架。
物理层,数据链路层,网络层,传输层,会话层,表现层,应用层
位于OSI模型最上方
只关心业务逻辑
,不关心数据的传输
负责协商用户传输的数据格式
,并转换数据格式
负责管理两个连网实体间的连接
功能及特点:建立连接
,维持通信
,释放连接
负责将数据从一个实体(一个服务或应用)传输到另一个实体,但不负责数据传输的方式
传输层的能力:
例如上海搬去广州
负责把一个封包从一个ip地址传输到另一个ip地址
确保两个临近设备间数据的传输,并隐藏底层实现
帧同步:两个设备直接传输时的协商速率问题
数据纠错
封装和隐藏具体的传输手段,并且提供稳定的传输接口
比如:电缆、光纤、蓝牙等
应用层,传输层,网络层,数据链路层,物理层
应用层:数据从一个应用发往另一个应用的过程
传输层:主机到主机之间的传输
网络层:提供路由和寻址
数据链路层:两个节点之间的物理连接
物理层:负责0-1信号的传输
报文拆分、增加协议头、数据在相邻设备间数据传输、路由和寻址、数据重组
描述字段
可选协议
TCP全名是(Transport Control Protocol),是一个可以提供可靠的、支持全双工、连接导向的协议,因此在客户端和服务端之间传输数据的时候,必须先建立一个连接
。
三次握手过程
客户端发送SYN
服务端针对客户端的SYN给出ACK
服务端发送SYN
客户端发送ACK
四次分手的过程
客户端发送断开请求FIN
服务器收到请求,发送ACK
服务端经过一个等待(结束业务),确定关闭连接,发送FIN
客户端收到FIN,处理完自身的业务后发送ACK
报文拆分
添加TCP请求头
数据重组
应用层数据无法一次性传输完成
可以拆分后并行传输
**TCP发送序号(Seq)就是接受序号(Ack)**
(seq等于ack)
一个端发送的序号是另一个端的接受序号
源端口:描述发送方机器上的应用
目标端口:描述接收方服务器上的应用
发送序号(seq)/接受序号(Ack)
TCP扩展协议:NS、CWR、ECE
ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题
URG:紧急标志位
SYN(Synchronize Sequence Numbers):同步序号,就是建立连接
FIN:终止连接
ACK(Achnowledgment):响应
PSH(push):传送数据
RST(Reset Connection):重置连接
纠错能力:保证数据可靠性;
流控能力:协同两边速率,保证可靠性;
拥塞控制能力:确定网络的拥堵情况和传输速度
TCP拥有一个16bit的Checksum字段
Checksum是一个函数
,把原文映射到一个不可逆的16bit的编码中
这样就可以知道原文传输过程中有没有发送变化
主要目标:让发送方和接收方协商一个合理的收发速率
,让两边都可以稳定
工作
利用滑动窗口
Internet Protocol
:网络层协议
延迟
吞吐量
丢包率
IP协议目前主要有两种,IPv4和IPv6,IPv4目前是应用最广泛的
互联网协议
分片,增加协议头,延迟、吞吐量、丢包率,寻址,路由
把数据切分成片
适配底层传输网络
协议头
延迟: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地址和子网掩码位与的过程是由路由算法
实现的
背景
IPv4只能支持43亿设备,不够用。
IPv6和IPv4两者工作原理相似,为切片
、增加封包头
、路由(寻址)
几个阶段。
共16位
,IPv6有8个16位,共128位
.
分割,如103.28.7.35 。每一个是8位,用0-255的数字表示。:
分割,如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
UDP协议
User Datagram Protocol 用户数据报文协议,允许丢包
协议简单,搭建在IP协议之上
尽可能减少通信机制,速度非常快
该协议的RFC只有两页
在传输层提供直接发送报文(datagram)的能力
发送报文,无法拆分数据
UDP的封包格式
Source Port :源端口号
Destination Port:目标端口号
Length:消息体长度
Checksum:检查封包是否出错
Data octets:一个字节一个字节的数据。Octet是8位。
UDP和TCP
本质:
UDP适合场景
影视音乐传输可以使用UDP,允许丢包
广播
语音视频通话,会议
TCP适合场景
聊天室
Http适合UDP吗?
合适,Http3.0就是建立在UDP上的
Http协议(Hyper Text Transfer Protocol):应用层协议
目标是处理客户端
和服务端
之间的通信
http将web应用抽象成一个请求返回的模型
一次请求,分成头(Header)和体(Body)
URL
一次返回,也分为头(header)和体(Body)
状态码
(Domain Name System)域名解析器
1.先查询浏览器的本地缓存
(通常在内存中)
2.本地没缓存,查找到操作系统的hosts文件,该文件在linux的/etc/hosts
中
3.上述步骤没有找到,dns会查询本地服务提供商(ISP)
将请求分散到全世界各地,分发流量,加快访问速度
CDN上无法部署业务逻辑,更新慢,无法保证一致性,比较适合 静态资源
,比如图片、视频、脚本文件、样式文件等。(Nginx)
HTTP协议协商能力的体现,用于建议服务端返回何种媒体类型(MIME Type)
决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭。
Http1.0 默认是 close
Http1.1 后默认是 keep-alive
1xx:提供信息
100 continue 101 切换协议(switch protocol)
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
200 – OK
201 – Created 已创建
202 – Accepted 已接收
203 – Non-Authoritative Information 非权威内容
204 – No Content 没有内容
205 – Reset Content 重置内容
206 – Partial Content 服务器下发了部分内容(range header)
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 永久重定向
400 – Bad Request 请求格式错误
401 – Unauthorized 没有授权
402 – Payment Required 请先付费
403 – Forbidden 禁止访问
404 – Not Found 没有找到
405 – Method Not Allowed 方法不被允许
406 – Not Acceptable 服务端可以提供的内容和客户端期待的不一样
500 – Internal Server Error(内部服务器错误)
501 – Not Implemented(没有实现)
502 – Bad Gateway(网关错误)
503 – Service Unavailable(服务不可用)
504 – Gateway Timeout(网关超时)
505 – HTTP Version Not Supported(版本不支持)
传统的HTTP协议层网络结构的三种实体:Web服务器,浏览器,代理
Http缓存最重要的配置项为Cache-Control
http返回头。不仅浏览器可以缓存,浏览器和服务器之间的HTTP代理服务器也可以缓存。
多次请求复用一个TCP连接
keep-alive并不是长连接
WebSocket:长连接,提供在HTTP协议退化成TCP协议的方式。让客户端和服务器之间保持很长时间的连接且不中断
将明文消息变成不可读的密文内容,只有拥有解密方法的对象才能够将密文还原成加密前的内容。
加密和解密使用同一个密钥,且加密方和解密方都知道秘钥,如DES,3DES等
非对称式加密就是加密和解密使用的不是同一个密钥,通常有两个密钥,称为“公钥”和 “私钥”,它们
两个必须配对使用,否则不能打开加密文件。非对称加密安全性高,但速度慢,如RSA算法。
摘要算法
将原文和摘要同时传输给接收方
特点:公开
,一致
,难碰撞
场景举例:密码保存
场景举例:数据传输
应用层协议(有(SSL)加密后的证书)
Https采用对称加密
的方式加密传输数据,使用对称加密的秘钥,采用非对称加密的方式进行协商。
过程
1.TCP协议三次握手
2.服务器利用TCP将证书发送给浏览器
3.浏览器通过本地Root CA验证网站证书
4.浏览器用证书的公钥加密:协商对称加密的算法和密码、
5.服务器响应,确定对称加密算法和密码
6.会话建立(来往数据使用对称加密)
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有三次握手四次分手的过程
都是传输层协议
利用(seq,ack)编号确定封包的唯一性
reactive模型+非阻塞(减少线程切换)
内核级别拷贝内存到JVM(减少系统调用)
缓冲区增加数据处理的灵活性(clear/flip等操作)
处理IO场景有着明显的性能优势(例如日志请求)