Tiny'Wo | 小窝

网络中的一小块自留地

面试官:如何理解OSI七层模型?

一、是什�?

OSI (Open System Interconnect)模型全称为开放式通信系统互连参考模型,是国际标准化组织 ( ISO ) 提出的一个试图使各种计算机在世界范围内互连为网络的标准框�?
OSI 将计算机网络体系结构划分为七层,每一层实现各自的功能和协议,并完成与相邻层的接口通信。即每一层扮演固定的角色,互不打�?

二、划�?

OSI主要划分了七层,如下图所示:

应用�?

应用层位�?OSI 参考模型的第七层,其作用是通过应用程序间的交互来完成特定的网络应用

该层协议定义了应用进程之间的交互规则,通过不同的应用层协议为不同的网络应用提供服务。例如域名系�?DNS,支持万维网应用�?HTTP 协议,电子邮件系统采用的 SMTP 协议�?
在应用层交互的数据单元我们称之为报文

表示�?

表示层的作用是使通信的应用程序能够解释交换数据的含义,其位于 OSI 参考模型的第六层,向上为应用层提供服务,向下接收来自会话层的服�?
该层提供的服务主要包括数据压缩,数据加密以及数据描述,使应用程序不必担心在各台计算机中表示和存储的内部格式差�?

会话�?

会话层就是负责建立、管理和终止表示层实体之间的通信会话

该层提供了数据交换的定界和同步功能,包括了建立检查点和恢复方案的方法

传输�?

传输层的主要任务是为两台主机进程之间的通信提供服务,处理数据包错误、数据包次序,以及其他一些关键传输问�?
传输层向高层屏蔽了下层数据通信的细节。因此,它是计算机通信体系结构中关键的一�?
其中,主要的传输层协议是TCPUDP

网络�?

两台计算机之间传送数据时其通信链路往往不止一条,所传输的信息甚至可能经过很多通信子网

网络层的主要任务就是选择合适的网间路由和交换节点,确保数据按时成功传�?
在发送数据时,网络层把传输层产生的报文或用户数据报封装成分组和包,向下传输到数据链路�?
在网络层使用的协议是无连接的网际协议(Internet Protocol)和许多路由协议,因此我们通常把该层简单地称为 IP �?

数据链路�?

数据链路层通常也叫做链路层,在物理层和网络层之间。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层协�?
在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧

每一帧的数据可以分成:报头head和数据data两部�?

  • head 标明数据发送者、接受者、数据类型,�?MAC地址
  • data 存储了计算机之间交互的数�?
    通过控制信息我们可以知道一个帧的起止比特位置,此外,也能使接收端检测出所收到的帧有无差错,如果发现差错,数据链路层能够简单的丢弃掉这个帧,以避免继续占用网络资源

物理�?

作为 OSI 参考模型中最低的一层,物理层的作用是实现计算机节点之间比特流的透明传�?
该层的主要任务是确定与传输媒体的接口的一些特性(机械特性、电气特性、功能特性,过程特性)

该层主要是和硬件有关,与软件关系不大

三、传输过�?

数据在各层之间的传输如下图所示:

  • 应用层报文被传送到运输�?- 在最简单的情况下,运输层收取到报文并附上附加信息,该首部将被接收端的运输层使用
  • 应用层报文和运输层首部信息一道构成了运输层报文段。附加的信息可能包括:允许接收端运输层向上向适当的应用程序交付报文的信息以及差错检测位信息。该信息让接收端能够判断报文中的比特是否在途中已被改变
  • 运输层则向网络层传递该报文段,网络层增加了如源和目的端系统地址等网络层首部信息,生成了网络层数据报
  • 网络层数据报接下来被传递给链路层,在数据链路层数据包添加发送端 MAC 地址和接收端 MAC 地址后被封装成数据帧
  • 在物理层数据帧被封装成比特流,之后通过传输介质传送到对端
  • 对端再一步步解开封装,获取到传送的数据

参考文�?- https://zh.wikipedia.org/wiki/OSI%E6%A8%A1%E5%9E%8B

面试官:如何理解TCP/IP协议?

一、是什�?

TCP/IP�?传输控制协议*/网际协议,是指能够在多个不同网络间实现信息传输的协议�?

  • TCP(传输控制协议)

一种面向连接的、可靠的、基于字节流的传输层通信协议

  • IP(网际协议)

用于封包交换数据网络的协�?
TCP/IP协议不仅仅指的是TCP IP两个协议,而是指一个由FTPSMTPTCPUDPIP等协议构成的协议簇,

只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols�?

二、划�?

TCP/IP协议族按层次分别了五层体系或者四层体�?
五层体系的协议结构是综合�?OSI �?TCP/IP 优点的一种协议,包括应用层、传输层、网络层、数据链路层和物理层

五层协议的体系结构只是为介绍网络原理而设计的,实际应用还�?TCP/IP 四层体系结构,包括应用层、传输层、网络层(网际互联层)、网络接口层

