PHP面试宝典之网络篇

七层网络协议模型及常见协议?

第一层:物理层:直接在物理传输介质上发送和接收数据

第二层:数据链路层:负责信息从一个节点到另一个节点的物理传输
1):vlan(虚拟局域网)

第三层:网络层:负责数据从一个节点到另一个节点的传输
1):IP(网络互联协议,无连接,不可靠的数据包传输服务)

第四层:传输层:负责数据传输时发送主机和目的主机之间的完整性
1):tcp(传输控制协议:基于字节流的,传输层可靠通信协议)
2):udp(用户数据报协议:面向事务的简单不可靠信息传送服务)
3):tls(传输层安全协议:在两个通信应用程序之间提供保密性和数据完整性)

第五层:会话层:负责应用程序之间的会话,协调系统和服务之间的交流,使其有序通信

第六层:表示层:统一应用层数据格式,使数据可在两个系统中传输
1):lpp(轻量级会话协议)

第七层:应用层:提供应用层协议,为用户和网络提供交互接口
1):dns(域名解析协议:域名解析ip地址)
2):http(超文本传输协议:规定web服务端和客户端的数据传输格式)
3):https(超文本传输安全协议:http加上tls/ssl协议构成的可加密传输)
4):ftp(文件传输协议:网络共享文件传输)

tcp和udp的区别?

1:tcp面向连接,提供可靠服务,udp无连接,不保证可靠交付

2:udp实时性高,工作效率高,适合高速传输和实时性较高的通信

3:tcp连接只能一对一,udp支持一对一、一对多、多对一的交互

4:tcp面向字节流,udp面向报文,不可分割,一次交付一个报文

5:udp适合一次性传输较小数据的网络应用,如:dns,snmp

http状态中302、403、500代码含义?

一二三四五原则:一:消息系列,二:成功系列,三:重定向系列,四:请求错误系列,五:服务器错误系列

301:永久重定向

302:临时重定向

401:未授权

403:禁止访问

404:请求资源不存在

500:服务器内部错误,在php错误日志中查看

502:网关得到无效响应,服务端连接mysql出错或nginx接收到不完整数据

504:网关超时

一次完整的网页请求?

1:请求一个域名

2:dns解析域名得到IP和端口号

3:tcp三次握手连接到服务器

4:nginx 80端口监听到请求

5:加载nginx的fast-cgi模块

6:PHP-fpm监听并接收请求

7:启用worker进程处理请求

8:将代码交由zend引擎语法解析并执行

9:nginx得到结果通过http返回给浏览器

10:浏览器进行解析

tcp连接的三次握手和四次挥手?

三次握手:
1:客户端发送一个请求包,等待确认;

2:服务端收到请求包,发送确认包并携带一个自己的请求包;

3:客户端收到请求和确认包,再发送一个确认包

四次挥手:
1:客户端发送断开请求

2:服务端接收到断开请求,断开客户端到服务端的连接

3:服务端等待数据传输完成,发送断开请求

4:客户端收到请求,并断开

https和http的区别?

1:端口不同,http是80;https是443;

2:传输方式不同,http明文传输,无状态连接;https加密传输,身份认证,更安全

3:https需要申请ssl证书

4:http只需交换3个包(三次握手);https需要交换12个包(包含ssl的9个)

5:seo排名上https更优,但也更耗资源,加载更慢

https为什么是安全的?

因为它使用了ssl证书,对数据进行加密和身份认证
**1:数据加密:**客户端和服务器通过非对称加密交换密钥,使用对称加密,加密传输数据

**2:身份验证:**使用数字证书对服务器的身份进行认证,ca证书,客户端连接服务器时,服务器将证书发给客户端,客户端校验证书合法性

**3:数据完整性:**使用消息摘要对传输数据进行签名,确保没被篡改,客户端接收到数据时,会根据签名验证数据的完整性

https交换了几对密钥?

