面试基础-计算机网络篇
1.输入 url 到页面呈现的过程
1)域名解析:www.baidu.com.cn 是网址也是域名,需要对应到iP地址:
2)浏览器发起HTTP请求;
3)到了传输层,选择传输协议,TCP或者UDP,TCP是可靠的传输控制协议,对HTTP请求进行封装,加入了端口号等信息;服务器指定端口(HTTP协议80/8080, HTTPS协议443);
4)通过IP协议将IP地址封装为IP数据报;
5)ARP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,找到目的MAC地址;
6)数据链路层,把网络层交下来的IP数据报添加首部和尾部,封装为MAC帧,现在根据目的mac开始建立TCP连接,三次握手;
7)服务器响应请求并请求客户端要的资源,传回给客户端;浏览器解析html代码,并请求HTML代码中的资源;
8)断开TCP连接;
9)浏览器对页面进行渲染呈现给用户。
2.拿到 http 响应后,怎么渲染页面
浏览器内核拿到内容后,渲染大致分为以下几步:
(1)解析html,构建DOM树;同时解析CSS,生成CSS规则树。
(2)合并DOM树和CSS规则树,生成Render树。
(3)布局Render树(layout/reflow),负责各元素的尺寸,位置计算。
(4)绘制render树(paint),绘制页面像素信息。
(5)浏览器会将各层的信息发给GPU。GPU会将各层合成(composite),显示在屏幕上。
html 的组成,js、css 这些静态文件是存在哪里?
HTML文档结构一般包括包括标记(Html)、头部(Head)、主体bai(Body)三部分。
服务器发送请求得到的静态资源是相同的。所以我们可以把静态资源缓存在浏览器
3.服务端怎么知道发的是 http 请求
浏览器会向服务器发送请求行,它包括了请求方法、请求 URI(Uniform Resource Identifier)和 HTTP 版本协议。
如:GET /index.html HTTP1.1
ftp的格式时: ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名
如:ftp://list:list@foolish.6600.org:2003/soft/list.txt
4.有没有了解高并发
高并发场景有:淘宝的双11、春运时的抢票、微博大V的热点新闻
目标:高性能,高可靠,高扩展
性能也反映了用户体验,响应时间分别是100毫秒
方法:
1)提升单机的处理能力:通过增加内存、CPU核数、存储容量、或者将磁盘升级成SSD等堆硬件的方式来提升。
2)一般会用到架构分层和服务拆分,通过分层做隔离,通过微服务解耦。
3)把负载(request)均衡分配到不同的服务实例,利用集群的能力去对抗高并发;
需要做分库分表 + 读写分离。就是把一个库分成多个库,部署在多个数据库服务上,主库承载写请求,从库承载读请求。从库可以挂载多个,因为很多场景写的请求远少于读的请求。
5.TCP长连接短连接
长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。
这种方式下由于通讯连接一直存在。此种方式常用于P2P通信。
短连接:Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。
此方式常用于一点对多点通讯。C/S通信。
6.cookie和session区别
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份.
禁用cookie:
如果客户端禁用了cookie,通常有两种方法实现session而不依赖cookie。
1)URL重写,就是把sessionId直接附加在URL路径的后面。
2)表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
7.get和post区别
从本质上讲,get和post都是http请求,都是tcp连接,是无区别的。
但是由于get请求的参数位于url中,而post请求的参数位于request body中。
一是get请求的安全性不如post请求;
二是get的参数有长度限制,而post没有;
三是get的参数只允许ASCII字符,post没有限制。
点击回退或刷新时,post请求会再次提交表单,而get请求不会。所以post是回退有害的,get回退无害。
8.幂等性什么地方需要用到
PUT被定义为幂等(idempotent)的方法,POST则不是。
如果一个网络重复执行多次,产生的效果是一样的,那就是幂等(idempotent)。
如修改用户密码,虽然提交的还是账户名跟用户密码这个俩个必填参数,但是每次提交都只是更新该用户密码,每次请求都只是覆盖原先的值。此时就该用PUT。
重复充值,该实现并不能100%保证幂等。
列举三种改进方式:
1、悲观锁,select for update,整个执行过程中锁定该订单对应的记录。
2、乐观锁,affectrows = db.update("update payorder set state='已支付' where orderid=$orderid and state='未支付' "),如果affectrows=1,执行充值,否则返回已处理。
3、定义notifylog表,orderid为unique key或者primary key,执行前,先insert,若insert成功则执行充值,否则返回已处理。
9.对web的攻击有什么了解
SQL注入攻击就是把SQL命令伪装成正常的http请求参数,传递到服务端,欺骗服务器最终执行恶意的SQL命令.
10.计算机网络的4层结构,每一层的作用以及一些协议
数据链路层是物理传输通道,可使用多种传输介质传输,可建立在任何物理传输网上。比如光纤、双绞线等;数据链路层包括了硬件接口和协议ARP
网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
传输层:其主要任务是向上一层提供可靠的端到端(End-to-End)服务,确保“报文”无差错、有序、不丢失、无重复地传输。
TCP :负责数据的可靠传输(“三次握手”-建立连接、数据传送、关闭连接)。
UDP:和TCP相比,数据传输的可靠性低,适合少量的可靠性要求不高的数据传输。
应用层:应用层确定进程间通信的性质,以满足用户的需要。
FTP(File Transfer Protocol):文件传输协议;
HTTP(Hyper Text Transfer Protocol):超文本传输协议
11.https连接过程
http与https的区别
1)http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。
2)http协议:使用的端口是80。
https协议:使用的端口是443.
3)证书申请方式不同。
http协议:免费申请。
https协议:需要到ca申请证书,一般免费证书很少,需要交费。
12.CA证书是怎么保证可靠性的
13.为什么对话密钥要用对称密钥
对称加密实质上指的就是加、解密使用的同是一串密钥,所以被称做对称加密。对称加密只有一个密钥作为私钥。
14.http的无状态
每一个访问都是无连接,服务器挨个处理访问队列里的访问,处理完一个就关闭连接;
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
web=http协议+状态机制+其他机制
15.介绍http协议
http(超文本传输协议)就是在多台网络设备之间传输 文字、图片、音视频 等超文本内容的具体规范和约定。
http响应报文/请求报文格式
- 请求报文格式
请求行、请求头部、空行 和 请求包体4 个部分组成,
请求行:方法字段、URL 字段 和HTTP 协议版本字段
请求头部:Cookie,Host:请求的主机名等等
- 响应报文
状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;
状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
2xx:表示服务器已成功接收到请求并进行处理;
3xx:表示服务器要求客户端重定向;
4xx:表示客户端的请求有非法内容;
5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
16.IP地址和MAC地址
MAC地址是物理地址,IP地址是逻辑地址。MAC地址是不可改变的,IP地址是可以更改的;
IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商;
17.tcp流量控制
对发送方发送速率的控制,我们称之为流量控制。接收方每次收到数据包,可以在发送确定报文的时候,同时告诉发送方自己的缓存区还剩余多少是空闲的,我们也把缓存区的剩余大小称之为接收窗口大小,当发送方收到接受窗口 win = 0 时,这时发送方停止发送报文,并且同时开启一个定时器,每隔一段时间就发个测试报文去询问接收方,打听是否可以继续发送数据了.
18.tcp拥塞控制
拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。
(1)TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量,即加大拥塞窗口;
(2)当拥塞窗口 cwnd 「超过」慢启动门限 ssthresh 就会进入拥塞避免算法;每当收到一个 ACK 时,cwnd 增加 1/cwnd;
(3)数据量增长以后,网络可能出现拥塞,当网络出现拥塞,也就是会发生数据包重传,当触发了重传机制,也就进入了「拥塞发生算法」
快速重传,当接收方发现丢了一个中间包的时候,发送三次前一个包的 ACK,于是发送端就会快速地重传, 其实也是修改门限值和拥塞窗口ssthresh 和 cwnd,让他们变小;
快速重传和快速恢复算法一般同时使用,快速恢复算法是认为,你还能收到 3 个重复 ACK 说明网络也不那么糟糕,所以没有必要像 RTO 超时那么强烈。