计算机网络笔记

计算机网络

OSI模型
应用层(Application Layer)
  1. 应用层位于OSI模型最上方
  2. 只关心业务逻辑,不关心数据的传输
表示层(Presentation Layer)

负责协商用于传输的数据格式,并转换数据格式

在这里插入图片描述

会话层(Session Layer)
  1. 负责管理两个连网实体间的连接
  2. 功能及特点:建立连接,维持通信,释放连接

在这里插入图片描述

传输层(Transport Layer)

负责将数据从一个实体(一个服务或应用)传输到另一个实体,但不负责数据传输的方式。
在这里插入图片描述
传输层的能力:

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

负责把一个封包从一个IP地址传输到另一个IP地址
在这里插入图片描述

数据链路层(Data Link Layer)

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

物理层(Physical layer)

封装和隐藏具体的传输手段,并且提供稳定的传输接口
在这里插入图片描述
OSI的问题
1.分层设计较为臃肿,并非每一层都为必要的
在这里插入图片描述

互联网协议群

概述:
· OSI无实际可行的方案
· 罗伯特.卡恩和文顿.顿瑟夫提出的TCP协议
5个问题
1.报文拆分 2.增加协议头 3.数据在相邻设备间数据传递 4.路由和寻址 5.数据重组

报文拆分:

  • 数据量大,网络底层设备不支持
  • 复用路径
    在这里插入图片描述
    增加协议头:
    数据分块后在接收端需要重组,所以需要使用头部来添加一些描述字段
    在这里插入图片描述
    数据在相邻设备间数据传递:
    在这里插入图片描述
    路由和寻址:
    路由算法:通过算法寻找下一个要到达的节点
    在这里插入图片描述
    数据重组:
    在这里插入图片描述
    TCP/IP协议群的5层模型
    应用层:数据从一个应用发往另一个应用的过程
    传输层:主机到主机之间的传输
    网络层:提供路由和寻址
    数据链路层:两个节点之间的物理连接
    物理层:负责0-1信号的传输

5层模型和OSI的区别
删除了会话层,会话是虚拟概念,不是必须的

TCP协议
概述
TCP全名是(Transport Control Protocal),是一个可以提供可靠的、支持全双工、连接导向的协议,因此在客户端和服务端之间传输数据的时候,是必须先建立一个连接的。
1.什么是连接
		是虚拟、抽象的概念
		能让两个通信的程序间确保彼此都在线
		加快相应请求速度
		连接也被称为会话(Session)
		使通信更稳定、安全
		消耗更多资源
2.什么是全双工
		单工:任务时刻数据只能单向发送
		半双工:允许数据在两个方向上传输,在某一时刻,只允许数据在一个方向上传输
3.如何保证正确性 
 		保证无损传输
 		使无须的数据恢复原有顺序
 		多播时多个接收方都能无损拿到数据

建立连接的过程(三次握手)
关闭连接的过程(四次挥手)
传输数据-报文拆分
- 应用层数据很大时无法一次性传输完
- 拆分后可实现并行传输
传输数据-顺序保证
在这里插入图片描述
- TCP序号:发送序号(Seq)、接收序号(Ack)
- 一个端的发送序号是另一个端的接收序号
TCP头
TCP报文段:TCP头部 + TCP段数据
- 源端口:描述发送方机器上的应用
- 目标端口:描述接收方服务器上的应用
- 发送序号(Seq)/接收序号(Ack)
TCP头-标志位
- NS、CWR、ECN:TCP扩展协议
- ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题
- URG:紧急标志位
- SYN(Synchronize Sequence Numbers):同步序号,也就是在建立连接。
- FIN:终止连接
- ACK(Achnowledgment):相应。
- PSH(push):传送数据
- RST(Reset Connection):重置连接
TCP协议周边配置
- 纠错能力:保证数据可靠性;
- 流控能力:协同两边速率,保证可靠性;
纠错和Checksum
- TCP拥有一个16bit的Checksum字段
- Checksum是一个函数,把原文映射到一个不可逆的16bit的编码中这样就可以知道原文传输过程中有没有发生变化
流控能力
- 主要目标:让发送方和接收方协商一个合理的收发速率,让两边都可以稳定的工作。
- 利用滑动窗口

IP协议
基本概念