两次密钥交换
**1:对称密钥:**https握手中,客户端和服务器会协商出一个对称密钥,用于加密和解密传输的数据。只存在当前连接

**2:非对称密钥:**https握手中,服务器向客户端发送证书,证书中包含了服务器公钥,客户端使用这个公钥加密一个随机数,发送给服务器,服务器收到后,使用自己的私钥进行解密,得到随机数,接下来,客户端和服务器使用随机数计算出一个新的对称密钥,用于加密和解密数据。这个过程涉及到非对称密钥的使用,但实际上只有一对非对称密钥

http1.0,1.1,2.0的区别?

1.0:短连接(一次请求完成,立刻断开),无状态(客户端不记录过去的请求),没有host

1.1:默认长连接,请求管道化(并行),增加缓存处理,增加host字段,支持断点传输

2.0:多路复用(基于二进制分帧),头部压缩,服务器推送

get和post的区别?

1:本质区别:get是获取资源,post一般用于改变资源

2:安全性方面:get一般在地址栏,会被浏览器缓存,可回退,可刷新,post在body中,不会被缓存,无法回退,刷新会重复提交

3:数据包:get将header和data合并发送一个tcp数据包,post分开发送两个包

4:数据类型:get只能发送ascii字符,post多种数据类型

5:数据大小:get url不超过2048个字符,post可修改配置文件

为什么post比get安全?

1:数据传输方式:post参数在请求体中,get参数直接暴露在url后面

2:请求限制:get没有限制请求数据大小,post可以设置,可以避免请求数据过大导致的安全问题

3:缓存机制:get容易被缓存,post不会被缓存

4:防止篡改:get请求,可以通过修改url,更改请求数据;post的请求数据在请求体中,不能随意更改,如果需要修改,必须对请求体进行修改,更难实现

5:post只是相对安全,并不是绝对安全,可以对参数加密、校验、权限控制等

session和cookie的区别?

1:安全性:cookie在浏览器,可以通过分析本地文件进行cookie欺骗;session在服务器更安全

2:性能:session保存在服务器,访问增多,影响性能

3:限制:cookie有大小和个数的限制(4k,20个)

4:生命周期:cookie在关闭浏览器时消亡,session为防止内存溢出,会删除长时间未活跃的session

5:session是基于cookie的,禁用cookie会导致session失效,但可以通过别的方式实现

禁用cookie,实现session的正常使用?

1:URL重写,将session ID作为参数,通过URL传输到服务端

2:隐藏表单,通过表单形式,将session ID提交到服务端

session共享的目的,及实现方法?

为了解决负载均衡时,session信息不共享,也就是不能跨服务器访问的问题
实现:
1:服务器文件同步(文件重复,资源浪费)

2:存数据库(数据库压力大)

3:存cookie(不安全)

4:ip绑定(nginx进行ip_hash计算,将ip绑定到指定服务器)

5:存redis缓存(推荐)

公钥、私钥?

采用rsa算法对网络数据进行加密传输的方式。一个用来加密,另一个用来解密。

通过支付宝提供的openssl工具,在本地生成公钥和私钥,公钥上传到支付宝商家后台;

支付:我们用私钥,对订单加密,支付宝用我们上传的公钥解密

回调:支付包用它的私钥对回调信息加密,我们收到信息,用支付宝公开的公钥进行解密

前后端分离,如果保证鉴权?

1:token认证:前端登录后,向后端请求授权token,后端返回给前端,前端存储在本地,每次请求时将token放在请求头中,后端通过校验确定用户身份和权限,为了避免token泄漏或被盗用,应对token进行加密和过期处理

2:oauth2认证:微信登录,qq登录,前端将用户跳转到认证服务器,用户登录授权后,认证服务器返回授权码,前端发送给后端,后端使用授权码向认证服务器请求访问令牌,后端再使用访问令牌进行数据请求

3:session认证:前端登录后,后端将用户信息存到session中,前端每次请求将sessionid放在请求头中传给后端,后端通过校验确认用户身份

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值