计算机网络常见面试题
TCP建立连接的三次握手过程
- 第一次握手:起初两端都处于closed关闭状态,client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给server,client进入SYN-SENT状态,等待server确认;
- 第二次握手:server收到数据包后由标志位SYN=1得知client请求建立连接,server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给client以确认连接请求,server进入SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;
- 第三次握手:client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给server,server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,client和server进入established状态,完成三次握手,随后client和server就可以开始传输数据。
CDN原理
CDN的全称是Content Delivery Network,即内容分发网络。CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响
用户从输入URL到显示页面这个过程发生了什么
DNS解析
TCP连接
发送HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
连接结束
http的常见的请求方法
常见的请求方法有get,post,get用来请求数据,post用来提交数据
请求方法head特性
head只请求页面的首部,head方法和get方法相同,只不过服务器响应时不会返回消息体,一个head请求的响应中,http头中包含的元信息应该和一个get请求的响应消息相同,这种方法可以用来获取请求中隐含的元信息,而不用传输实体本身,这个也经常用来测试超链接的有效性和可用性,
head请求有以下特点:
只请求资源的首部
检查超链接的有效性
检查网页是否被修改
用于自动搜索机器人获取网页的标志信息,获取rss种子信息,或者传递安全认证信息等。
OSI七层模型
从上到下分别是:
应用层:文件传输,常用协议http,snmp,FTP
表示层:数据格式化,代码转换,数据加密
会话层:建立,解除会话
传输层:提供端对端的接口,tcp,udp
网络层:为数据包选择路由,IP,icmp
数据链路层:传输有地址的帧
物理层:二进制的数据形式在屋里媒体上传输数据
http的缓存机制
http缓存即是浏览器第一次向一个服务器发起http请求后,服务器会返回请求的资源,并且在响应头中添加一些有关缓存的字段,如:cache-control,expires,last-modifed,ETag,Date等,之后浏览器在向该服务器请求资源就可以视情况使用强缓存和协商缓存,
强缓存:浏览器直接从本地缓存中获取数据
协商缓存:浏览器发送请求到服务器,服务器判断是否可使用本地缓存。
TCP/IP的网络模型
TCP/IP模型是一系列网络协议的总称,这些协议的目的是使得计算机之间可以进行信息交换,TCP/IP模型四层架构从下到上分别是链路层,网络层,传输层,应用层
链路层的作用是负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网,ADSL等,
网络层负责分配地址和传送二进制数据,主要协议是IP协议,
传输层负责传送文本数据,主要协议是TCP
应用层负责传送各种最终形态的数据,是直接与用户信息打交道的层,主要协议有http,ftp等.
常见的跨域方式
- JSONP,解决老版本浏览器跨域数据访问问题,原理是web页面调用js文件不受浏览器同源策略限制,所以通过script标签可以进行跨域请求.
- 流程如下:
- 首先前端设置好回调参数,并将其作为URL的参数
- 服务器端收到请求后,通过该参数获取到回调函数名,并将数据放在参数中返回
- 收到结果后因为是script标签,所以浏览器当做脚本运行
-
cors,全称是跨域资源共享,允许浏览器向跨源服务器发出XMLHTTPRequest请求,从而克服了ajax只能同源使用的策略,实现cors的关键是服务器,只要服务器实现了cros接口,就可以跨域通信
前端逻辑很简单,正常发起ajax请求即可,陈宫的关键在于服务器Access-Control-Allow-Origin,是否包含请求页面的域名,如果不包含的话,浏览器将认为这是一次失败的异步请求,将会调用xhr.onerror中的函数.
cros使用简单,支持post方式,但是存在兼容问题
浏览器将cors请求分为两类,简单请求和非常简单请求,对于简单请求,浏览器直接发出cors请求,就是在头信息之中增加一个origin字段,用于说明本次请求来自哪个协议+域名+端口,服务器根据这个值,决定是否同意本次请求,如果服务器同意本次请求,返回的响应中会多出几个头信息字段:
Access-Control-Allow-Origin:返回origin的字段或者*
Access-Control-Allow-Credentials,该字段可选,是一个bool值,表示是否允许发送cookie
Access-Control-Express-Headers -
服务器代理:
即当你有跨域的请求操作时发给后端,让后端帮你代为请求 -
四种不常用的方式:
location.hash
Window.name
postMessage