IP协议(Internet Protocol):网络层协议。
传输层协议 网络层协议 链路层协议(局域网内部传输)
IP协议可能遇到的问题
封包损坏、丢包、重发、乱序
网络层需要解决的3个问题
延迟、吞吐量、丢包率
IP协议的架构
IP协议目前主要有两种架构,IPv4和IPv6,IPv4是目前应用最广泛的互联网协议。
IP协议的工作原理
1 分片(Fragmentation)
2 增加协议头(IP Header)
3 延迟、吞吐量、丢包率
4 寻址(Addressing)
5 路由(Routing)
分片
把数据切分成片
适配底层传输网络
增加协议头
- 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个终端传送到另一个终端需要的时间
吞吐量:单位时间内可以传输的平均数据量
丢包率:发送出去的封包没有到达目的地的比例
寻址
1 找到顶层网络号和子网掩码与运算结果
2 再找下一级
路由
若寻找的IP地址不在局域网中,需要路由找到去往对应网络的路径
IP地址和子网掩码位与的过程是由路由算法实现的
1.寻找网络编号 2.查询路由记录 3.数据转发

IPv6协议

背景
IPv4只能支持43亿设备,不够用。
拆分子网:NAT协议转换

工作原理

IPv6和IPv4两者工作原理相似,为切片、增加封包头、路由(寻址)几个阶段。
host-to-host协议 IPv6协议(切片 封包) 数据链路层

和IPv4的主要区别
地址:
1.数量
2.分割符号:ipv4用.分割,每一个8位,用0-255的数字表示。ipv6用:分割,每一个是16位,用4个十六进制数字表示。

UDP协议

背景
1980年由科学家David P.Reed提出
协议简单,搭建在IP协议之上
尽可能的减少通信机制,速度非常快
UDP协议介绍
全程:User Datagram Protocol,用户数据报文协议
定义:在传输层提供直接发送报文(Datagram)的能力。Datagram是数据传输最小单位。
目标:发送报文,无法拆分数据
UDP的封包格式
设计目标:允许用户直接发送报文的情况下最大限度的简化应用的设计
- Source Port:源端口号
- Destination Port:目标端口号
- Length:消息体长度
- Checksum:检查封包是否出错
- Data octets:一个字节一个字节的数据。Octet是8位
UDP和TCP的区别
本质:tcp:提供可靠的网络传输;udp:提供报文交换,简化协议
可靠性:tcp:可靠;udp:不可靠
顺序:tcp:有;udp:无
负载:tcp:负载大;udp:负载小(音视频)
广播场景:tcp:不合适;udp:合适

Wireshark

是世界上应用最广泛的网络协议分析器
在微观层面上看到整个网络正在发生的事情

功能集:
- 深入检查数百个协议,并不断添加更多协议
- 实时捕获和离线分析
- 支持Windows、Linux、macOS、Solaris、FreeBSD、NetBSD和许多其他平台
- 提供GUI浏览,也可以通过TTY
- VoIP支持
- Gzip支持
- IpSec支持

同步多线程模型

在这里插入图片描述
请求先到达网卡,网卡把请求传给操作系统,操作系统会把请求放到一个队列中,派发线程发生accept操作的时候,从队列中拿出一个一个的请求,创建Socket对象,派发线程会拿到Socket对象的句柄FD,交给工作线程处理,工作线程可以从socket对象中拿到对应的数据进行处理,处理完将返回的内容通过socket对象传回给客户端。

NIO
在这里插入图片描述

HTTP协议

http协议(Hyper Text Transfer Protocol):应用层协议
目标:是处理客户端和服务端之间的通信

Web应用

请求(Request):一次请求,分成头(Header)和体(Body)。下面是一个请求头+消息体的示例:

URL(Uniform Resource Locator):用于在互联网上定位(Locate)一个资源(Resource)。
URL也称为网址,比如:https://www.example.com:8080/books?id=1000
scheme://host:port/path?query#fragment

DNS工作原理

DNS(Domain Name System):域名解析系统。(根服务器,顶级域名服务器,权威域名服务器)

DNS Query的分级缓存策略
1.先查询浏览器的本地缓存(通常在内存中)
2.本地没缓存,查找操作系统的hosts文件,该文件在linux中在/etc/hosts里
3.上述步骤没有找到,DNS会查询本地服务提供商(ISP)
4.ISP没找到,请求指向Root根服务器,返回顶级域名服务器地址
5.浏览器发送请求给顶级域名服务器,返回权威域名服务器地址
6.浏览器发送Lookup请求给权威域名服务器,找到具体DNS记录,返回给浏览器

