计算机网络

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场景有着明显的性能优势(例如日志请求)

相关推荐
明月看潮生1 小时前
编程与数学 03-002 计算机网络 11_域名系统(DNS)
计算机网络·青少年编程·编程与数学
BAOYUCompany3 小时前
暴雨服务器更懂人工智能+
运维·服务器·人工智能
一只小bit3 小时前
Linux网络:阿里云轻量级应用服务器配置防火墙模板开放端口
linux·网络·阿里云
BachelorSC5 小时前
【网络工程师软考版】网络安全
网络·安全·web安全
蝶恋舞者6 小时前
怎样让阿里云服务器(centos)有界面
服务器·阿里云·centos
(Charon)6 小时前
【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
网络·网络协议·http
Bryce李小白6 小时前
Kotlin实现Retrofit风格的网络请求封装
网络·kotlin·retrofit
Lovyk7 小时前
Linux网络管理
服务器·网络·php
无敌的牛8 小时前
Linux重定向的理解
linux·运维·服务器
MC皮蛋侠客8 小时前
AsyncIOScheduler 使用指南:高效异步任务调度解决方案
网络·python·fastapi