近期又到了金3银4的找工作换工作时期了,应各位童鞋要求,持续更新写面试可以用到的内容,方便于他们在面试中获胜。由于鄙人的时间实在是有限,目前身负的项目较多,所有只能偷时间进行更新,忘各位见谅!!!
1.http 协议通信原理
日常最常用的协议,虽安全性不如https,但仍然为主流。
1.1http 请求方法
GET 客户端的请求指定资源信息,服务器返回指定资源。
HEAD 只请求响应报文中的 HTTP 首部内容。
POST 将客户端的数据提交到服务器端。
PUT 用从客户端向服务器传送的数据取代指定文档的文档内容。
DELETE 请求服务器删除 request-URI 所标识的资源。
MOVE 请求服务器将指定的页面移动至另一个网络地址。
1.2 http 状态码
http 状态码是用来表示 web 服务器响应 http请求状态的数字代码(不同的数字代表不同的含义),常见的数字码如下(常见的已标注为红色):
100~199 用于客户端的相应的某些动作。
200~299 用于表示成功(其中的 200 最常见)。
300~399 用于已经移动的文件,并且常被包括在定位头信息中指定新的地址信息(301 永久跳转)。
400~499 用于指出客户端的错误(403 禁止访问、404 页面找不到)。
500~599 用于服务器内部的错误(500 服务器的内部错误、502 坏的网关、504 网关超时)。
1.3 http 报文
请求行包括:URL字段http 协议版本。
请求头部一般是:数据的类型(content-type 和 content-length)。
空行 是用来区分以上内容与请求报文主体的分割线。
响应报文主体也就是用户请求,服务端响应的报文主体。
1.4总结
开发常用get/post,一请求一提交;状态码常见要记住:200正常不用管,404常见客户端问题,500、502、504服务器内部错误
2.企业DNS原理
访问网站的步骤:打开网页-------输入网址 www.skyfansxqy.top-----查看本地的 DNS 库是否存在该网站域名与对应 ip 地址的对应关系。
2.1域名空间图:
2.2host文件说明
相信大家可能知道windows操作系统或者 linux操作系统层面的/etc/hosts 文件是:IP 地址与域名的对应关系。若在访问某私有地址无法访问时,我们可以在hosts文件中加入对应IP及域名的映射关系,即可访问指定应用。
2.3 原理
2.3.1 情况1,本地存在DNS缓存
若本地存在该网站域名相对应的IP地址,然后我们直接根据本地已经缓存的DNS内容进行解析,然后访问该域名对应的IP地址内容,然后进行TCP协议的三次握手,进行与网站的连接尝试,当访问网站完毕之后,又进行了四次挥手,然后断开连接。
2.3.2 情况2 ,本地不存在
本地不存在该网站域名与 IP 地址的对应关系情况下,我们本地的 DNS 系统,也就是 LDNS(简称local DNS)会从 DNS 系统的根进行请求对 www.skyfansxqy.top域名的解析,并且针对 DNS 系统的各个阶层进行查找,进行一级一级的查找,最终会找到 www.skyfansxqy.top这个域名(域名注意区分层级),当然 DNS 系统里这个域名的进行授权的 DNS 服务器正是我们企业购买的 DNS 服务器。一般在申请域名的时候,工信部和信息部审核内容时会要求详细填写内容。
2.4总结
DNS相互找,找到IP开加载,并进行(遵从)7层协议过程(理论)
3.TCP 的三次握手与四次挥手(常问)
先上图,一定要记住,图能更好的使你了解原理性的内容,根据图去对照文字解说,你可以更好的理解。
3.1 三次握手
3.1.1 文字说明
CLOSED 关闭状态:
为建立建立连接之前的起始点,在连接超时或者连接关闭的时候进入此状态,但是这并不是一个真正的状态,而是这个状态图的假想起点和终点(便于我们思考与理解)。
LISTEN 监听状态:
服务器 server 端等待连接的状态。服务器经过 socket,bind,listen 函数之后进入此状态,开始监听客户端发过来的连接请求。此称为应用程序被动打开(等待客户端的连接请求)。
SYN_SENT 状态:
第一次握手发生阶段,客户端发起连接。客户端调用 connect,发送 SYN 给服务器端,然后客户端进入 SYN_SENT状态,等待服务端的确认(三次握手中的第二个报文)。如果服务器端不能连接,则客户端直接进入 CLOSED 状态。
SYN_RCVD 状态:
第二次握手发生阶段,这里是服务器端接收到了客户端的 SYN请求,此时服务端由 LISTEN 进入 SYN_RCVD 状态,同时服务器端回应一个 ACK,然后再发送一个 SYN 即 SYN+ACK 给客户端。
状态图中还描绘了这样一种情况,当客户端在发送 SYN 的同时也收到服务器端的 SYN 请求,即两个同时发起连接请求,那么客户端就会从 SYN_SENT 转换到 SYN_REVD 状态。
ESTABLISHED 状态:
第三次握手发生阶段,客户端接收到服务器端的 ACK 包(ACK,SYN)之后,也会发送一个 ACK 确认包,客户端进入 ESTABLISHED 状态,表明客户端这边已经准备好,但 TCP 需要两端都准备好才可以进行数据传输。服务器端收到客户端的 ACK 之后会从 SYN_RCVD 状态转移到 STABLISHED 状态,表明服务器端也准备好进行数据传输了。
总结:客户端和服务器端都变为 ESTABLISHED 状态,就可以进行数据的传输了;当然 ESTABLISHED 也可以说是一个数据传送状态。
3.2 四次挥手
3.2.1文字说明
FIN_WAIT_1 状态:
第一次挥手 主动关闭的一方(执行主动关闭的一方既可以是客户端,也可以是服务器端,我们这里以客户端执行主动关闭为例子),终止连接时,发送 FIN 给对方,然后等待对方返回 ACK 。第一次挥手客户端就进入 fin_wait_1状态。
CLOSE_WAIT 状态:
接收到 FIN 之后,被动关闭的一方进入 close_wait 状态。进入该状态的具体动作是接收到客户端发来的 FIN,同时服务端对客户端发送 ACK。
CLOSE_WAIT 状态:可以理解为被动关闭的一方此时正在等待上层应用程序发出关闭连接指令。
TCP 关闭是全双工过程,这里客户端执行了主动关闭,被动方服务器端接收到 FIN 后也需要调用 close 关闭,这个 CLOSE_WAIT 就是处于这个状态,等待关闭的请求方发送 FIN,发送了 FIN 则进入 LAST_ACK 状态。
FIN_WAIT_2 状态:
主动端(这里是客户端)先执行主动关闭发送 FIN,然后接收到被动方(这里是服务端)返回的 ACK 后进入此状态。
LAST_ACK 状态:
被动方(服务器端)发起关闭请求,发送 FIN 给对方,进入此状态,同时在接收到 ACK 时进入 CLOSED 状态。
CLOSING 状态:
两边同时发起关闭请求时(即主动方发送 FIN,等待被动方返回 ACK,同时被动方也发送了 FIN;主动方接收到了FIN 之后,发送 ACK 给被动方),主动方会由 FIN_WAIT_1 进入此状态,等待被动方返回 ACK。
TIME_WAIT 状态:
从状态变迁图会看到,四次挥手操作最后都会经过这样一个状态然后进入 CLOSED 状态。共有三个状态会进入该状态
由 CLOSEING 状态进入:
同时发起关闭情况下,当主动端接收到 ACK后,进入此状态,实际上这里的同时是这样的情况:客户端发起关闭请求,发送 FIN 之后等待服务器端回应 ACK,但此时服务器端同时也发起关闭请求,也发送了 FIN,并且被客户端先于 ACK 接收到。
由 FIN_WAIT_1 进入:
发起关闭后,发送了 FIN,等待 ACK 的时候,正好被动方(服务器端)也发起关闭请求,发送了 FIN,这时客户端接收到了先前 ACK,也收到了对方的 FIN,然后发送 ACK(对对方 FIN的回应),与 CLOSING进入的状态不同的是接收到 FIN 和 ACK 的先后顺序。
由 FIN_WAIT_2 进入:
这是不同时的情况,主动方在完成自身发起的主动关闭请求后,接收到了对方发送过来的 FIN,然后回应 ACK。