如下图所示:

五层体系

应用�?

TCP/IP 模型�?OSI 参考模型中的会话层、表示层和应用层的功能合并到一个应用层实现,通过不同的应用层协议为不同的应用提供服务

如:FTPTelnetDNSSMTP �?

传输�?

该层对应�?OSI 参考模型的传输层,为上层实体提供源端到对端主机的通信功能

传输层定义了两个主要协议:传输控制协议(TCP)和用户数据报协议(UDP�?
其中面向连接�?TCP 协议保证了数据的传输可靠性,面向无连接的 UDP 协议能够实现数据包简单、快速地传输

网络�?

负责为分组网络中的不同主机提供通信服务,并通过选择合适的路由将数据传递到目标主机

在发送数据时,网络层把运输层产生的报文段或用户数据封装成分组或包进行传�?

数据链路�?

数据链路层在两个相邻节点传输数据时,将网络层交下来的IP数据报组装成帧,在两个相邻节点之间的链路上传送帧

物理�?

保数据可以在各种物理媒介上进行传输,为数据的传输提供可靠的环�?

四层体系

TCP/IP 的四层结构则如下表所示:

层次名称 单位 �?�? �?�?
网络接口�? �? 负责实际数据的传输,对应OSI参考模型的下两�? HDLC(高级链路控制协议)PPP(点对点协议�?SLIP(串行线路接口协议)
网络�? 数据�? 负责网络间的寻址数据传输,对应OSI参考模型的第三�? IP(网际协议) ICMP(网际控制消息协议)ARP(地址解析协议�?RARP(反向地址解析协议�?
传输�? 报文�? 负责提供可靠的传输服务,对应OSI参考模型的第四�? TCP(控制传输协议) UDP(用户数据报协议�?
应用�? 负责实现一切与应用程序相关的功能,对应OSI参考模型的上三�? FTP(文件传输协议) HTTP(超文本传输协议�?DNS(域名服务器协议)SMTP(简单邮件传输协议)NFS(网络文件系统协议)

三、总结

OSI 参考模型与 TCP/IP 参考模型区别如下:

相同点:

  • OSI 参考模型与 TCP/IP 参考模型都采用了层次结�?- 都能够提供面向连接和无连接两种通信服务机制

不同点:

  • OSI 采用的七层模型; TCP/IP 是四层或五层结构

  • TCP/IP 参考模型没有对网络接口层进行细分,只是一些概念性的描述�?OSI 参考模型对服务和协议做了明确的区分

  • OSI 参考模型虽然网络划分为七层,但实现起来较困难。TCP/IP 参考模型作为一种简化的分层结构是可以的

  • TCP/IP协议去掉表示层和会话层的原因在于会话层、表示层、应用层都是在应用程序内部实现的,最终产出的是一个应用数据包,而应用程序之间是几乎无法实现代码的抽象共享的,这也就造成 OSI 设想中的应用程序维度的分层是无法实现�?

三种模型对应关系如下图所示:

参考文�?- https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F

面试官:如何理解UDP �?TCP? 区别? 应用场景?

一、UDP

UDP(User Datagram Protocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层

也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个报�?
而对接收方,接到后直接去除首部,交给上面的应用层就完成任�?
UDP报头包括4个字段,每个字段占用2个字节(�?6个二进制位),标题短,开销�?

特点如下�?

  • UDP 不提供复杂的控制机制,利�?IP 提供面向无连接的通信服务
  • 传输途中出现丢包,UDP 也不负责重发
  • 当包的到达顺序出现乱序时,UDP没有纠正的功能�?- 并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为

二、TCP

TCP(Transmission Control Protocol),传输控制协议,是一种可靠�?*面向字节流的通信协议**,把上面应用层交下来的数据看成无结构的字节流来发�?
可以想象成流水形式的,发送方TCP会将数据放入“蓄水池”(缓存区),等到可以发送的时候就发送,不能发送就等着,TCP会根据当前网络的拥塞状态来确定每个报文段的大小

TCP报文首部�?0个字节,额外开销�?

特点如下�?

  • TCP充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有�?- 此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费�?- 根据 TCP 的这些机制,�?IP 这种无连接的网络上也能够实现高可靠性的通信�?主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现�?

三、区�?

UDPTCP两者的都位于传输层,如下图所示:

两者区别如下表所示:

TCP UDP
可靠�? 可靠 不可�?
连接�? 面向连接 无连�?
报文 面向字节�? 面向报文
效率 传输效率�? 传输效率�?
双共�? 全双�? 一对一、一对多、多对一、多对多
流量控制 滑动窗口 �?
拥塞控制 慢开始、拥塞避免、快重传、快恢复 �?
传输效率 �? �?
  • TCP 是面向连接的协议,建立连�?次握手、断开连接四次挥手,UDP是面向无连接,数据传输前后不连接连接,发送端只负责将数据发送到网络,接收端从消息队列读�?- TCP 提供可靠的服务,传输过程采用流量控制、编号与确认、计时器等手段确保数据无差错,不丢失。UDP 则尽可能传递数据,但不保证传递交付给对方

  • TCP 面向字节流,将应用层报文看成一串无结构的字节流,分解为多个TCP报文段传输后,在目的站重新装配。UDP协议面向报文,不拆分应用层报文,只保留报文边界,一次发送一个报文,接收方去除报文首部后,原封不动将报文交给上层应用

  • TCP 只能点对点全双工通信。UDP 支持一对一、一对多、多对一和多对多的交互通信

两者应用场景如下图�?

可以看到,TCP 应用场景适用于对效率要求低,对准确性要求高或者要求有链接的场景,而UDP 适用场景为对效率要求高,对准确性要求低的场�?

参考文�?- https://zh.wikipedia.org

面试官:说说对WebSocket的理解?应用场景�?

一、是什�?

WebSocket,是一种网络传输协议,位于OSI模型的应用层。可在单个TCP连接上进行全双工通信,能更好的节省服务器资源和带宽并达到实时通迅

客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输

从上图可见,websocket服务器与客户端通过握手连接,连接成功后,两者都能主动的向对方发送或接受数据

而在websocket出现之前,开发实时web应用的方式为轮询

不停地向服务器发�?HTTP 请求,问有没有数据,有数据的话服务器就用响应报文回应。如果轮询的频率比较高,那么就可以近似地实现“实时通信”的效果

轮询的缺点也很明显,反复发送无效查询请求耗费了大量的带宽�?CPU 资源

二、特�?

全双�?

通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结�?
例如�?A→B 的同�?B→A ,是瞬时同步�?

二进制帧

采用了二进制帧结构,语法、语义与 HTTP 完全不兼容,相比http/2WebSocket 更侧重于“实时通信”,而HTTP/2 更侧重于提高传输效率,所以两者的帧结构也有很大的区别

不像 HTTP/2 那样定义流,也就不存在多路复用、优先级等特�?
自身就是全双工,也不需要服务器推�?

协议�?

引入wswss分别代表明文和密文的websocket协议,且默认端口使用80�?43,几乎与http一�?

1
2
3
ws://www.chrono.com
ws://www.chrono.com:8080/srv
wss://www.chrono.com:445/im?user_id=xxx

握手

WebSocket 也要有一个握手过程,然后才能正式收发数据

客户端发送数据格式如下:

1
2
3
4
5
6
7
8
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
  • Connection:必须设置Upgrade,表示客户端希望连接升级
  • Upgrade:必须设置Websocket,表示希望升级到Websocket协议
  • Sec-WebSocket-Key:客户端发送的一�?base64 编码的密文,用于简单的认证秘钥。要求服务端必须返回一个对应加密的“Sec-WebSocket-Accept应答,否则客户端会抛出错误,并关闭连�?- Sec-WebSocket-Version :表示支持的Websocket版本

服务端返回的数据格式�?

1
2
3
4
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Sec-WebSocket-Protocol: chat
  • HTTP/1.1 101 Switching Protocols:表示服务端接受 WebSocket 协议的客户端连接
  • Sec-WebSocket-Accep:验证客户端请求报文,同样也是为了防止误连接。具体做法是把请求头里“Sec-WebSocket-Key”的值,加上一个专用的 UUID,再计算摘要

优点

  • 较少的控制开销:数据包头部协议较小,不同于http每次请求需要携带完整的头部
  • 更强的实时性:相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少
  • 保持创连接状态:创建通信后,可省略状态信息,不同于HTTP每次请求需要携带身份验�?- 更好的二进制支持:定义了二进制帧,更好处理二进制内容
  • 支持扩展:用户可以扩展websocket协议、实现部分自定义的子协议
  • 更好的压缩效果:Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率

二、应用场�?

基于websocket的事实通信的特点,其存在的应用场景大概有:

  • 弹幕
  • 媒体聊天
  • 协同编辑
  • 基于位置的应�?- 体育实况更新
  • 股票基金报价实时更新

参考文�?

面试官:说说地址栏输�?URL 敲下回车后发生了什�?

一、简单分�?

简单的分析,从输入 URL到回车后发生的行为如下:

  • URL解析
  • DNS 查询
  • TCP 连接
  • HTTP 请求
  • 响应请求
  • 页面渲染

二、详细分�?

URL解析

首先判断你输入的是一个合法的 URL 还是一个待搜索的关键词,并且根据你输入的内容进行对应操�?
URL的解析第过程中的第一步,一个url的结构解析如下:

DNS查询

在之前文章中讲过DNS的查询,这里就不再讲述了

整个查询过程如下图所示:

最终,获取到了域名对应的目标服务器IP地址

TCP连接

在之前文章中,了解到tcp是一种面向有连接的传输层协议

在确定目标服务器服务器的IP地址后,则经历三次握手建立TCP连接,流程如下:

发�?http 请求

当建立tcp连接之后,就可以在这基础上进行通信,浏览器发�?http 请求到目标服务器

请求的内容包括:

  • 请求�?- 请求�?- 请求主体

响应请求

当服务器接收到浏览器的请求之后,就会进行逻辑操作,处理完成之后返回一个HTTP响应消息,包括:

  • 状态行
  • 响应�?- 响应正文

在服务器响应之后,由于现在http默认开始长连接keep-alive,当页面关闭之后,tcp链接则会经过四次挥手完成断开

页面渲染

当浏览器接收到服务器响应的资源后,首先会对资源进行解析:

  • 查看响应头的信息,根据不同的指示做对应处理,比如重定向,存储cookie,解压gzip,缓存资源等�?- 查看响应头的 Content-Type的值,根据不同的资源类型采用不同的解析方式

关于页面的渲染过程如下:

  • 解析HTML,构�?DOM �?- 解析 CSS ,生�?CSS 规则�?- 合并 DOM 树和 CSS 规则,生�?render �?- 布局 render 树( Layout / reflow ),负责各元素尺寸、位置的计算
  • 绘制 render 树( paint ),绘制页面像素信息
  • 浏览器会将各层的信息发送给 GPU,GPU 会将各层合成�?composite ),显示在屏幕上

参考文�?

面试官:说说TCP为什么需要三次握手和四次挥手�?

一、三次握�?

三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发�?个包

主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备

过程如下�?

  • 第一次握手:客户端给服务端发一�?SYN 报文,并指明客户端的初始化序列号 ISN(c),此时客户端处于 SYN_SENT 状�?- 第二次握手:服务器收到客户端�?SYN 报文之后,会以自己的 SYN 报文作为应答,为了确认客户端�?SYN,将客户端的 ISN+1作为ACK的值,此时服务器处�?SYN_RCVD 的状�?- 第三次握手:客户端收�?SYN 报文之后,会发送一�?ACK 报文,值为服务器的ISN+1。此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接

上述每一次握手的作用如下�?

  • 第一次握手:客户端发送网络包,服务端收到�? 这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的�?- 第二次握手:服务端发包,客户端收到了
    这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正�?- 第三次握手:客户端发包,服务端收到了�? 这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常

通过三次握手,就能确定双方的接收和发送能力是正常的。之后就可以正常通信�?

为什么不是两次握�?

如果是两次握手,发送端可以确定自己发送的信息能对方能收到,也能确定对方发的包自己能收到,但接收端只能确定对方发的包自己能收到 无法确定自己发的包对方能收到

并且两次握手的话, 客户端有可能因为网络阻塞等原因会发送多个请求报文,延时到达的请求又会与服务器建立连接,浪费掉许多服务器的资�?

二、四次挥�?

tcp终止一个连接,需要经过四次挥�?
过程如下�?

  • 第一次挥手:客户端发送一�?FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态,停止发送数据,等待服务端的确认
  • 第二次挥手:服务端收�?FIN 之后,会发�?ACK 报文,且把客户端的序列号�?+1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处�?CLOSE_WAIT状�?- 第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状�?- 第四次挥手:客户端收�?FIN 之后,一样发送一�?ACK 报文作为应答,且把服务端的序列号�?+1 作为自己 ACK 报文的序列号值,此时客户端处�?TIME_WAIT状态。需要过一阵子以确保服务端收到自己�?ACK 报文之后才会进入 CLOSED 状态,服务端收�?ACK 报文之后,就处于关闭连接了,处于 CLOSED 状�?

四次挥手原因

服务端在收到客户端断开连接Fin报文后,并不会立即关闭连接,而是先发送一个ACK包先告诉客户端收到关闭连接的请求,只有当服务器的所有报文发送完毕之后,才发送FIN报文断开连接,因此需要四次挥�?

三、总结

一个完整的三次握手四次挥手如下图所示:

参考文�?

面试官:说说 HTTP 常见的请求头有哪�? 作用�?

一、是什�?

HTTP头字段(HTTP header fields�?是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分

它们定义了一个超文本传输协议事务中的操作参数

HTTP头部字段可以自己根据需要定义,因此可能�?Web 服务器和浏览器上发现非标准的头字�?
下面是一个HTTP请求的请求头�?

1
2
3
4
5
6
7
8
9
10
11
12
GET /home.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/testpage.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"
Cache-Control: max-age=0

二、分�?

常见的请求字段如下表所示:

字段�? 说明 示例
Accept 能够接受的回应内容类型(Content-Types�? Accept: text/plain
Accept-Charset 能够接受的字符集 Accept-Charset: utf-8
Accept-Encoding 能够接受的编码方式列�? Accept-Encoding: gzip, deflate
Accept-Language 能够接受的回应内容的自然语言列表 Accept-Language: en-US
Authorization 用于超文本传输协议的认证的认证信�? Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 用来指定在这次的请求/响应链中的所有缓存机�?都必�?遵守的指�? Cache-Control: no-cache
Connection 该浏览器想要优先使用的连接类�? Connection: keep-alive Connection: Upgrade
Cookie 服务器通过 Set- Cookie (下文详述)发送的一�?超文本传输协议Cookie Cookie: $Version=1; Skin=new;
Content-Length �?八位字节数组 �?位的字节)表示的请求体的长度 Content-Length: 348
Content-Type 请求体的 多媒体类�? Content-Type: application/x-www-form-urlencoded
Date 发送该消息的日期和时间 Date: Tue, 15 Nov 1994 08:12:31 GMT
Expect 表明客户端要求服务器做出特定的行�? Expect: 100-continue
Host 服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号 Host: en.wikipedia.org:80 Host: en.wikipedia.org
If-Match 仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要作用时,用作像 PUT 这样的方法中,仅当从用户上次更新某个资源以来,该资源未被修改的情况下,才更新该资�? If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since 允许在对应的内容未被修改的情况下返回304未修�? If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
If-None-Match 允许在对应的内容未被修改的情况下返回304未修�? If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range 如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个新的实�? If-Range: “737060cd8c284d8af7ad3082f209582d”
Range 仅请求某个实体的一部分 Range: bytes=500-999
User-Agent 浏览器的浏览器身份标识字符串 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
Origin 发起一个针�?跨来源资源共�?的请�? Origin: http://www.example-social-network.com

三、使用场�?

通过配合请求头和响应头,可以满足一些场景的功能实现�?

协商缓存

协商缓存是利用的是【Last-Modified,If-Modified-Since】【ETag、If-None-Match】这两对请求头响应头来管理�?
Last-Modified 表示本地文件最后修改日期,浏览器会在request header加上If-Modified-Since(上次返回的Last-Modified的值),询问服务器在该日期后资源是否有更新,有更新的话就会将新的资源发送回�?
Etag就像一个指纹,资源变化都会导致ETag变化,跟最后修改时间没有关系,ETag可以保证每一个资源是唯一�?
If-None-Match的header会将上次返回的Etag发送给服务器,询问该资源的Etag是否有更新,有变动就会发送新的资源回�?
而强制缓存不需要发送请求到服务端,根据请求头expirescache-control判断是否命中强缓�?
强制缓存与协商缓存的流程图如下所示:

会话状�?

cookie,类型为「小型文本文件」,指某些网站为了辨别用户身份而储存在用户本地终端上的数据,通过响应头set-cookie决定

作为一段一般不超过 4KB 的小型文本数据,它由一个名称(Name)、一个值(Value)和其它几个用于控制 Cookie 有效期、安全性、使用范围的可选属性组�?
Cookie 主要用于以下三个方面�?

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息�?- 个性化设置(如用户自定义设置、主题等�?- 浏览器行为跟踪(如跟踪分析用户行为等

参考文�?

面试官:说说HTTP 常见的状态码有哪些,适用场景�?

一、是什�?

HTTP状态码(英语:HTTP Status Code),用以表示网页服务器超文本传输协议响应状态的3位数字代�?
它由 RFC 2616规范定义的,并得�?RFC 2518RFC 2817RFC 2295RFC 2774�?RFC 4918等规范扩�?
简单来讲,http状态码的作用是服务器告诉客户端当前请求响应的状态,通过状态码就能判断和分析服务器的运行状�?

二、分�?

状态码第一位数字决定了不同的响应状态,有如下:

  • 1 表示消息
  • 2 表示成功
  • 3 表示重定�?- 4 表示请求错误
  • 5 表示服务器错�?

1xx

代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束

常见的有�?

  • 100(客户端继续发送请求,这是临时响应):这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响�?- 101:服务器根据客户端的请求切换协议,主要用于websocket或http2升级

2xx

代表请求已成功被服务器接收、理解、并接受

常见的有�?

  • 200(成功):请求已成功,请求所希望的响应头或数据体将随此响应返�?- 201(已创建):请求成功并且服务器创建了新的资源

  • 202(已创建):服务器已经接收请求,但尚未处�?- 203(非授权信息):服务器已成功处理请求,但返回的信息可能来自另一来源

  • 204(无内容):服务器成功处理请求,但没有返回任何内�?- 205(重置内容):服务器成功处理请求,但没有返回任何内容

  • 206(部分内容):服务器成功处理了部分请�?

3xx

表示要完成请求,需要进一步操作�?通常,这些状态代码用来重定向

常见的有�?

  • 300(多种选择):针对请求,服务器可执行多种操作�?服务器可根据请求�?(user agent) 选择一项操作,或提供操作列表供请求者选择
  • 301(永久移动):请求的网页已永久移动到新位置�?服务器返回此响应(对 GET �?HEAD 请求的响应)时,会自动将请求者转到新位置
  • 302(临时移动)�?服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
  • 303(查看其他位置):请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代�?
  • 305 (使用代理)�?请求者只能使用代理访问请求的网页�?如果服务器返回此响应,还表示请求者应使用代理
  • 307 (临时重定向): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

4xx

代表了客户端看起来可能发生了错误,妨碍了服务器的处理

常见的有�?

  • 400(错误请求)�?服务器不理解请求的语�?- 401(未授权): 请求要求身份验证�?对于需要登录的网页,服务器可能返回此响应�?- 403(禁止)�?服务器拒绝请�?- 404(未找到): 服务器找不到请求的网�?- 405(方法禁用)�?禁用请求中指定的方法
  • 406(不接受): 无法使用请求的内容特性响应请求的网页
  • 407(需要代理授权)�?此状态代码与 401(未授权)类似,但指定请求者应当授权使用代�?- 408(请求超时)�?服务器等候请求时发生超时

5xx

表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发�?
常见的有�?

  • 500(服务器内部错误):服务器遇到错误,无法完成请求
  • 501(尚未实施):服务器不具备完成请求的功能�?例如,服务器无法识别请求方法时可能会返回此代�?- 502(错误网关)�?服务器作为网关或代理,从上游服务器收到无效响�?- 503(服务不可用): 服务器目前无法使用(由于超载或停机维护)
  • 504(网关超时)�?服务器作为网关或代理,但是没有及时从上游服务器收到请�?- 505(HTTP 版本不受支持): 服务器不支持请求中所用的 HTTP 协议版本

三、适用场景

下面给出一些状态码的适用场景�?

  • 100:客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。常用于POST大数据传�?

  • 206:一般用来做断点续传,或者是视频文件等大文件的加�?

  • 301:永久重定向会缓存。新域名替换旧域名,旧的域名不再使用时,用户访问旧域名时�?01就重定向到新的域�?

  • 302:临时重定向不会缓存,常�?于未登陆的用户访问用户中心重定向到登录页�?- 304:协商缓存,告诉客户端有缓存,直接使用缓存中的数据,返回页面的只有头部信息,是没有内容部�?- 400:参数有误,请求无法被服务器识别

  • 403:告诉客户端进制访问该站点或者资源,如在外网环境下,然后访问只有内网IP才能访问的时候则返回

  • 404:服务器找不到资源时,或者服务器拒绝请求又不想说明理由时

  • 503:服务器停机维护时,主动�?03响应请求�?nginx 设置限速,超过限速,会返�?03

  • 504:网关超�?

参考文�?

面试官:说说 linux系统�?文件操作常用的命令有哪些�?

一、是什�?Linux 是一个开源的操作系统(OS),是一系列Linux内核基础上开发的操作系统的总称(常见的有Ubuntu、centos�?

系统通常会包含以�?个主要部�?- 内核

  • shell
  • 文件系统
  • 应用程序

文件系统是一�?*目录树的结构**,文件系统结构从一个根目录开始,根目录下可以有任意多个文件和子目录,子目录中又可以有任意多个文件和子目录

二、文件操�?

常见处理目录的命令如下:

  • ls(英文全拼:list files�? 列出目录及文件名
  • cd(英文全拼:change directory):切换目录
  • pwd(英文全拼:print work directory):显示目前的目�?- mkdir(英文全拼:make directory):创建一个新的目�?- rmdir(英文全拼:remove directory):删除一个空的目�?- cp(英文全拼:copy file�? 复制文件或目�?- rm(英文全拼:remove�? 删除文件或目�?- mv(英文全拼:move file�? 移动文件与目录,或修改文件与目录的名�?

ls

列出目录文件,选项与参数:

  • -a :全部的文件,连同隐藏文�? 开头为 . 的文�? 一起列出来(常用)
  • -d :仅列出目录本身,而不是列出目录内的文件数�?常用)
  • -l :长数据串列出,包含文件的属性与权限等等数据�?常用)

例如将家目录下的所有文件列出来(含属性与隐藏�?

1
[root@www ~]# ls -al ~

cd

切换工作目录

语法�?

1
cd [相对路径或绝对路径]
1
2
3
4
5
# 表示回到自己的家目录,亦即是 /root 这个目录
[root@www runoob]# cd ~

# 表示去到目前的上一级目录,亦即�?/root 的上一级目录的意思;
[root@www ~]# cd ..

pwd

pwd �?Print Working Directory 的缩写,也就是显示目前所在目录的命令�?

1
[root@www ~]# pwd [-P]

选项与参数:

  • -P :显示出确实的路径,而非使用连结 (link) 路径

mkdir

创建新目�?
语法�?

1
mkdir [-mp] 目录名称

选项与参数:

  • -m :配置文件的权限
  • -p :帮助你直接将所需要的目录(包含上一级目�?递归创建起来

rmdir (删除空的目录)

语法�?

1
rmdir [-p] 目录名称

选项与参数:

  • -p :连同上一级『空的』目录也一起删�?

cp

即拷贝文件和目录

语法�?

1
cp 目标文件 拷贝文件

用法如下�?

1
2
3
4
cp file file_copy --> file 是目标文件,file_copy 是拷贝出来的文件
cp file one --> �?file 文件拷贝�?one 目录下,并且文件名依然为 file
cp file one/file_copy --> �?file 文件拷贝�?one 目录下,文件名为file_copy
cp *.txt folder --> 把当前目录下所�?txt 文件拷贝�?folder 目录�?复制代码

常用参数如下�?

  • -r 递归的拷贝,常用来拷贝一整个目录

rm (移除文件或目�?

语法�?

1
2
3
4
5
6
7
8
9
10
11
12
 rm [-fir] 文件或目�?```

选项与参数:

- -f :就�?force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动�?- -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!



### mv (移动文件与目录,或修改名�?

语法�?

[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 …. directory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

选项与参数:

- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖�?- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)



### ln

`Linux` 文件的存储方式分�?个部分,文件名、文件内容以及权限,其中文件名的列表是存储在硬盘的其它地方和文件内容是分开存放的,每个文件名通过 `inode` 标识绑定到文件内�?
`Linux` 下有两种链接类型:硬链接和软链接

#### 硬链�?
使链接的两个文件共享同样文件内容,就是同样的 `inode` ,一旦文�?和文�?之间有了硬链接,那么修改任何一个文件,修改的都是同一块内�?
语法�?
```cmd
# 创建 file2 �?file1 的硬链接
ln file1 file2

删除文件1不会影响删除文件2,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删�?
只有同时删除了两个文件后后,它们共同指向的文件内容才会消失�?

软链�?

类似window系统的快捷方�?
使用方式�?

1
ln -s file1 file2

其实 file2 只是 file1 的一个快捷方式,它指向的�?file1 ,所以显示的�?file1 的内容,但其�?file2 �?inode �?file1 并不相同

如果

删除�?file2 的话�?file1 是不会受影响的,但如果删�?file1 的话�?file2 就会变成死链接,因为指向的文件不见了

三、文件查�?

常见的文件内容查看有如下�?

  • cat 由第一行开始显示文件内�?- less 一页一页的显示文件内容
  • head 只看头几�?- tail 只看尾巴几行

cat

由第一行开始显示文件内�?
语法�?

1
cat [-AbEnTv]

常见的选项与参数如下:

  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号�?- -n :列印出行号,连同空白行也会有行号,�?-b 的选项不同

less

一页一页翻动,以下实例输出/etc/man.config文件的内容:

1
2
3
4
5
6
7
8
[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
: <== 这里可以等待你输入命令!

less运行时可以输入的命令有:

  • 空白�? :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字串 :向下搜寻『字串』的功能�?- ?字串 :向上搜寻『字串』的功能�?- n :重复前一个搜�?(�?/ �?? 有关�?
  • N :反向的重复前一个搜�?(�?/ �?? 有关�?
  • q :离开 less 这个程序

取出文件前面几行

语法�?

1
head [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意�?
    1
    [root@www ~]# head /etc/man.config

tail

取出文件后面几行

语法�?

1
tail [-n number] 文件 

选项与参数:

  • -n :后面接数字,代表显示几行的意�?- -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦�?

参考文�?

面试官:说说你对 linux 用户管理的理解?相关的命令有哪些�?

一、是什�?

Linux是一个多用户的系统,允许使用者在系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境

而与 Windows 系统最大的不同�?Linux 允许不同的用户同时登录主机,同时使用主机的资�?
既然是多用户的系统,那么最常见的问题就是权限,不同的用户对于不同的文件都应该有各自的权�?
例如,小 A 希望个人文件不被其他用户读取,而如果不对文件进行权限设置,共享了主机资源的�?B 也可以读取小 A 的个人文件,这是不合理的

这里面涉及到用户与用户组的概�?

二、用户与用户�?

Linux �?“用户与用户组�?的概念,建立用户与文件权限之间的联系,保证系统能够充分考虑每个用户的隐私保护,很大程度上保障了 Linux 作为多用户系统的可行�?
从文件权限的角度出发,“用户与用户组�?引申为三个具体的对象�?

  • *文件所有�?
  • *用户组成�?
  • *其他�?

每一个对象对某一个文件的持有权限是不同的

文件所有�?

当一个用户创建了一个文件,这个用户就是这个文件的文件所有者。文件所有者对文件拥有最高权限,同时排他性地拥有该文�?
除非文件所有者开放权限,否则其他人无法对文件执行查看、修改等操作

用户�?

�?“其他用户�?区分为用户组成员和其他人后,若文件所有者希望对部分用户开放权限,而对其他人继续保持私有,则只需要将这部分用户与文件所有者划入一个用户组

这样,这部分用户就成了与文件所有者同组的用户组成员。用户可以对用户组成员开放文件权限,用户组成员则具备了查看、修改文件的权限,而对其他无关用户保持私有

例如,团队成员之间保持文件资源共享,但对非团队成员保持私有,这就需要将文件所有者与团队成员用户划分为同一个用户组,再对用户组成员开放权限即�?

其他�?

既与文件所有者没有任何联系的其他用户

小结

户和用户组的对应关系是:一对一、多对一、一对多或多对多�?

  • 一对一:某个用户可以是某个组的唯一成员
  • 多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组
  • 一对多:某个用户可以是多个用户组的成员
  • 多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的�?

拓展

当我们使用ls -l的时候,会列出当前目录的文件信息,如下:

1
drwxr-xr-x   3  osmond   osmond    4096  05-16 13:32   nobp
  • d:文件类�?- rwxr-xr-x:文件权�?- 3 硬链接数或目录包含的文件�?- osmond:文件所有�?- 4096:文件长�?- 05-16 13:32:文件上次修改的事件和日�?- nobp:文件名

下面主要看看文件权限分析,实际上是由9个字符组成,�?个一组:

  • 第一组控制文�?*所有�?*的访问权�?- 第二组控制所有�?*所在用户组**的其他成员的访问权限
  • 第三组控�?*系统其他用户**的访问权�?
    -代表当前没有,rwx对应代表的意思如下:

三、用户操�?

用户相关的操作有如下�?

新增用户

useradd 可以用来创建新用户,简要语法为�?

1
useradd [options] [username]

例如�?
添加一个一般用�?

1
# useradd kk //添加用户kk

为添加的用户指定相应的用户组

1
2
3
# useradd -g root kk //添加用户kk,并指定用户所在的组为root用户�?```

创建一个系统用�?

useradd -r kk //创建一个系统用户kk

1
2
3

为新添加的用户指�?home目录

useradd-d /home/myf kk //新添加用户kk,其home目录�?home/myf

//当用户名kk登录主机时,系统进入的默认目录为/home/myf

1
2
3
4
5
6
7
8
9



## 设置密码

创建的用户还没有设置登录密码,需要利用`passwd`进行密码设置

```text
asswd [options] [username]

option 参数有如下:

  • -d 删除密码
  • -f 强迫用户下次登录时必须修改口�?- -w 口令要到期提前警告的天数
  • -k 更新只能发送在过期之后
  • -l 停止账号使用
  • -S 显示密码信息
  • -u 启用已被停止的账�?- -x 指定口令最长存活期
  • -g 修改群组密码
  • 指定口令最短存活期
  • -i 口令过期后多少天停用账户

例如,修改用户密�?

1
2
3
4
# passwd runoob  //设置runoob用户的密�?Enter new UNIX password:  //输入新密码,输入的密码无回显
Retype new UNIX password: //确认密码
passwd: password updated successfully
#

显示账号密码信息

1
2
# passwd -S runoob
runoob P 05/13/2010 0 99999 7 -1

删除用户密码

1
2
# passwd -d lx138 
passwd: password expiry information changed.

修改用户

chage 命令用来修改与用户密码相关的过期信息,如密码失效日、密码最短保留天数、失效前警告天数�?

1
chage [option] [username]

常见的参数有�?

  • -d:指定密码最后修改日�?

  • -E:密码到期的日期

  • -l:列出用户以及密码的有效�?

  • -m:密码能够更改的最小天�?- -M:密码保持有效的最大天�?

删除用户

userdel 命令用来删除用户的相关的所有数据�?

1
userdel [options] [username]

常见的参数有�?

  • -r:删除用户登入目录以及目录中所有文�?
    例如删除用户账号
1
# userdel hnlinux

用户组相关的操作如下�?

新增用户�?

groupadd用于创建一个新的工作组,新工作组的信息将被添加到系统文件中

1
groupadd [options] [groupname]

常见的参数有如下�?

  • -g:指定新建工作组�?id�?- -r:创建系统工作组,系统工作组的组ID小于 500
  • -K:覆盖配置文�?”/ect/login.defs”
  • -o:允许添加组 ID 号不唯一的工作组
  • -f,–force: 如果指定的组已经存在,此选项将失明了仅以成功状态退�?
    例如创建一个新的组,并添加�?ID�?
    1
    #groupadd -g 344 runoob

修改用户

groupmod 命令用来修改 group 相关的参数,例如群组识别码或者名�?

1
groupmod [options] [groupname]

常见的参数有�?

  • -g <群组识别�?  设置欲使用的群组识别�?- -o  重复使用群组识别�?- -n <新群组名�?  设置欲使用的群组�?
    例如修改组名�?
    1
    # groupmod -n linux linuxso 

删除用户�?

groupdel 用于删除用户组,如果该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组

1
groupdel [groupname]

日常工作通常会碰到只有root用户才有权限执行的操作,这就需要使用用户身份切换的命令�?

su

用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码

sudo

sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像�?root 亲自执行

不是所有的用户都能执行 sudo 命令的,而是�?/etc/sudoers 文件内的用户才能执行这个命令

例如sudo命令使用ls�?

1
$ sudo ls

参考文�?

0%