网络模型相关
1.OSI七层协议模型
从底向上:
物理层、链路层、网络层、传输层、会话层、表示层、应用层
2.TCP/IP五层协议模型
从底向上:
物理层、链路层、网络层、传输层、应用层
3.TCP/IP四层协议模型及各层有哪些协议?
从底向上:
数据链路层
网络层:IP
传输层:TCP、UDP
应用层:HTTP、DNS、SMTP、FTP
4.七层网络协议和四层网络协议的区别?
1.四层网络协议的应用层处理七层网络协议中会话层、表示层、应用层的功能
2.四层网络协议传输层不能总是保证在传输层可靠地传输数据包,因为其还提供一项名为UDP的选择,UDP不能保证可靠的数据包传输,而七层模型可以做到。
TCP UDP相关
1.TCP三次握手 四次挥手
TCP三次握手
1.客户端向服务器发送TCP连接请求数据包,其中同步标志SYN=1,ACK=0,初始序列号为x(等待回复)
2.服务器收到请求后,发回连确认包。SYN=1,ACK=1,ack=x+1,初始序列号为y(收到请求,等待回复)
3.客户端收到确认报文后,发送确认数据包。ACK=1,ack=y+1,序列号为x+1。完成三次握手
三次握手是为了建立可靠的通信信道,双方都确认自己和对方的发送和控制都是正常的。SYN=1表示这是个连接请求或连接接受报文,不携带数据。
为什么不能变成两次?
可能会出现已失效的连接请求报文
突然又传到了服务器,服务器误认为是正常的连接请求,直接发送连接确认报文,导致TCP建立,浪费资源,因而产生错误。
TCP四次挥手
TCP连接是全双工的,因此每个方向都必须单独关闭
1.客户端发送连接请求释放报文,FIN=1,seq=u,客户端进入FIN-WAIT-1状态
2.服务器收到请求,发送确认报文。ACK=1,seq=v,ACK=u+1;
3.服务器发送完数据后,向客户端发送请求释放连接报文,FIN=1,ACK=1,seq=w,ack=u+1
4.客户端收到请求后,发送确认报文,ACK=1,seq=u+1,ack=w+1,客户端进入TIME-WAIT状态,等待2MSL后关闭,服务器收到确认后关闭
TIME_WAIT状态为什么要等待2MSL:
因为第四次的确认报文可能丢失,这个状态是用来重发可能丢失的ACK报文
为什么服务器会有CLOSE-WAIT?
因为服务器可能有数据未发送完毕,这段时间是继续发送数据的。
如果建立连接之后出现故障怎么办?
TCP有个保活计时器,通常设置为2小时,两小时内没有收到客户端发送的数据,服务器发送探测报文,每75s发送一次,10次探测报文没有反应,认为出现故障,关闭连接
TIME_WAIT存在的两个理由
1.可靠的实现TCP全双工连接的终止
2.允许老的重复的分节在网络上的流逝
2.TCP的连接状态有哪些?
TCP握手
LISTEN(服务器)
SYN-SENT(客户端)
SYN-RECIEVED(服务器)
ESTABLISHED
TCP挥手
客户端:
ESTABLISHED
FIN-WAIT-1
FIN-WAIT-2
TIME-WAIT
CLOSED
服务器:
ESTABLISHED
CLOSE-WAIT
LAST-ACK
CLOSED
3.TCP UDP区别
TCP:
提供可靠的,面向连接的运输服务。传输数据前必须三次握手建立连接,数据传输结束后,四次挥手释放连接,在数据传递时,有确认应答、超时重传、滑动窗口、拥塞控制等机制保证数据传输的可靠性。适用场景:网络通信质量有很高要求的地方,如文件传输,邮件发送,远程登陆等。
UDP:
无连接,不提供可靠交付。
适用场景:一般用于即时通信:语音、视频、直播
4.TCP可以提供哪些可靠传输
三次握手
四次挥手
连续ARQ
拥塞控制
5.拥塞控制和流量控制
拥塞控制:
防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的控制
拥塞控制的一些方法:
1.慢启动:设置拥塞控制窗口大小为1,每收到一个ACK,窗口大小+1;每过1RTT,窗口大小*2,呈指数增长
2.拥塞避免:当拥塞窗口达到一个阈值时,窗口大小不再呈指数上升,以线性上升,避免增长过快导致网络拥塞。
无论是在慢启动还是拥塞避免阶段,只要发送方判断网络出现拥塞(没有收到确认ACK)就将拥塞窗口设置为1,阈值为拥塞时发送窗口的一半,执行慢启动算法
3.快重传:当发送方连续收到三个重复确认时,就立即重传对方尚未收到的报文段,并执行快恢复算法
4.快恢复:将窗口设置为ssthresh的大小,然后执行拥塞避免算法
流量控制:
点对点通信量的控制,主要是抑制发送端发送数据的速率,以便接收端来得及接收
6.TCP滑动窗口
TCP通过滑动窗口的概念来进行流量控制,抑制发送端发送数据的速率,以便接收端来得及接收。
窗口:对应一段发送者可以发送的字节序列。这个序列是可以改变的,接收端发给发送端自己的接受能力。然后发送端根据已确认接收的序列号和接收能力滑动窗口,一下子全部发送,等待接收端确认
7.TCP、IP协议栈在哪一层
TCP:传输层
IP:网络层
HTTP、HTTPS相关
http和https的区别
1.http协议运行在tcp上,传输的是明文;https运行在ssl上,传输的是密文
2.http连接简单,没有状态;https是ssl加密的传输,身份认证的网络协议,更安全
3.https协议需要到CA申请证书
4.http连接端口是80;https连接端口是443
http报文
1.请求报文:请求行+请求头部+请求正文
2.响应报文:状态行+响应头部+响应正文
http协议是加密的吗?
不是
http状态码
1xx:指示信息-表示请求已接收,继续处理
2xx:成功-表示请求已被成功接收、理解、接受
3xx:重定向-信息不完整需要进一步补充
4xx:客户端错误-请求有语法错误或请求无法实现
5xx:服务器错误-服务器未能实现合法的请求
http长连接
在一个TCP连接上可以传送多个请求和响应
https的加密方式,SSL连接过程
https在传统的http和tcp之间加了一层用于加密解密的ssl层
采用对称加密和非对称加密结合的方式来保护浏览器和服务端之间的通信安全。
对称加密:加密和解密都是同一个密钥。
非对称加密:密钥成对出现,分为公钥和私钥,公钥和私钥之间不能互相推导,公钥加密需要私钥解密,私钥加密需要公钥解密
SSL请求过程:
1.浏览器向服务器请求网址https://www.baidu.com
2.服务器发送非对称加密的公钥A给浏览器
3.客户端解析证书(证书无效弹出警告框)
4.客户端生产随机值,作为对称加密的密钥B
5.客户端使用服务器返回的公钥A对自己生产的对称加密密钥B进行加密,得到密钥C
6.客户端将密钥C发送给服务器
7.服务器用自己的私钥D对接收的密钥C进行解密得到对称密钥B
8.将信息和密钥B混合在一起进行对称加密
9.将加密的内容发送给客户端
10.客户端用密钥B解密信息
输入url解析过程
浏览器输入url并回车的过程以及相关协议
1.根据域名查询域名的IP地址,DNS解析
2.TCP连接
3.发送HTTP请求
4.服务器处理请求并返回HTTP报文
5.浏览器解析渲染页面
6.连接结束
不是
DNS解析过程
浏览器缓存-系统缓存(hosts文件)-路由器缓存-本地域名服务器解析域名-根服务器查询-如果还是没有命中就返回顶级域名服务器IP给本地DNS服务器。
本地DNS服务器请求顶级域名服务器解析,没有命中就返回主域名服务器给本地DNS服务器。本地DNS服务器请求主域名服务器解析域名,将结果返回给本地域名服务器。本地域名服务器缓存结果并反馈给客户端
修改host会不会导致dns更改(疑问?)
session和cookie的区别和联系
1.cookie数据存放在客户端;session数据存放在服务器
2.cookie不可靠,不重要的信息放在cookie中;session可靠,登录等重要信息放在session中
3.cookie性能比较好;session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器性能
应用层有那些协议?
DNS、HTTP、SMTP、FTP
SMTP,FTP端口号
SMTP:25
FTP:20/21
http请求get和post区别
get:
从指定资源请求数据
post:
向指定资源提交要被处理的数据
状态码
1xx:指示信息-表示请求已接收,继续处理
2xx:成功-表示请求已被成功接收、理解、接受
3xx:重定向-信息不完整需进一步补充
4xx:客户端错误
5xx:服务器端错误
HTTP请求报文结构:
请求行,请求头部,请求正文
HTTP响应报文结构:
状态行,响应头部、响应正文
转发和重定向的区别:
转发:
服务器行为
重定向:
客户端行为
HTTP1.0、1.1、2.0区别
HTTP1.1与1.0的区别
1.HTTP1.1默认开启长连接,在一个TCP连接上可以传送多个HTTP请求和响应,而1.0不支持长连接
2.缓存处理也不一样
3.Host头处理也不一样
4.1.1只允许请求资源的某个部分
HTTP2.0和HTTP1.x相比的新特性
1.新的二进制格式:1.x解析是基于文本的,而2.0的协议解析采用二进制格式
2.多路复用
3.head压缩
4.服务器推送