1. 计算机网络根底
1.1 主机间的通信形式
- 客户端 - 服务器(C/S)
客户端是服务的申请放,服务器是服务的提供方。
- 对等(P2P)
不必辨别谁是客户端,谁是服务器,单方都可能向对方申请与提供服务。
1.2 电路 & 分组替换
- 分组替换
每个分组由首部和尾部组成,蕴含源地址和目标地址等管制信息,在同一个传输线路上同时传输多个分组互不影响,因而在同一条传输线路上容许同时传输多个分组,即分组替换不会占用传输线路。
- 电路替换
电路替换用于电话通信零碎,两个用户之间建设通信前须要有一条专用的物理链路,而且在通信过程中始终占用该链路。因为通信过程中不可能始终在应用传输线路,因而电路替换对线路利用率很低,通常不到 10%.
1.3 时延
- 排队时延
分组在路由器的输出和输入队列中排队期待所需工夫,取决于以后网络的通信量;
- 解决时延
主机或路由器接管到分组时进行解决所需工夫,个别这些解决包含剖析首部、从分组中提取数据、进行过错校验或查找适当路由等;
- 传输时延
主机或路由器传输数据帧所需工夫:
$$delay = length(bit)/v(bit/s)$$
其中 length
示意数据帧的长度,v
示意传输速率;
- 流传时延
电磁波在信道中传输所需工夫,电磁波传播速度有限靠近于光速:
$$delay = length(m)/v(m/s)$$
其中 length
示意信道的长度,v
示意电磁波在信道中的传播速度;
1.4 体系结构
体系结构 | 协定 |
---|---|
物理层 | RJ45、CLOCK、IEEE802.3(中继器、集线器) |
数据链路 | PPP、FR、HDLC、VLAN、MAC(网桥、交换机) |
网络层 | IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) |
传输层 | TCP(HTTP/S、FTP、POP3、SMTP、TENET、SSH)、UDP(BOOTP、NTP、DHCP)、SPX |
会话层 | NFS、SQL、NETBIOS、RPC |
表示层 | JPEG、MPEG、ASII |
应用层 | FTP、DNS、Telenet、SMTP、HTTP、WWW、NFS |
- OSI 七层体系结构
为把在一个网络结构下开发的零碎与在另一个网络结构下开发的零碎互联起来,以实现更高一级的利用,使异种机之间的通信成为可能,便于网络结构标准化,国际标准化组织(ISO)于 1984 年造成了开放系统互连参考模型 OSI/RM(Open Systems Interconnection Reference Model,简称 OSI)的正式文件。
- 物理层(Physical,PH): 传递信息须要利用一些物理传输媒体,如双绞线、同轴电缆、光纤等。物理层的工作就是为下层提供一个物理的连贯,以及该物理连贯体现进去的机械、电气、性能和过程个性,实现通明的比特流传输。在这一层,数据还没有组织,仅作为原始的比特流提交给下层——数据链路层。
- 数据链路层(Data-link,D):数据链路层负责在 2 个相邻的结点之间的链路上实现无差错的数据帧传输。每一帧包含肯定的数据和必要的管制信息,在接管方接管到数据出错时要告诉发送方重发,直到这一帧无差错地达到接管结点,数据链路层就是把一条有可能出错的理论链路变成让网络层看起来像不会出错的数据链路。实现的次要性能有:帧的同步、差错控制、流量管制、寻址、帧内定界、通明比特组合传输等。
- 网络层(Network,N):网络中通信的 2 个计算机之间可能要通过许多结点和链路,还可能通过几个通信子网。网络层数据传输的单位是分组(Packet)。网络层的次要工作是为要传输的分组抉择一条适合的门路,使发送分组可能正确无误地依照给定的目标地址找到目标主机,交付给目标主机的传输层。
- 传输层(Transport,T):传输层的次要工作是通过通信子网的个性,最佳地利用网络资源,并以牢靠与经济的形式为 2 个端系统的会话层之间建设一条连贯通道,以通明地传输报文。传输层向上一层提供一个牢靠的端到端的服务,使会话层不晓得传输层以下的数据通信的细节。传输层只存在端系统中,传输层以上各层就不再思考信息传输的问题了。
- 会话层(Session,S):在会话层以及以上各层中,数据的传输都以报文为单位,会话层不参加具体的传输,它提供包含拜访验证和会话治理在内的建设以及保护利用之间的通信机制。如服务器验证用户登录便是由会话层实现的。
- 表示层(Presentation,P):这一层次要解决用户信息的语法示意问题。它将要替换的数据从适宜某一用户的形象语法,转换为适宜 OSI 外部示意应用的传送语法。即提供格式化的示意和转换数据服务。数据的压缩和解压缩、加密和解密等工作都由表示层负责。
- 应用层(Application,A):这是 OSI 参考模型的最高层。应用层确定过程之间通信的性质以满足用户的需要,以及提供网络与用户软件之间的接口服务。
- 五层协定
咱们日常网络中应用的体系结构,总共能够分为 5 层,别离是:
- 应用层:为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协定。数据单位为报文。
- 传输层:为过程提供通用数据传输服务。因为应用层协定很多,定义通用的传输层协定就能够反对一直增多的应用层协定。运输层包含两种协定:传输控制协议 TCP,提供面向连贯、牢靠的数据传输服务,数据单位为报文段;用户数据报协定 UDP,提供无连贯、尽最大致力的数据传输服务,数据单位为用户数据报。TCP 次要提供完整性服务,UDP 次要提供及时性服务。
- 网络层:为主机提供数据传输服务。而传输层协定是为主机中的过程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
- 数据链路层:网络层针对的还是主机之间的数据传输服务,而主机之间能够有很多链路,链路层协定就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
- 物理层:思考的是怎么在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信伎俩的差别,使数据链路层感觉不到这些差别。
- TCP/IP
不严格遵循 OSI 分层概念,只有四层,相当于将五层协定中的数据链路层和物理层合并为网络结构层。
2. 五层协定详解
2.1 物理层
物理层上传送的数据单位是比特,其作用是实现相邻计算机节点间比特流的通明传送,尽可能屏蔽调具体传输介质和屋里设施的差别。依据信息在传输线上的传输方向,能够分为如下三种通信形式:
- 单工通信:单向传输
- 半双工通信:双向交替传输
- 全双工通信:双向同时传输
2.2 链路层
两台主机之间的数据传输,总是在一段一段的链路上进行传送的,此时就须要应用专门的链路层协定。在两个相邻节点间传输数据时,数据链路层将网络层交下来的 IP 数据包组装成帧,在两个相邻节点间的链路上传送帧,每帧包含数据和必要的管制信息(如同步信息,地址信息,差错控制等)。
2.3 网络层
互联网的外围,向上提供数据报服务,通过 IP 协定将异构的物理网络连接起来。其工作是抉择适合的网间路由和替换节点,从而确保计算机通信的数据及时传送,配套应用的有如下三个协定:
- 地址解析协定 ARP
- 网际管制报文协定 ICMP
- 网际组治理协定 IGMP
2.4 传输层
传输层提供了过程间的逻辑通信,负责向两台主机过程之间的通信提供通用的 数据传输服务,向高层用户屏蔽网络层的外围细节,这一层中次要波及 UDP 和 TCP 两个协定。
2.5 应用层
应用层的工作是通过利用过程之间的交互来实现特定网络应用,应用层协定定义的是利用过程间的通信和交互的规定。
对于不同的网络应用须要不同的应用层协定,常见的有 DNS、HTTP、SMTP 协定等;
3. HTTP
3.1 HTTP 根底
- URI(对立资源标识符)
URI = URL + URN
URL:对立资源 定位 符,标示一个具体的资源地位
URN:对立资源名称
- 申请报文
次要由以下三局部形成:
- 申请行:包含申请办法、URL、协定 / 版本
- 申请头:
Request Header
- 申请注释
- 响应报文
次要由以下三局部形成:
- 状态行
- 响应头
- 响应注释
3.2 HTTP 办法
办法 | 阐明 |
---|---|
GET |
申请指定页面信息,并返回实体主体 |
POST |
传输实体主体,向指定资源提交数据进行解决申请,数据被蕴含在申请体中,可能会导致新资源的建设和 / 或已有资源的批改 |
PUT |
从客户端向服务器传送的数据取代指定文档的内容,上传文件,不带验证机制,存在安全性问题 |
DELETE |
申请服务器删除指定页面,个别是删除文件 |
HEAD |
获取报文首部,相似于 GET ,但不返回报文实体主体局部,次要用于确认 URL 的有效性以及资源更新工夫等 |
PATCH |
对资源进行局部批改 |
OPTIONS |
查问反对的办法,查问指定的 URL 能反对的办法,返回 Allow: GET,POST,HEAD,OPTIONS 等内容 |
CONNECT |
要求在于代理服务器通信时建设隧道,应用 SSL 和 TLS 协定将通信内容加密后经网络隧道传输 |
TRACE |
追踪门路,服务器将通信门路返回给客户端 |
3.3 HTTP 状态码
服务器返回的响应报文中的第一行是状态行,蕴含状态码以及起因短语,用于告知客户端申请的后果,次要分为如下类型,常见的状态码如下:
- 1xx – 信息型:服务器收到申请,须要请求者持续操作;
- 2xx – 胜利型:申请胜利收到,了解并解决;
- 3xx – 重定向:须要进一步操作以实现申请;
- 4xx – 客户端谬误:申请蕴含语法错误或无奈实现申请;
- 5xx – 服务器谬误:服务器在解决申请的过程中产生了谬误;
状态码 | 状态 | 阐明 |
---|---|---|
100 | Continue |
到目前为止很失常,客户端能持续发送申请或疏忽该响应 |
200 | OK |
示意申请胜利 |
204 | No Content |
申请曾经胜利解决,但返回的响应报文不含实体的主体局部,个别只须要从客户端向服务器发送信息,而无需返回数据时应用 |
206 | Partial Content |
示意客户端进行范畴申请,响应报文蕴含由 Content-Range 指定范畴的实体内容 |
301 | Moved Permanently |
永久性重定向 |
302 | Found |
临时性重定向 |
303 | See Other |
和 302 性能雷同,但 303 明确要求客户端应该采纳 GET 办法获取资源 |
304 | Not Modified |
若申请报文首部蕴含一些条件,如 If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since ,若不满足条件,则服务器返回 304 |
307 | Temporary Redirect |
长期重定向,相似于 302,但 307 要求浏览器不会把重定向申请的 POST 办法改成 GET 办法 |
400 | Bad Request |
申请报文中存在语法错误 |
401 | Unauthorized |
该状态码示意发送的申请须要有认证信息 |
403 | Forbidden |
申请被回绝 |
404 | Not Found |
申请的页面不存在 |
500 | Internal Server Error |
服务器正在执行申请时产生谬误 |
503 | Service Unavailable |
服务器临时处于超负载或正进行停机保护,当初无奈解决申请 |
3.4 HTTP 首部
有 4 中类型的首部字段:
- 通用首部字段
- 申请首部字段
- 响应首部字段
- 实体首部字段
3.5 GET vs POST
- 作用不同
GET
用于获取资源,个别是查问,而 POST
用于传输实体主体,个别是提交;
- 参数不同
GET
和 POST
的申请都能应用额定参数,但 GET
的参数以查问字符串呈现在 URL 中,不会对服务器中的内容产生作用,但 POST
的参数存储在实体主体中。然而 POST
的安全性也不能说很高,咱们依然能够用抓包工具来进行查看。另一方面,URL 只反对 ASCII,因而 GET 的参数中若有中文等字符时须要先进行编码,然而 POST 的参数反对规范字符集;
- 安全性
GET 办法是平安的,因为它不会扭转服务器的状态。然而 POST 非平安,因为 POST 的目标是传送实体主体内容,内容可能是用户上传的表单数据,一旦上传胜利,服务器就可能把该数据存入数据库,此时状态也就产生了扭转。
平安的办法:GET、HEAD、OPTIONS
;
不平安的办法:POST、PUT、DELETE
;
- 幂等性
幂等的 HTTP 办法,同样的申请被执行一次和被间断执行屡次的成果是一样的,服务器的状态也一样,即幂等的办法不具备副作用,因而所有平安的办法也都是幂等的。
一般来说,GET、HEAD、PUT、DELETE
等办法都是幂等的,但 POST
不是。
- 可缓存
若要对响应进行缓存,则应该满足一下条件:
- 申请报文的 HTTP 办法自身是可缓存的,包含
GET、HEAD
,然而PUT、DELETE
不可缓存,POST
在大多数状况下是不可缓存的; - 响应报文的状态码是可缓存的,包含:200、203、204、206、300、301、404、405、410、411、501;
- 响应报文的
Cache-Control
首部字段未指定则不进行缓存;
4. HTTP 和 HTTPS
4.1 什么是 HTTP/S 协定?
- HTTP
HTTP(Hyper Text Transfer Protocol),超文本传输协定,它是从 Web 服务器传输超文本标记语言(HTML)到本地浏览器的传送协定。
HTTP 最后的目标是为了提供一种公布和接管 HTML 页面的办法;
- HTTPS
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),以平安为指标的 HTTP 通道,艰深来讲就是 HTTP 的平安版,退出了 SSL/TLS 层,通过 SSL 证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。HTTPS 的平安根底是 SSL,其次要作用有如下两种:
- 建设一个信息安全通道,来保障数据传输的平安;
- 确认网站真实性;
4.2 HTTP/S 特点
- HTTP
- HTTP 反对 C/S 模式,是一种 申请 / 响应模式 的协定;
- 简略疾速:客户向服务器申请服务时,只须要传送申请办法和门路,罕用办法有
GET、POST、HEAD
; - 灵便:HTTP 容许传输任意类型的数据对象,传输数据的类型由
Content - Type
来标记; - 无连贯:限度每次连贯只解决一个申请,服务器解决完申请并受到客户的应答后,会断开连接,然而不利于客户端和服务器放弃会话连贯;
- 无状态:值协定对于事务处理没有回顾,后续解决如果须要后面的信息,则必须重传;
4.2 HTTP/S 原理
- HTTP
HTTP 是 基于 TCP/IP 通信协议来传递数据的协定,传输的数据类型有 HTML 文件、图片文件、查问后果等。此外,HTTP 协定个别用于 B/S
架构,浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务器即 Web 服务器发送所有申请;
- HTTPS
如上图,应用 HTTPS 传输数据的流程如下:
- 首先客户端通过 URL 拜访服务器建设 SSL 连贯;
- 服务器收到客户端申请后,将网站反对的证书信息(其中蕴含公钥)传送一份给客户端;
- 客户端的服务器开始协商 SSL 连贯的安全等级,即信息加密的等级;
- 客户端的浏览器依据双方同意的安全等级,建设会话秘钥,而后利用网站的公钥将会话秘钥加密,并传送给网站;
- 服务器利用本人的秘钥解密出会话秘钥;
- 服务器利用会话秘钥加密与客户端之间的通信;
4.3 HTTP 和 HTTPS 的区别
HTTP 协定传输的数据都是未经加密的,即明文的,因而应用 HTTP 协定传输隐衷信息不平安。为了保障隐衷数据可能加密传输,于是应用 SSL 协定用于对 HTTP 协定传输的数据进行加密,即 HTTPS;
HTTPS 协定是 HTTP + SSL 协定构建的可进行加密传输、身份认证的网络协议,比 HTTP 更加平安,两者的区别次要有:
- HTTPS 须要到 CA 申请证书,个别收费证书较少,因而须要肯定费用;
- HTTP 是超文本传输信息,信息是明文传输;HTTPS 是具备安全性的 SSL 加密传输协定;
- HTTP 和 HTTPS 应用的是齐全不同的连贯形式,HTTP 默认应用
80
端口,而 HTTPS 默认应用443
端口; - HTTP 的连贯简略,是无状态的;而 HTTPS 是 SSL + HTTP 协定构建的可进行加密传输、身份认证的网络协议,比 HTTP 协定平安;
区别 | HTTP | HTTPS |
---|---|---|
协定 | 基于 TCP,明文传输,客户端与服务器端均无奈验证对方身份 | HTTP + SSL,运行于 TCP 之上,增加了加密和认证机制的 HTTP |
端口 | 80 | 443 |
资源耗费 | 较少 | 因为加解密操作,将耗费更多的 CPU 和内存资源 |
开销 | 无需证书 | 须要证书,个别是向认证机构购买 |
加密机制 | 无 | 共享秘钥加密和公开秘钥加密并用的混合加密机制 |
安全性 | 弱 | 强 |
5. TCP VS UDP
5.1 TCP 和 UDP 的特点
- TCP
TCP(传输控制协议,Transmission Control Protocol)是面向连贯的,提供牢靠交付,有流量管制,拥塞管制,提供 全双工通信,面向字节流 (将应用层传下来的报文当做字节流,将字节流组织为大小不等的数据块),每条 TCP 连贯只能是 点对点(一对一),总结起来有如下特点:
- 面向连贯
- 仅反对单播
- 面向字节流
- 可靠性
- 提供拥塞管制以及全双工通信
- UDP
UDP(用户数据表协定,User Datagram Protocol)是面向无连贯的,尽最大可能交付,无拥塞管制,面向报文 (对应用层中传下来的报文不合并也不拆分,只增加 UDP 首部),反对 一对一、一对多、多对一和对多点的交互通信,总结起来有如下特点:
- 面向无连贯
- 有单播、多播、播送的性能
- 面向报文
- 不可靠性
- 头部开销小,传输数据时高效
5.2 TCP VS UDP
TCP | UDP | |
---|---|---|
是否连贯 | 面向连贯 | 无连贯 |
是否牢靠 | 牢靠传输,应用流量管制和拥塞管制 | 不牢靠传输,不应用流量管制和拥塞管制 |
连贯对象个数 | 只能一对一 | 反对一对一、一对多、多对一和多对多 |
传输方式 | 面向字节流 | 面向报文 |
首部开销 | 首部最小 20 字节,最大 60 字节 | 首部开销小,仅 8 字节 |
场景 | 传输牢靠,比方文件传输等 | 实时利用,比方视频会议、直播等 |
5.3 三次握手以及四次挥手
- 三次握手
- 第一次握手:客户端向服务端发送连贯申请报文段,报文段中含有本身的数据通讯初始序号。申请发送后,客户端进入
SYN-SENT
状态; - 第二次握手:服务端接管到来自客户端的连贯申请报文,如果批准就会发送一个响应,响应中也会蕴含本身的数据通讯初始序号,发送实现后进入
SYN-RECEIVED
状态; - 第三次握手:客户端收到来自服务端批准连贯的响应后,再次向服务端发送一个确认报文。客户端发送完该报文后进行
ESTABLISHED
状态,服务端收到该应答后也进入ESTABLISHED
状态,此时连贯就建设胜利了。
- 四次挥手
- 第一次挥手: 一旦客户端 A 认为数据发送实现,则向服务端 B 发送申请开释申请;
- 第二次挥手: 服务端 B 收到连贯开释申请后,将告知应用层开释 TCP 连贯,接着发送 ACK 包并进入
CLOST_WAIT
状态,此时表明 A 到 B 的连贯曾经开释,不再接管 A 发的数据。然而 TCP 是双向通信的,所以 B 此时仍能够向 A 发送数据; - 第三次挥手: 若 B 此时还有未发送完的数据,就会持续发送直到结束,而后向 A 发送连贯开释申请,接着 B 进入
LAST-ACK
状态; - 第四次挥手: A 收到开释申请后,向 B 发送确认应答,此时 A 进入
TIME-WAIT
状态并继续一段时间(个别是 2MSL),若在该时间段内没有来自 B 的重发申请,就进入CLOSED
状态。当 B 收到确认应答后,也进入CLOSE
状态。
6. Session vs Cookie
6.1 Session 和 Cookie 的定义
6.1.1 什么是 cookie
cookie
是由 Web 服务器保留在用户浏览器上的小文件(key-value
格局),蕴含用户相干信息。客户端向服务器发动申请,若服务器须要记录该用户状态,则应用 response
向客户端浏览器颁发一个 cookie
。客户端浏览器将 cookie
保存起来,当浏览器再申请该网站时,浏览器将申请的网址连同该 cookie
一起提交给服务器,服务器查看该 cookie
,以此来确认用户身份。
6.1.2 什么是 session
session
依赖于 cookie
实现,session
是服务端对象。session
浏览器和服务器会话过程中,服务器调配的一块存储空间。服务器默认为浏览器在 cookie
中设置 sessionid
,浏览器在向服务器申请过程中传输 cookie
蕴含 sessionid
,服务器将依据 sessionid
获取出会话中存储的信息,而后确认会话的身份信息。
6.2 Session 和 Cookie 的区别
- 存储空间:单个
cookie
所保留的数据不能超过 4k,许多浏览器都会限度一个站点最多能保留的cookie
数(个别是 20),然而session
没有该限度; - 占用服务器资源:
session
肯定工夫保留在服务器上,当拜访增多时,占用服务器性能,思考到服务器性能方面,该当应用cookie
; - 存储地位与安全性:
cookie
数据放在客户端,安全性较差,session
数据放在服务器上,安全性绝对较高;
7. 常见面试题
7.1 TCP 连贯为什么不是 2 次,而是 3 次?
因为思考到连贯时丢包的问题,如果是 2 次,那么第二次握手时如果服务器响应给客户端的确认报文段失落,但此时服务器端曾经筹备好接收数据,而客户端始终没收到服务端的确认报文,客户端就不分明服务端是否曾经筹备好了。这样一来,客户端既不会向服务端发送数据,也会疏忽服务端所发送过去的数据。
7.2 收回 4 次挥手的确认报文后为什么要等 2MSL 的工夫能力开释 TCP 连贯?
同样是出于思考丢包问题,若第四次挥手的报文失落,服务器未确认 Ack 报文就会重发第三次挥手的报文,若报文一来一去的最常工夫就是 2 MSL,所以须要等这么长时间来确认服务端的确曾经收到。