DNS概述
DNS的数据以记录形式存储,就叫DNS记录。DNS记录的种类非常多,有30多种。每条DNS记录描述了网址(URL)的一种关系。
A记录
功能:定义主机的IP地址
定义www.example.com的ip地址
www.example.com. IN A 139.18.28.5;
CNAME记录(Canonical Name Record)
功能:定义域名的别名
定义www.example.com的别名
www.example.com. IN CNAME example.com.
MX记录(Mail exchanger record)
功能:定义邮件服务器所在的位置。
happy.example.com作为邮件服务域名 IN MX happy.example.com.
A记录描述邮件服务器IP happy.example.com. IN A 123.123.123.123
NS记录(Name Server Record)
功能:定义DNS信息服务器所在的位置。
定义为zhihu.com 提供dns信息的服务器
zhihu.com. 52908 IN NS ns4.dnsv5.com
SOA记录(Start of Authority Record)
功能:定义在多个ns服务器中哪个是主服务器。
IN SOA ns3.dnsv5.com. 是主服务器 ns3.dnsv5.com. enterprise3dnsadmin.dnspod.com.

TXT记录
功能:提供一个文本信息。
zhihu.com. 600 IN TXT “google-site-verification=q42VyLbU7bjRv5xb2279AX9jJ3Vuxp-e4XG_f1EQRGk”

内容分发网络(CDN)

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

请求头/返回头

