计算机网络

本文详细解读了OSI七层模型以及TCP/IP协议中的各个层次,包括它们的功能、工作原理和应用场景。重点介绍了TCP的三次握手和四次分手过程,以及TCP和UDP的区别。同时涵盖了HTTP、HTTPS和NIO的优势等内容。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值