目录
1、TCP/IP模型
应用层
运输层
网络层
数据链路层
物理层
2、网络协议分层的好处?
3、TCP和UDP的区别
TCP / IP(传输控制协议)
UDP
4、TCP的三次握手(非常重要)
第一次握手:
第二次握手:
第三次握手:
如果在已经建立了连接,但客户端出现了故障该怎么办?
为什么TCP不能两次握手?
5、什么是TCP的四次挥手(非常重要)
四次挥手的具体细节
第一次挥手:
第二次挥手:
第三次挥手:
第四次挥手:
为什么要进入时间等待状态?
为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(close_wait状态意义是什么)
如果第二次挥手的时候服务器的ACK没有送达客户端,会怎么样?
客户端time_wait状态的意义是什么?
6、TCP协议如何保证可靠传输
停止等待:
超时重传:
流量控制:
拥塞控制:
数据包校验:
对失序数据包重排序:
应答机制:
丢弃重复数据:
7、TCP拥塞控制
拥塞控制:
慢开始:
拥塞避免(算法):
快重传:
快恢复:
8、什么是HTTP协议
特点:
简单快速:
灵活:
无连接:
无状态:
支持B/S以及C/S模式
9、Http和Https的区别?
端口号不同:
安全性:
是否付费:
连接方式:
10、HTTPS工作原理
11、加密算法
AES(对称加密)
RSA(非对称加密)
MD5、SHA(不可逆加密)
12、一次完整的HTTP请求所经历几个步骤?
Web浏览器与Web服务器之间将完成下列7个步骤:
什么是http的请求体?
http的响应报文有哪些?
13、输入网址到获取页面的过程?
14、常用HTTP状态码是怎么分类的,有哪些是常见的状态码?
状态码类别:
常用状态码:
15、HTTP协议中的请求方式
get请求:
post请求:
put请求:
head请求:
patch请求:
trace请求:
delete请求:
options请求:
16、get方法和post方法的区别
在功能上:
在安全性上:
在数据量上:
17、session与cookie的对比
cookie:
session:
安全性来说:
大小限制:
服务器资源消耗:
实现机制:
18、HTTP版本对比(重点)
HTTP1.0版本的特性:
HTTP1.1版本新特性(长连接):
HTTP2.0版本的特性:
19、TCP滑动窗口
20、TCP可靠传输的实现
21、TCP报头有哪些信息
22、socket通信流程
23、SSL协议是什么?
高层协议有(握手协议、密码修改协议、告警协议)
SSL握手协议:
SSL密码修改协议:
SSL告警协议:
低层协议有(记录协议)
SSL记录协议
24、SSL握手协议握手流程
25、HTTPS是如何保证安全的?
1、TCP/IP模型
(OSI体系结构)从底到顶的顺序(7层模型):
- 物理层、数据链路层、网络层、运输层、会话层、表示层、应用层
应用层
- 它是用来规定用进程在通信的时候所遵循的协议
- 应用层的很多协议都是基于客户服务器方式
- 客户(client)和服务器(server)都是指通信中所涉及的两个应用进程
- 客户端服务器方式它所描述的是进程之间服务和被服务的关系
- 客户是服务器请求,服务器是服务提供方,传输的是报文
涉及到的协议就有三种:
DNS(域名系统)
- 就是将域名和IP地址相互映射的一个分布式数据库。
- 它能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的ip地址
HTTP协议(超文本传输协议)
- 所有的万维网文件都必须遵守这个标准。
- 设计HTTP的最初目的就是为了提供一种发布和接受HTML网页的方式
SMTP(邮件传输协议)
运输层
- 只有位于网络边缘部分的主机的协议栈才会有运输层
- 它和网络层不一样的原因是,网络层它是为主机之间提供逻辑通信,而运输层它是为应用进程之间提供通用的数据服务(其实就是端到端的服务)
- 运输层拥有流量控制(它可以防止过载,就是过多的数据注入到网络当中),拥塞控制(抑制数据传输的速率)等功能
- 为上层协议(会话层)提供了端到端的可靠和透明的数据传输服务,
- 上层服务用户不必关系通信子网的实现细节
运输层有两种协议:
TCP(传输控制协议)
- 它是一个面向连接的协议
- 它可以提供可靠的数据传输服务
UDP(用户数据报协议)
运行在TCP协议上的协议:
HTTP(超文本传输协议)
- 它就是web服务器传输超文本到本地浏览器的传送协议
- 端口为80
HTTPS(安全超文本传输协议)
FTP(文本传输协议)
SMTP(简单邮件传输协议)
SSH(用于替代安全性差的telnet)
运行在UDP协议上的协议:
DNS(域名服务)
SNMP(简单网络管理协议)
NTP(网络时间协议)
DHCP(动态主机配置协议)
网络层
- 它是采用IP数据报服务
- 它其实就是通过IP寻址来建立两个节点之间的连接,之后把运输层产生的报文段或者是用户数据报封装成分组和包进行传送。
- 在发送分组的时候,不需要先建立连接,每一个分组独立发送,与其前后的分组无关。
- 在这个过程中网络层不提供端到端的可靠传输服务,尽最大努力进行交付(它是由网络的主机中的运输层负责可靠交付)
网络协议IP是TCP/IP体系中两个最重要的协议之一,与IP协议配套使用的还有三个协议:
ARP(地址解析协议)
ICMP(网际控制报文协议)(control)
IGMP(网际组管理协议)(group)
ARP协议(地址解析协议),它完成了与IP地址与物理地址的映射,用于动态解析以太网硬件的地址
工作原理:
- 首先,每台主机都会在自己的ARP缓冲区中建立一个ARP列表,就是用来表示IP地址和MAC地址的对应关系
- 然后,当源主机需要将一个数据包要发送到目的主机的时候,会首先检查自己的ARP列表是否存在ip地址对应的MAC地址
- 如果存在的话,那么就直接将数据包发送到这个MAC地址上。
- 如果不存在的话,那么它就会向本地发起一个ARP请求的广播包,查询这个目的主机对应的MAC地址。这个ARP请求数据包里包括了源主机的ip地址、硬件地址、以及目的主机的ip地址
- 网络中所有的主机收到这个ARP请求之后,会先检查数据包中的目的ip是不是和自己的ip地址是一致的
- 如果不是一致的话,就会忽略这个数据包
- 如果是一致的话,就会让该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中
- 如果这个时候ARP列表中已经存在该IP的信息,则就会将其覆盖掉,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址
- 当源主机收到ARP响应数据包之后,就将得到目的主机的IP地址和MAC地址添加到自己的ARP列表当中去,并利用此信息开始数据的传输
- 如果源主机一直没有收到ARP响应数据包,那么就表示ARP查询失败!
数据链路层
- 它其实就是两台设备之间的数据传输,就可以成是在一条管道上进行的
- 传送的数据单位是帧(每一帧包括数据和必要的控制信息,就比如同步信息、地址信息、差错控制等)
- 数据链路层保证了被传输数据的正确性
它这里会出现三个问题:
封装成帧
- 就是在一段数据的前后分别添加了首部和尾部,然后就构成了一个帧
- 首部和尾部的一个重要的作用就是进行帧定界
透明传输
- 就是在数据传输的过程中,如果数据中的某个字符的二进制代码恰好和SOH或者是EOT(控制字符)一样,数据链路层就会错误的找到帧的边界,
- 从而导致这些数据都能够按照原样没有差错地通过这个数据链路层。
- 解决透明传输的问题,需要用到字符填充(插入转义字符)
差错检查
- 在传输的过程中可能会产生比特差错
- 就是1可能会变成0,而0也可能变成1
- 在一段时间内,传输错误的比特占所有传输比特总数的比率称为BER(Bit Error Rate),误码率与信噪比有很大的关系
- 为了保证数据传输的可靠性,在计算机网络传输数据的时候,就必须采用各种差错检测措施
- 在数据链路层传送的帧上面,广泛使用了循环冗余检验CRC的检错技术
物理层
- 就是物理层要考虑是怎么才能在连接各种计算机的传输媒体上传输比特流
- 它的作用就是尽可能底屏蔽掉不同传输媒体和通信手段的差异
- 使得上层的数据不必考虑网络具体介质是什么
- 因为它传输的就是比特
主要任务:
- 确定与传输媒体的接口的一些特性(器件的相关特征、电压范围、以及对应的功能)
2、网络协议分层的好处?
- 简化了问题难度和复杂度。由于各层之间是相互独立的,所以我们可以把大问题分割成小问题
- 它的灵活性好。就是当其中一层的技术发生变化的时候,只要层与层之间接口保持不变,其他的层就不会受到影响
- 它易于实现和维护
- 促进标准化工作。分开后,每层功能可以相对简单的被描述
3、TCP和UDP的区别
TCP / IP(传输控制协议)
- 它是一个面向连接的协议,发送数据前要先建立连接。
- 它可以提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达(就类似于打电话)
- 面向连接协议,提供面向连接服务
- 它传送的运输协议数据单元是TPDU是TCP报文
- 支持点对点单播,不支持多播、广播
- 提供可靠服务
- 复杂。用于大多数应用,比如:万维网、电子邮件、文件传输等等
UDP
- 它是属于TCP/IP协议族中的一种,是无连接的协议
- 发送数据前不需要建立连接,是没有可靠性的协议,
- 因为不需要建立连接,所以可以在网络上以任意可能的路径传输
- 因此能不能达到目的地,到达目的的时间以及内容的正确性都是不能被保证的(类似于发微信)
- 无连接的协议,提供无连接服务
- 它的传送运输协议数据单元TPDU是UDP报文或用户数据报
- 支持单播、多播、广播
- 不提供可靠交付
- 简单。适用于很多应用,比如:多媒体应用等
4、TCP的三次握手(非常重要)
- 在网络数据传输中,传输层协议TCP是要建立连接的可靠传输,TCP建立的过程,我们称为三次握手
- 三次握手的具体细节:客户端向服务端发送SYN -> 服务端返回SYN,ACK -> 客户端发送ACK
图中主机B的TCP服务器进程先创建传输控制块TCB,准备客户进程的连接请求
第一次握手:
- 主机A的TCP向主机B发出连接请求报文段,其首部中的同步位置SYN=1,并选择序号seq = x,表明传输数据的时候的第一个数据字节的序号是x 。
第二次握手:
- 主机B的TCP收到连接请求后,如果同意,就会发送回确认。
- 主机B在确认报文段中应使用SYN=1,使得ACK=1,其中确认号ack = x+1,自己选择的序号seq=y。
第三次握手:
- 主机A收到此报文字段后主机B给出确认,其ACK=1,确认号ack=y+1。
- 主机A的TCP通知上层应用进程,连接已经建立。
- 主机B的TCP收到主机A的确认后,也通知其上层应用进程:TCP连接已经建立。
三次握手的目的就是为了建立可靠的通信信道,主要目的就是双方确认自己与对方的发送与接收机能正常
第一次握手:
第二次握手:
- 客户确认了:自己发送、接收正常,对方发送、接收正常;
- 服务器确认了:自己接收正常,对方发送正常
第三次握手:
- 客户确认了:自己发送、接收正常,对方发送、接收正常;
- 服务器确认了:自己发送、接受正常,对方发送、接收正常
所以三次握手就能确认双发收发的功能都正常,缺一不可
如果在已经建立了连接,但客户端出现了故障该怎么办?
保护计时器:
- 它是用来防止在TCP连接出现长时间的空闲。
- 服务器每收到一次客户端的请求会都会重新复位一个计数器,时间通常是设置2h,
- 若服务器过了2h还没有收到客户的信息,它就发送探测报文段
- 若发送了10个探测报文段(每一个相隔75s)还没有响应,就假定客户出现了故障,因而就终止该连接
为什么TCP不能两次握手?
- 假设是两次握手的话,如果客户端发起的连接请求阻塞在网络中,就会造成该报文的重传,
- 这个时候服务器收到请求之后就会立即进入连接状态,
- 当双方传输完数据结束连接之后,第一次阻塞的请求突然又到达了服务端,
- 此时服务端又进入连接状态,而客户端不会响应服务端的连接确认报文
5、什么是TCP的四次挥手(非常重要)
数据传输结束后,通信的双方都可以释放连接,我们将释放连接的过程我们称为四次挥手
四次挥手的具体细节
第一次挥手:
- 主机A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。
- 主机A把连接释放报文段首部的FN=1,其序号seq=u,等待B的确认(fin_wait_1状态)
第二次挥手:
- 主机B发送出确认,发送一个ACK=1,确认号ack = u+1,而这个报文段自己的序号 seq = v。
- TCP服务器进程通知高层应用进程。从主机A到主机B这个方向的连接就释放了,TCP连接处于close_wait状态。
- 此时主机B若发送数据,主机A仍然要接收。
第三次挥手:
- 主机B确认已经没有要向主机A发送的数据,将FIN设置为1,其应用进程就通知TCP释放连接。
第四次挥手:
- 主机A收到连接释放报文段后,进入time_wait状态,必须发出确认。
- 在确认报文段中ack=1,确认号ack=w+1,自己的序号seq=u+1。
- 主机B收到后,确认ack后,变为close状态,不再向客户端发送数据。
- 客户端等待2*msl(报文段最长寿命)时间后,也进入了closed状态。完成四次挥手操作!
简单点理解就是:四次挥手,双方都确认对方关闭(记住这个!)
- 就是客户对服务端发送了关闭连接请求
- 当服务端收到客户的关闭连接请求之后,会对客户回复一个确认收到的消息
- 当服务器确定不再给客户发送消息之后,会对客户发送:准备关闭连接的消息
- 当客户收到服务器要关闭连接的消息,会对服务器发送:已收到关闭连接的消息
为什么要进入时间等待状态?
- 若客户端发送确认释放包后直接关闭,而服务端因为某种原因没有收到客户端的确认释放包,就会一直发送确认请求,而客户端永远不会再响应该请求。
为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(close_wait状态意义是什么)
- 因为服务器收到客户端断开连接的请求的时候,可能还会有一些数据没有发完,
- 这个时候先回复ACK,表示接收到了断开连接的请求。
- 等到数据发完之后再发FIN,表示断开服务器到客户端的数据传送。
如果第二次挥手的时候服务器的ACK没有送达客户端,会怎么样?
客户端time_wait状态的意义是什么?
会出现两个问题:
- 主机A发送的最后一个ACK报文可能没有到达主机B(丢失)
- 已失效的连接请求报文文段可能会出现在本连接当中
- time_wait状态用来重发可能丢失的ACK报文。
- 如果服务端没有收到ACK,就会重发FIN,
- 如果客户端在2*MSL的时间内收到了FIN,就会重新发送ACK并再次等待2*MSL,
- 防止Server没有收到ACK而不断重发FIN
- MSL(MaximumSegment Lifetime),指一个片段在网络中最大的存活时间,
- 2MSL就是一个发送和一个回复所需要的最大时间。
- 如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接受,则结束TCP连接!
6、TCP协议如何保证可靠传输
停止等待:
- 其实就是每次发完一个分组之后,它就会停止发送,等待对方确认。
- 在收到对方确认之后再发送给下一个分组。
超时重传:
- 当TCP发出一个段后,它会启动一个叫定时器的东西,等待目标端确认收到这个报文段。
- 如果不能及时收到一个确认的话,它就会重发这个报文段。
其实就是发送方在发送按数据后一定时间内没有收到接收方响应报文,它就会重新发送刚刚的报文,接收到报文后会对该报文的序列号进行检验,已存在就会被抛弃
流量控制:
- 就是当TCP连接的每一方都要有固定大小的缓冲空间的时候,
- TCP的接收端只允许另一端发送接收端缓冲区它所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。
- TCP使用的流量控制协议是可变大小的滑动窗口协议。
拥塞控制:
- 当网络开始拥塞的时候,可能会造成网络的拥堵,甚至网络瘫痪,TCP会减少数据的发送
数据包校验:
- TCP将保持它的首部和数据的检验和,这是一个端到端的校验和。
- 它的目的是检测数据在传输过程中的任何变化,
- 若校验出包有错的话,则会丢弃报文并且不会给出响应,这个时候TCP发送数据端超时后,它就会重发数据
对失序数据包重排序:
- 既然TCP报文作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。
- TCP会给发送的每一个包进行一个编号,接收方对数据包进行排序,把有序数据传送给应用层
应答机制:
- 当TCP收到发自TCP连接另一端的数据的时候,它就会发送一个确认。
- 但是这个确认不是立即发送,通常将推迟几分之一秒
丢弃重复数据:
7、TCP拥塞控制
拥塞控制:
- 它其实就是防止过多的数据注入网络,使得网络中路由器或者是链路过载。
- 流量控制是点对点的通信量控制,而拥塞控制是全局的网络流量整体性的一个控制。
- 发送双方都有一个拥塞窗口(cwnd)
- 其实简单点理解就是发送方会维护一个拥塞窗口大小的状态变量,它的大小取决于网络的拥塞程度。
- 发送方的发送窗口大小是取决于接收方接收窗口和拥塞窗口中较小的一个
慢开始:
- 最开始发送方的拥塞窗口为1,由小到大依次递增。
- 每次经过一个传输轮次,拥塞窗口cwnd就会进行加倍操作(也就是*2)。
- 当cwnd超过慢开始门限,他就会使用拥塞避免(算法),避免cwnd增长过长。
其实简单点理解就是从小到大主键发送的窗口,每收到一个确认报文窗口,它的大小就会指数增长
拥塞避免(算法):
- 当cwnd超过慢开始门限,每经过一个往返时间RTT,cwnd就会增长1。
- 在慢开始和拥塞避免过程中,一旦发现网络拥塞,就会把慢开始门限设置为当前值的一半,并且重新设置cwnd为1,重新慢启动。
其实简单点理解就是当窗口大小到达一定临界值时,它就会转为拥塞避免。每收到一个确认报文窗口大小+1,如果此时网络超时的话,就会把临界值调小一半,然后重新慢开始
快重传:
- 当接收方每收到一个失序的报文段后就立即发出重复确认,发送方只要收到3个重复确认就立即重传
其实简单点理解就是要求接收方收到请求后要立即回复
快恢复:
- 当发送方连续收到三个重复确认,就将慢开始门限减半,将当前的窗口设置为慢开始门限,并采用拥塞避免算法(采用快恢复算法的时候,慢开始只在建立连接和网络超时才会使用)
其实简单点理解就是发送方连续收到多个确认的时候,就会把拥塞避免临界值减小,然后直接开始拥塞避免
8、什么是HTTP协议
- 它其实是一个基于TCP/IP通信协议来传递数据的协议。
- 它工作在客户端-服务端架构之上,实现可靠性的传输文字、图片、音频、视频等超文本数据的规范,这个格式就叫做“超文本传输协议”
- 它是属于应用层,用户访问的第一层就是http
特点:
简单快速:
- 客户端向服务器发送请求的时候,只需要传送请求方法和路径就可以了
灵活:
无连接:
- 限制每次连接只有一个请求。
- 服务器处理完客户请求并收到客户应答之后,就会断开连接
无状态:
支持B/S以及C/S模式
9、Http和Https的区别?
端口号不同:
安全性:
- http是超文本传输协议,它的信息是明文传输的
- https是通过SSL加密处理的传输协议,更加安全
是否付费:
- http不需要付费
- https需要拿到CA证书,需要付费
连接方式:
- http和https它们的使用是完全不同的连接方式
- http的连接很简单,是无状态的
- https协议是由SSL+HTTP协议构建的,可以进行加密传输、身份认证的网络协议,比http协议更安全
- HTTPS传输过程中使用密钥加密,安全性更高。但是收费,而且多了一层SSL,它的延时也会有所提高
10、HTTPS工作原理
- 首先HTTP请求服务端生成一个证书,客户端对这个证书的有效期、合法性、域名(是否请求的域名一致)、证书的公钥(RAS加密)等进行比较验
- 客户端如果校验通过后,就会根据证书的公钥的有效性,生成随机数,这个随机数使用公钥进行加密操作(RAS加密)
- 消息体产生后,对它的摘要进行MD5(或者是SHA1)算法加密,此时就会得到RSA签名
- 发送给服务端,此时只有服务端(RAS私钥)能解密
- 解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)
11、加密算法
- 加密算法,其实简单点来说就是对信息进行编码和解码的一种技术操作。
- 编码是把原来可读信息(明文)翻译为代码的形式(密文),其逆过程就是解码操作(加密)
加密技术的要点是加密算法,加密算法可以分为三类:
AES(对称加密)
基本原理:
- 就是将明文分成N个组,然后使用密钥对各个组进行加密,形成各自的密文,最后把所有的分组密文进行合并,形成最终的密文
优点:
缺点:
RSA(非对称加密)
基本原理:
- 同时生成两把密钥:公钥和私钥
- 公钥可以下发给信任的客户端
- 私钥隐秘保存起来
- 私钥加密,持有私钥或者公钥才可以解密
- 公钥加密,持有私钥才可以解密
优点:
缺点:
MD5、SHA(不可逆加密)
基本原理:
- 加密过程中不需要使用密钥,输入明文后由于系统直接经过加密算法处理成密文,这种加密的数据是无法被解密的,无法根据密文推算出明文
12、一次完整的HTTP请求所经历几个步骤?
- HTTP协议,它采用的是请求/响应模型
- 客户端向服务器发送一个请求报文,请求报文包含请求方法、URL、协议版本、请求头部和请求数据。(方法、url、版本、头部、数据)
- 服务器以一个状态行作为响应,响应内容包含协议版本、成功或者错误代码、服务器信息、响应头部和响应数据
Web浏览器与Web服务器之间将完成下列7个步骤:
- 首先建立TCP连接,然后进行三次握手操作,
- 然后web浏览器会向web服务器发送请求行,
- 然后web浏览器会发送请求头,浏览器发送这个请求命令之后,还要以头的形式向web服务器发送一些别的信息,
- 之后浏览器发送了一空白行来通知服务器,表明它已经结束了该头信息的发送
- web服务器应答:客户机向web服务器发出请求之后,服务器会对客户机进行回送应答操作,
- (HTTP/1.1 200 OK),应答的第一部分是协议的版本号和应答状态码
- web服务器发送应答头:正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及其被请求的文档
- web服务器向浏览器发送数据:web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,
- 接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
- web服务器关闭TCP连接
什么是http的请求体?
- http请求体是我们请求数据的时候发送给服务器的数据,
- 毕竟我要向服务器拿到数据,首先要表明我要什么东西,才能向服务器拿到数据
- HTTP请求体由:请求行、请求头、请求数据组成的
http的响应报文有哪些?
- http的响应报文是服务器返回给我们的数据,
- 必须先有请求体才会有响应报文,(一定要记住顺序不能变!)
- 响应报文包含三个部分:状态行、响应首部字段、响应内容实体实现
13、输入网址到获取页面的过程?
- 浏览器会先搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等
- 对于向本地DNS服务器进行查询,如果要查询的域名是在本地配置区域资源当中,那么就会返回解析结果给客户机,完成域名解析(此时解析具有权威性)
- 如果要查询的域名不是本地DNS服务器区域解析,但该服务器已经缓存了此网址映射关系,那么就会调用这个IP地址映射,完成域名解析(此时解析不具有权威性)。
- 如果本地域名并没有缓存这个网址映射关系的话,那么将根据其设置为递归查询或者是迭代查询;
- 浏览器获得域名对应的IP地址之后,浏览器向服务器请求建立链接,发起三次握手;
- TCP/IP链接建立起来之后,浏览器向服务器发送HTTP请求;
- 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器
- 浏览器解析并渲染视图,如果遇到对js文件、css文件及图片等静态资源的引用,那么就重复上述步骤并且向服务器请求这些资源
- 浏览器根据这些请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面
14、常用HTTP状态码是怎么分类的,有哪些是常见的状态码?
HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等
状态码类别:
类别 |
描述 |
1xx: |
指示信息——表示请求已接收、正在处理 |
2xx: |
成功——表示请求已经被成功接收、理解、接受 |
3xx: |
重定向——要完成请求必须进行更进一步的操作 |
4xx: |
客户端错误——请求语法错误或者请求无法实现 |
5xx: |
服务器——服务器未能实现合法的请求 |
常用状态码:
200:请求被正常处理
204:请求被受理但是没有资源可以返回
301:永久性重定向
302:临时性重定向
304:已经缓存
400:请求报文语法有误,服务器无法识别
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
415:请求体过大
500:服务器内部错误
503:服务器正在忙
15、HTTP协议中的请求方式
get请求:
- 它是用于请求访问已经被url(就是统一资源标识符)识别的资源,
- 它可以通过url传参给服务器
post请求:
- 它是用于传输信息给服务器的,
- 主要功能是和get方式类似,但是一般推荐使用POST请求
put请求:
- 它是用于传输文件,报文主体中包含文件内容,保存到对应的url位置
head请求:
- 它是获取报文首部,与get方法类似,只是不返回报文主体,
- 一般用于验证URI是否有效
patch请求:
- 它是客户端向服务器传送的数据取代指定的文档的内容(部分取代)
trace请求:
- 它是回显客户端请求服务器的原始请求报文,
- 用于“回环”诊断
delete请求:
- 它是删除文件,
- 与put请求方法相反,删除对应的url位置的文件
options请求:
16、get方法和post方法的区别
在功能上:
- get一般用来从服务器上获取资源
- post一般用来更新服务器上的资源
在安全性上:
- get是不安全的,因为get请求提交的数据将明文出现在url上(请求头上),可能会造成泄漏私密信息
- post请求参数则被包装到请求体中,相对更安全
在数据量上:
- get传输的数据量小,因为受url长度限制,但是效率很高
- post可以传输大量数据,所以上传文件的时候,只能使用post方法
17、session与cookie的对比
cookie:
- 它是由web服务器保存在用户浏览器上的文件(key-value格式),可以包含用户相关的信息
- 客户端向服务器发起请求的时候,它会携带服务器之前创建的cookie,然后服务器通过cookie中携带的数据区分不同的用户
session:
- 它是浏览器和服务器会话过程中,服务器会分配一块存储空间给session
- 服务器默认会为客户浏览器的cookie中设置一个sessionid,这个sessionid就会和cookie对应,
- 浏览器在向服务器请求过程中传输的cookie包含sessionid,
- 服务器根据传输cookie中的sessionid获取出会话中存储的信息,然后确定会话的身份信息
安全性来说:
- cookie数据存放在客户端上,安全性比较差
- session数据存放在服务器上,安全性相对于更高
大小限制:
- cookie有大小限制,单个cookie保存的数据不能超过4k
- session无此限制,理论上只与服务器的内存大小有关
服务器资源消耗:
- session是保存在服务器上会存在一段时间才会消失,当访问增多,对服务器性能有影响
实现机制:
- session的实现常常依赖于cookie机制,通过cookie机制回传给sessionid
HTTP协议本身是无法判断用户身份,所以需要cookie或者session(这就是为什么需要cookie或者是session的原因!)
18、HTTP版本对比(重点)
HTTP1.0版本的特性:
- 最早1.0的HTTP版本,是一种无状态、无连接的应用层协议(其实就是短连接)
- HTTP1.0规定了浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,
- 服务器处理完之后立即断开TCP连接(也就是现在无连接),服务器不跟踪每个客户端也不记录过去的请求(也就是无状态)
HTTP1.1版本新特性(长连接):
- 它是默认持久连接节省信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就会一直保持连接,
- 可以发送多次HTTP请求管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应断点续传原理
HTTP2.0版本的特性:
- 二进制分帧(采用二进制的编码将其封装)
- 首部压缩(设置了专门的首部压缩设计的HPACK算法)
- 流量控制(设置接收某个数据流的多少字节一些流量控制)
- 多路复用(可以在共享TCP链接的基础上同时发送请求和响应)
- 请求优先级(可以通过优化这些帧的交错和传输顺序进一步优化性能)
- 服务器推送(就是服务器可以通过一个客户端请求发送多个响应。服务器向客户端推送资源无需客户明确的请求)(这个是最重大的更新!)
19、TCP滑动窗口
- 其实简单点就是TCP 流量控制,主要使用的就是滑动窗口协议,
- 滑动窗口是接受数据端使用的窗口大小,它可以用来告诉发送端和接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。
- 如果TCP发送方收到了接收方的零窗口通知之后,则会启动持续计时器。
- 当计时器超时之后,会向接收方发送零窗口探测报文,
- 如果响应仍为0,就会重新计时,不为0就打破死锁
20、TCP可靠传输的实现
TCP是靠滑动窗口协议和连续ARQ协议配合流量控制和拥塞控制来保证的可靠传输。
- ARQ是停止等待协议和自动重传请求,
- 它规定TCP要为每一次传输的包进行编号操作,
- 每发送一个包,要等待对方确认后才能发送给下一个分组,
- 若一段时间对方没有确认的话,就要重新发送刚刚的报文。
- 接收方会对数据包进行排序操作,会把有序的数据传给应用层,
- 返回缺失的第一个ACK确认序列号传递给发送方,接收到报文后会对该报文的序列号进行检验,重复就丢弃。
21、TCP报头有哪些信息
源端口号:
目的端口号:
(源端口号和目的端口号就代表将数据从哪里发到哪里)
序列号
- 在发送信息的时候,去使用TCP协议就会将信息拆分成多个数据报然后发送给接收方。
- 发送数据的时候会对每个字节的数据进行编号操作,等到数据到达接收端的时候,然后会对数据进行重新排序,避免网络数据报乱序 ==> 防止出现"后发先至"这种情况。
- 当触发TCP超时重传机制的时候,就会有可能造成接收方接收重复的数据,这时接收方会根据接收到的数据序号进行去重操作 ==> 如果之前收到了这个序号的数据就进行去重操作
确认序号
- 它的作用其实就是接收方给发送方返回一个ACK报文或者是确认序号,就代表确认序号之前的数据接收方已经接收到了。
- 同时接收方告诉发送方,接下来你可以发送确认序号之后的数据了。
标志位
- SYN:它其实表示同步报文段,会在建立连接的时候发送这个报文段(记得当这个位置为1的时候,就是会请求建立连接)
- FIN:这个位置为1的时候,它发送FIN报文段代表请求断开连接
- ACK : 确认报文段,当ACK为1的时候,它就代表确认应答报文是有效的。TCP规定除了第一次建立连接的SYN报文以外,其他的数据包的ACK均为1
- RST:这个位置为1的时候,代表TCP连接出现了异常并且强制断开连接
- URG:代表紧急指针是否有效
- PSH :提示这个接收端应用程序要立刻将数据从接收缓冲区里面取走
窗口大小
首部长度
- TCP在没有[选项]的时候,TCP数据报长度默认是20字节。
- 在有选项的时候,TCP数据报长度可以变长,最多为60字节。
选项
- TCP在没有【选项】的时候,TCP数据报长度默认是20字节
- 在有选项时,TCP数据报长度可以变长,最多为60字节
紧急指针
校验和
- 发送方在发送数据之前会根据CRC算法来计算校验和(将每个字节都相加起来,超出2个字节就舍去,然后取反码计算)。
- 接收方在接收数据的时候要重新计算校验和,然后取出TCP报头校验和字段进行比较。
- 如果校验不成功,证明数据报损坏,将包丢弃。
22、socket通信流程
- 首先服务端会创建socket并调用bind()方法绑定ip和端口号
- 然后服务端调用listen()方法建立监听,此时服务的scoket还没有被打开
- 客户端创建socket并调用connect()方法像服务端发送请求连接
- 然后服务端socket监听到客户端的请求之后,socket会被动打开,开始调用accept()方法接收客户端连接请求。当accept()方法接收到客户端connect()方法返回响应成功的信息之后,则就表示连接成功
- 客户端向socket写入请求信息,服务端就会去读取信息
- 客户端调用close()结束链接。服务端监听到释放连接请求之后,也会结束链接
23、SSL协议是什么?
SSL(安全套检查协议)位于传输层和应用层之间,为应用层提供安全性,分为高低两层协议。
高层协议有(握手协议、密码修改协议、告警协议)
SSL握手协议:
- SSL协议核心,用于在数据传输开始前通信双方进行身份认证、协商加密算法、交换密钥等
SSL密码修改协议:
- 通知双方使用刚刚协商的加密规范和密钥进行加密,每隔一段时间就会修改加密规范
SSL告警协议:
- 如果在通信过程中某一方发生异常,异常级别为1SSL会发出警告,异常几倍为2SSL会终止连接
低层协议有(记录协议)
SSL记录协议
24、SSL握手协议握手流程
(1)tcp三次握手之后,客户端向服务端发送client hello(client hello包括客户端所支持的加密套件、SSL版本和第一随机数)
(2)服务端向客户端响应server hello,响应报文中会告诉客户端(服务端选择的加密套件、SSL版本和第二随机数)
(3)服务端向客户端响应一个x.509证书来表明自己的身份
(4)服务端向客户端响应server key exchange,发送自己公钥,此时服务端也可以要求客户端向自己发送证书
(5)服务端向客户端发送server hello down,表示响应完毕,此时所有消息还未进行加密
(6)客户端向服务端发送client key exchange,生成预主密钥,客户端用服务端的公钥对预主密钥进行加密后发送给服务端
(7)客户端和服务端协商完毕,分别使用第一随机数、第二随机数、预主密钥计算出会话密钥,此时SSL的握手已经成功,可以开始利用会话密钥进行对称加密传输
25、HTTPS是如何保证安全的?
- 我们都知道https = http+ssl,其实SSL协议的握手流程就是https保证数据安全的原理