HTTP协议通过请求头和返回头控制协议工作。无论是请求头还是返回头都是Key/Value的形式。
Content-Length:发送/接收Body内容的字节数
User-Agent:这个字段可以帮助统计客户端用了什么浏览器、操作系统等
Content-Type:请求的时候,告知服务端数据的媒体类(MediaType/MIME Type).返回的时候告知客户端,数据的媒体类型。
Origin:描述请求来源地址 用来实现安全
scheme://host:port 不含路径 可以是null
Accept:是HTTP协议协商能力的体现,用于建议服务端返回何种媒体类型(MIME Type)
*/*代表所有类型(默认)
多个类型用逗号隔开:text/html,application/json
Accept-Encoding:建议服务端发送哪种编码(压缩算法)
Referer:告诉服务端打开当前页面的上一张页面的URL
非浏览器环境有时候不发送Referer(或者虚拟Referer,通常是爬虫)
Connection:
决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭。
Http1.0默认是close
Http1.1后默认是keep-alive

HTTP的方法
GET:从服务器获取资源
POST:在服务器创建资源
PUT:在服务器修改资源(幂等性)
DELETE:在服务器删除资源
OPTION:跨域部分讲解
TRACE:用于显示调试信息 多数网站不支持
CONNECT:代理部分讲解
PATCH:对资源进行部分更新(极少用)
状态码
1xx:提供信息
100 continue 101 切换协议(switch protocol)
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永久重定向
301与308区别:
共同点:资源被永久移动到新的地址
差异:客户端收到308请求后,延用旧的method(POST/GET/PUT)到新地址
客户端收到301请求后,通常用户会向新地址发起GET请求
302/303/307
共同点:资源临时放到新地址
差异:302是http1.0提出的,最早叫做Moved Temporarily;很多浏览器实现的时候没有遵照标准,把所有请求都重定向为GET
1999年标准委员会增加了303和307,并将302重新定义为Found。
303告诉客户端使用GET方法重定向资源
307告诉客户端使用原请求的method重定向资源
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服务器 浏览器 代理
缓存:存储将要使用的数据
原理:使用者先到缓存中查询数据,缓存命中,直接返回,否则,查询数据库
缓存条目:通常是Key/Value结构。如HTTP缓存,通常以Key为URL;Value通常不仅仅只包括数据,还会包括一些描述字段,比如缓存的失效时间等。
缓存置换:缓存满了后,每次创建新的缓存条目,就会删除旧的缓存条目。
LRU(LRU-Least recently used)缓存置换算法:
HTTP缓存
HTTP缓存最重要的配置项为Cache-Control HTTP返回头。不仅浏览器可以缓存,浏览器和服务器之间的HTTP代理服务器也可以缓存。

什么是代理服务器?
代理服务器接收一个请求,然后把请求转发给另一个服务器;从另一个服务器接收结果,然后再返回给请求方。根据工作方式的不同,分成正向代理和反向代理。
正向代理:把要请求的网址(资源)发送给代理服务器,由代理服务器向目标发送请求后获取资源再返回给请求方。
反向代理:当请求方向一个网址发送一个请求的时候,请求方意识不到,请求的其实是一个反向代理服务器,这个代理服务器将请求代理给了内部的网络。
强制缓存
强制缓存行为是强制执行的,在缓存到期前,一定会使用浏览器的缓存。
Cache-Control:public,max-age:10000
	允许所有中间方缓存	缓存10000s。超时时间就再次去服务器那数据
Cache-Control:public
Expires:Fri,16 Oct 2020 02:31:07 GMT
	超过Expires限定的日期缓存就会失效
如果 max-age和Expires都有,Expires会被忽略。
协商缓存
协商缓存的行为是基于变更协商的。在缓存条目对应的资源发生变化前,都使用浏览器缓存。因此协商缓存必须每次都请求服务端。

Etag
服务端想实现协商缓存时可返回ETag,资源不变,ETag的数值也不会改变
Last-Modifed(Depreciated)
基于变更时间的协商缓存方案

其他前端缓存

LocalStorage SessionStorage Android利用端能力

keep-alive

keep-Alive:多次请求复用一个TCP连接
Connection:Keep-Alive;timeout=5,max=1000

keep-alive的断开
单个请求:请求完成后,在timeout时间内没第二个请求进来则会关闭。
多个请求:在一个请求相应之后,在timeout时间内由另一个请求进来,就会利用相同的TCP连接继续响应这个请求,直到没有更多请求进来,可以通过max字段设定最多响应的请求数。
keep-alive并不是长连接
WebSocket:长连接,提供在HTTP协议退化成TCP协议的方式。让客户端和服务器之间保持很长时间的连接且不中断。

加密、解密和证书
加密
将明文信息变成不可读的密文内容,只有拥有解密方法的对象才能够将密文还原成加密前的内容
对称加密
对称加密:加密/解密用一个秘钥,且加密方和解密方都知道秘钥,如DES,3DES等。
非对称加密
非对称加密:加密用一个秘钥,解密用另一个秘钥且加密方一般有2个秘钥,解密方有一个解密秘钥。非对称加密安全性高,但速度慢,如RSA算法。
摘要算法
摘要算法:就是将原文和摘要同时传输给接收方
特点:公开,一致,难碰撞
Alice和Bob私下签协议

在这里插入图片描述###### 权威机构证书
Alice和Bob都去第三方机构注册账号,然后上传自己的公钥给第三方机构。第三方机构可以给Alice和Bob办一个证书,证书里含有他们的公钥。
在这里插入图片描述信任链条
情况1:Bob机器上有预装证书,Bob和Alice签约的时候,就会用这个预装的根证书验证Alice证书的签名,要使用权威机构的公钥(而公钥在证书里)。
情况2:Bob机器上没有预装证书,而是预装了给权威机构颁发证书的机构的证书。

HTTPS 和 HTTP2
HTTPS
HTTPS(HTTP Over SecureSocket Layer):应用层协议

在这里插入图片描述###### HTTPS协议工作原理
HTTPS采用对称加密的方式加密传输的数据,然后对称加密的秘钥,采用非对称加密的方式进行协商。

在这里插入图片描述在这里插入图片描述

HTTPS2.0 协议概念
HTTPS协议的目标是解决HTTP协议的安全问题,HTTP2.0则是为了解决性能问题

在这里插入图片描述HTTP2.0 解决方案

在这里插入图片描述在这里插入图片描述HTTP 2.0的头部压缩

同源策略

定义:禁止一个源(origin)的脚本和文档和另一个源的脚本和文档交互
两个URL的protocol,port和host相同,那么同源

思考:
1.为什么不禁用不同源的js?
很多js是在CDN服务器上的,禁了就加载不了了
2.应不应该允许不同源的js修改DOM?
允许
3.应不应该允许不同源的js获取远程图片内容?
不允许
4.应不应该允许网站提交数据到不同源的服务器?
不允许
5.应不应该允许网址提交cookie到不同源的服务器?
不允许
解决方案:
1.jsonp(前端方案)
2.跨域资源公用(CORS)
跨域资源公用(Cross-Origin Resource Sharing)使用额外HTTP头允许指定的源和另一个源进行交互
在这里插入图片描述 3.代理
利用代理将不同源的资源代理到同源的资源
在这里插入图片描述

Linux网络指令
ssh/scp
ifconfig/netstat
ping/telnet
host/dig/nslookup
curl/wget

TCP/IP协议群做了哪些事情?
1.报文拆分
2.增加协议头
3.数据传输
4.路由和寻址
5.数据重组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值