1. 在浏览器中输入一个网址,它的运行过程。
这个过程中发生了网络通信,即利用TCP/IP协议簇进行网络通信,发送端由应用层往下走,接收端由物理层往上走,步骤如下:
- 浏览器输入URL,其中是HTTP 协议。
- 应用层DNS解析,获取域名对应的IP。
- 得到目标服务器的IP地址以及端口号(HTTP 80断端口,HTTPS 443端口),会调用系统库函数Socket,请求一个TCP流套接字。客户端回向服务器发送HTTP请求报文。
- 网络层IP查询MAC地址。
- 传输层TCP传输报文。
- 数据到达数据链路层,此时客户端发送请求结束。
- 服务器端经过数据链路层→网络层→传输层→应用层,解析请求报文,发送响应报文。
- 关闭连接,TCP四次挥手。
- 客户端解析HTTP 响应报文,浏览器开始显示HTML。
2. DNS解析过程
- 浏览器自身缓存
- 操作系统缓存
- 本地域名服务器(LDNS)
- Root Server 域名服务器
- 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址
- 此时LDNS再发送请求给上一步返回的gTLD
- 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器
- Name Server根据映射关系表找到目标ip,返回给LDNS
- LDNS缓存这个域名和对应的ip
- LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束
3. 搜索敏感词汇时,页面被重置的原理
- 正常的TCP连接
根据TCP协议的规定,用户和服务器建立连接:
(1)第一次握手用户向服务器发送SYN数据包发出请求(SYN, x:0);
(2)第二次握手服务器向用户发送SYN/ACK数据包发出回应(SYN/ACK, y:x+1);
(3)第三次握手用户向服务器发送ACK数据包发出确认(ACK, x+1:y+1),至此一个TCP连接建立成功。
其中,x为用户向服务器发送的序列号,y为服务器向用户发送的序列号。
- 当搜索敏感词汇
(1)关键字检测,针对明文或者base64等弱加密通讯内容,与准备好的敏感词库进行匹配;
(2)当发现敏感词时,将服务器发回的SYN/ACK包改成SYN/ACK, Y:0,这代表TCP连接被重置,用户便主动放弃了连接,提示连接失败。
原理:让用户误认为服务器拒绝连接,而主动放弃继续与服务器连接,自动阻断记录含有敏感词的网页。
Session 和 Cookie 的区别
- Cookie
指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。
- 把用户的数据写给用户浏览器(存放在客户端)
- 支持String类型文件,存放文本信息,且大小受限。
- 可以长时间保存在客户端。
- Session
在web开发中,服务器可以为每个用户创建一个会话对象(session对象),默认情况下一个浏览器独占一个session对象,因此在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中。当用户使用浏览器访问其他程序时,其他程序可以从用户的session中取出该用户的数据,为用户服务。
实现原理:服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session服务。
- 把用户的数据写到用户独占的session中(存放在服务器中,通常要借助cookie来存放JSESSIONID号)。
- 可以存放任何类型数据信息。
- session对象由服务器创建,开发人员可以调用request对象的getsession()方法得到。
- session对象在浏览器关闭后就失效;session数据存放在服务器内存中。