面试基础-计算机网络篇


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证书是怎么保证可靠性的

1.JPG



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 超时那么强烈。

posted @ 2021-04-12 21:40  Super_orange  阅读(73)  评论(0编辑  收藏  举报