本文目录:
- 网络分层构造
- 三次握手
- 两次握手能够吗?
- 四次挥手
- 第四次挥手为什么要期待2MSL?
- 为什么是四次挥手?
- TCP有哪些特点?
- TCP和UDP的区别?
- HTTP协定的特点?
- HTTP报文格式
- HTTP状态码有哪些?
- HTTP1.0和HTTP1.1的区别?
- HTTP1.1和 HTTP2.0的区别?
- HTTPS与HTTP的区别?
- 什么是数字证书?
- HTTPS原理
- DNS 的解析过程?
- 浏览器中输出URL返回页面过程?
- Cookie和Session的区别?
- 什么是对称加密和非对称加密?
网络分层构造
计算机网络体系大抵分为三种,OSI七层模型、TCP/IP四层模型和五层模型。个别面试的时候考查比拟多的是五层模型。
TCP/IP五层模型:应用层、传输层、网络层、数据链路层、物理层。
- 应用层:为应用程序提供交互服务。在互联网中的应用层协定很多,如域名零碎DNS、HTTP协定、SMTP协定等。
- 传输层:负责向两台主机过程之间的通信提供数据传输服务。传输层的协定次要有传输控制协议TCP和用户数据协定UDP。
- 网络层:抉择适合的路由和替换结点,确保数据及时传送。次要包含IP协定。
- 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
- 物理层:实现相邻节点间比特流的通明传输,尽可能屏蔽传输介质和物理设施的差别。
三次握手
假如发送端为客户端,接收端为服务端。开始时客户端和服务端的状态都是CLOSED
。
- 第一次握手:客户端向服务端发动建设连贯申请,客户端会随机生成一个起始序列号x,客户端向服务端发送的字段中蕴含标记位
SYN=1
,序列号seq=x
。第一次握手前客户端的状态为CLOSE
,第一次握手后客户端的状态为SYN-SENT
。此时服务端的状态为LISTEN
。 - 第二次握手:服务端在收到客户端发来的报文后,会随机生成一个服务端的起始序列号y,而后给客户端回复一段报文,其中包含标记位
SYN=1
,ACK=1
,序列号seq=y
,确认号ack=x+1
。第二次握手前服务端的状态为LISTEN
,第二次握手后服务端的状态为SYN-RCVD
,此时客户端的状态为SYN-SENT
。(其中SYN=1
示意要和客户端建设一个连贯,ACK=1
示意确认序号无效) - 第三次握手:客户端收到服务端发来的报文后,会再向服务端发送报文,其中蕴含标记位
ACK=1
,序列号seq=x+1
,确认号ack=y+1
。第三次握手前客户端的状态为SYN-SENT
,第三次握手后客户端和服务端的状态都为ESTABLISHED
。此时连贯建设实现。
两次握手能够吗?
第三次握手次要为了避免已生效的连贯申请报文段忽然又传输到了服务端,导致产生问题。
- 比方客户端A收回连贯申请,可能因为网络阻塞起因,A没有收到确认报文,于是A再重传一次连贯申请。
- 连贯胜利,期待数据传输结束后,就开释了连贯。
- 而后A收回的第一个连贯申请等到连贯开释当前的某个工夫才达到服务端B,此时B误认为A又收回一次新的连贯申请,于是就向A收回确认报文段。
- 如果不采纳三次握手,只有B收回确认,就建设新的连贯了,此时A不会响应B的确认且不发送数据,则B始终期待A发送数据,浪费资源。
四次挥手
- A的利用过程先向其TCP收回连贯开释报文段(
FIN=1,seq=u
),并进行再发送数据,被动敞开TCP连贯,进入FIN-WAIT-1
(终止期待1)状态,期待B的确认。 - B收到连贯开释报文段后即收回确认报文段(
ACK=1,ack=u+1,seq=v
),B进入CLOSE-WAIT
(敞开期待)状态,此时的TCP处于半敞开状态,A到B的连贯开释。 - A收到B的确认后,进入
FIN-WAIT-2
(终止期待2)状态,期待B收回的连贯开释报文段。 - B发送完数据,就会收回连贯开释报文段(
FIN=1,ACK=1,seq=w,ack=u+1
),B进入LAST-ACK
(最初确认)状态,期待A的确认。 - A收到B的连贯开释报文段后,对此收回确认报文段(
ACK=1,seq=u+1,ack=w+1
),A进入TIME-WAIT
(工夫期待)状态。此时TCP未开释掉,须要通过工夫期待计时器设置的工夫2MSL
(最大报文段生存工夫)后,A才进入CLOSED
状态。B收到A收回的确认报文段后敞开连贯,若没收到A收回的确认报文段,B就会重传连贯开释报文段。
第四次挥手为什么要期待2MSL?
- 保障A发送的最初一个ACK报文段可能达到B。这个
ACK
报文段有可能失落,B收不到这个确认报文,就会超时重传连贯开释报文段,而后A能够在2MSL
工夫内收到这个重传的连贯开释报文段,接着A重传一次确认,重新启动2MSL计时器,最初A和B都进入到CLOSED
状态,若A在TIME-WAIT
状态不期待一段时间,而是发送完ACK报文段后立刻开释连贯,则无奈收到B重传的连贯开释报文段,所以不会再发送一次确认报文段,B就无奈失常进入到CLOSED
状态。 - 避免已生效的连贯申请报文段呈现在本连贯中。A在发送完最初一个
ACK
报文段后,再通过2MSL,就能够使这个连贯所产生的所有报文段都从网络中隐没,使下一个新的连贯中不会呈现旧的连贯申请报文段。
为什么是四次挥手?
因为当Server端收到Client端的SYN
连贯申请报文后,能够间接发送SYN+ACK
报文。然而在敞开连贯时,当Server端收到Client端收回的连贯开释报文时,很可能并不会立刻敞开SOCKET,所以Server端先回复一个ACK
报文,通知Client端我收到你的连贯开释报文了。只有等到Server端所有的报文都发送完了,这时Server端能力发送连贯开释报文,之后两边才会真正的断开连接。故须要四次挥手。
TCP有哪些特点?
- TCP是面向连贯的运输层协定。
- 点对点,每一条TCP连贯只能有两个端点。
- TCP提供牢靠交付的服务。
- TCP提供全双工通信。
- 面向字节流。
TCP和UDP的区别?
- TCP面向连贯;UDP是无连贯的,即发送数据之前不须要建设连贯。
- TCP提供牢靠的服务;UDP不保障牢靠交付。
- TCP面向字节流,把数据看成一连串无构造的字节流;UDP是面向报文的。
- TCP有拥塞管制;UDP没有拥塞管制,因而网络呈现拥塞不会使源主机的发送速率升高(对实时利用很有用,如实时视频会议等)。
- 每一条TCP连贯只能是点到点的;UDP反对一对一、一对多、多对一和多对多的通信形式。
- TCP首部开销20字节;UDP的首部开销小,只有8个字节。
HTTP协定的特点?
- HTTP容许传输任意类型的数据。传输的类型由Content-Type加以标记。
- 无状态。对于客户端每次发送的申请,服务器都认为是一个新的申请,上一次会话和下一次会话之间没有分割。
- 反对客户端/服务器模式。
HTTP报文格式
HTTP申请由申请行、申请头部、空行和申请体四个局部组成。
- 申请行:包含申请办法,拜访的资源URL,应用的HTTP版本。
GET
和POST
是最常见的HTTP办法,除此以外还包含DELETE、HEAD、OPTIONS、PUT、TRACE
。 - 申请头:格局为“属性名:属性值”,服务端依据申请头获取客户端的信息,次要有
cookie、host、connection、accept-language、accept-encoding、user-agent
。 - 申请体:用户的申请数据如用户名,明码等。
申请报文示例:
POST /xxx HTTP/1.1 申请行Accept:image/gif.image/jpeg, 申请头部Accept-Language:zh-cnConnection:Keep-AliveHost:localhostUser-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)Accept-Encoding:gzip,deflateusername=dabin 申请体
HTTP响应也由四个局部组成,别离是:状态行、响应头、空行和响应体。
- 状态行:协定版本,状态码及状态形容。
- 响应头:响应头字段次要有
connection、content-type、content-encoding、content-length、set-cookie、Last-Modified,、Cache-Control、Expires
。 - 响应体:服务器返回给客户端的内容。
响应报文示例:
HTTP/1.1 200 OKServer:Apache Tomcat/5.0.12Date:Mon,6Oct2003 13:23:42 GMTContent-Length:112<html> <body>响应体</body></html>
HTTP状态码有哪些?
HTTP1.0和HTTP1.1的区别?
- 长连贯:HTTP1.0默认应用短连贯,每次申请都须要建设新的TCP连贯,连贯不能复用。HTTP1.1反对长连贯,复用TCP连贯,容许客户端通过同一连贯发送多个申请。不过,这个优化策略也存在问题,当一个队头的申请不能收到响应的资源时,它将会阻塞前面的申请。这就是“队头阻塞”问题。
- 断点续传:HTTP1.0 不反对断点续传。HTTP1.1 新增了 range 字段,用来指定数据字节地位,反对断点续传。
- 谬误状态响应码:在HTTP1.1中新增了24个谬误状态响应码,如
409(Conflict)
示意申请的资源与资源的以后状态发生冲突、410(Gone)
示意服务器上的某个资源被永久性的删除。 - Host头解决:在HTTP1.0中认为每台服务器都绑定一个惟一的IP地址,因而,申请音讯中的URL并没有传递主机名。到了HTTP1.1时代,虚拟主机技术倒退迅速,在一台物理服务器上能够存在多个虚拟主机,并且它们共享一个IP地址,故HTTP1.1减少了HOST信息。
HTTP1.1和 HTTP2.0的区别?
HTTP2.0相比HTTP1.1反对的个性:
- 新的二进制格局:HTTP1.1 基于文本格式传输数据;HTTP2.0采纳二进制格局传输数据,解析更高效。
- 多路复用:在一个连贯里,容许同时发送多个申请或响应,并且这些申请或响应可能并行的传输而不被阻塞,防止 HTTP1.1 呈现的”队头梗塞”问题。
- 头部压缩,HTTP1.1的header带有大量信息,而且每次都要反复发送;HTTP2.0 把header从数据中拆散,并封装成头帧和数据帧,应用特定算法压缩头帧,无效缩小头信息大小。并且HTTP2.0在客户端和服务器端记录了之前发送的键值对,对于雷同的数据,不会反复发送。比方申请a发送了所有的头信息字段,申请b则只须要发送差别数据,这样能够缩小冗余数据,升高开销。
- 服务端推送:HTTP2.0容许服务器向客户端推送资源,无需客户端发送申请到服务器获取。
HTTPS与HTTP的区别?
- HTTP是超文本传输协定,信息是明文传输;HTTPS则是具备安全性的ssl加密传输协定。
- HTTP和HTTPS用的端口不一样,HTTP端口是80,HTTPS是443。
- HTTPS协定须要到CA机构申请证书,个别须要肯定的费用。
- HTTP运行在TCP协定之上;HTTPS运行在SSL协定之上,SSL运行在TCP协定之上。
什么是数字证书?
服务端能够向证书颁发机构CA申请证书,以防止中间人攻打(避免证书被篡改)。证书蕴含三局部内容:证书内容、证书签名算法和签名,签名是为了验证身份。
服务端把证书传输给浏览器,浏览器从证书里取公钥。证书能够证实该公钥对应本网站。
数字签名的制作过程:
- CA应用证书签名算法对证书内容进行hash运算。
- 对hash后的值用CA的私钥加密,失去数字签名。
浏览器验证过程:
- 获取证书,失去证书内容、证书签名算法和数字签名。
- 用CA机构的公钥对数字签名解密(因为是浏览器信赖的机构,所以浏览器会保留它的公钥)。
- 用证书里的签名算法对证书内容进行hash运算。
- 比拟解密后的数字签名和对证书内容做hash运算后失去的哈希值,相等则表明证书可信。
HTTPS原理
首先是TCP三次握手,而后客户端发动一个HTTPS连贯建设申请,客户端先发一个Client Hello
的包,而后服务端响应Server Hello
,接着再给客户端发送它的证书,而后单方通过密钥替换,最初应用替换的密钥加解密数据。
协商加密算法 。在
Client Hello
外面客户端会告知服务端本人以后的一些信息,包含客户端要应用的TLS版本,反对的加密算法,要拜访的域名,给服务端生成的一个随机数(Nonce)等。须要提前告知服务器想要拜访的域名以便服务器发送相应的域名的证书过去。服务端响应
Server Hello
,通知客户端服务端选中的加密算法。接着服务端给客户端发来了2个证书。第二个证书是第一个证书的签发机构(CA)的证书。
客户端应用证书的认证机构CA公开公布的RSA公钥对该证书进行验证,下图表明证书认证胜利。
验证通过之后,浏览器和服务器通过密钥替换算法产生共享的对称密钥。
开始传输数据,应用同一个对称密钥来加解密。
DNS 的解析过程?
- 浏览器搜寻本人的DNS缓存
- 若没有,则搜寻操作系统中的DNS缓存和hosts文件
- 若没有,则操作系统将域名发送至本地域名服务器,本地域名服务器查问本人的DNS缓存,查找胜利则返回后果,否则顺次向根域名服务器、顶级域名服务器、权限域名服务器发动查问申请,最终返回IP地址给本地域名服务器
- 本地域名服务器将失去的IP地址返回给操作系统,同时本人也将IP地址缓存起来
- 操作系统将 IP 地址返回给浏览器,同时本人也将IP地址缓存起来
- 浏览器失去域名对应的IP地址
浏览器中输出URL返回页面过程?
- 解析域名,找到主机 IP。
- 浏览器利用 IP 间接与网站主机通信,三次握手,建设 TCP 连贯。浏览器会以一个随机端口向服务端的 web 程序 80 端口发动 TCP 的连贯。
- 建设 TCP 连贯后,浏览器向主机发动一个HTTP申请。
- 服务器响应申请,返回响应数据。
- 浏览器解析响应内容,进行渲染,出现给用户。
Cookie和Session的区别?
- 作用范畴不同,Cookie 保留在客户端,Session 保留在服务器端。
- 有效期不同,Cookie 可设置为长时间放弃,比方咱们常常应用的默认登录性能,Session 个别生效工夫较短,客户端敞开或者 Session 超时都会生效。
- 隐衷策略不同,Cookie 存储在客户端,容易被窃取;Session 存储在服务端,安全性绝对 Cookie 要好一些。
- 存储大小不同, 单个 Cookie 保留的数据不能超过 4K;对于 Session 来说存储没有下限,但出于对服务器的性能思考,Session 内不要寄存过多的数据,并且须要设置 Session 删除机制。
什么是对称加密和非对称加密?
对称加密:通信单方应用雷同的密钥进行加密。特点是加密速度快,然而毛病是密钥泄露会导致密文数据被破解。常见的对称加密有AES
和DES
算法。
非对称加密:它须要生成两个密钥,公钥和私钥。公钥是公开的,任何人都能够取得,而私钥是私人保存的。公钥负责加密,私钥负责解密;或者私钥负责加密,公钥负责解密。这种加密算法安全性更高,然而计算量相比对称加密大很多,加密和解密都很慢。常见的非对称算法有RSA
和DSA
。
码字不易,如果感觉对你有帮忙,能够点个赞激励一下!
我是程序员大彬 ,专一Java后端硬核常识分享,欢送大家关注~