计算机网络面试题
Posted 结构化思维wz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络面试题相关的知识,希望对你有一定的参考价值。
计算机网络面试题
文章目录
TCP的三次握手和四次挥手
TCP 是传输层协议,用于建立端到端的连接。
ip+端口号 == Socket,socket就是端。
三次握手
举个栗子:
对比:
- seq : 序列号
- ack : 确认号
- SYN-RCVD : 同步已收到
四次挥手
举个栗子:
对比:
- established : 已确立的
- MSL 是 TCP 报文段可以存活或者驻留在网络中的最⻓时间。
面试题
为什么要等待2MSL?
主要是因为两个理由:
- 为了保证最后一个响应能够到达服务器,因为在计算机网络中,最后一个 ACK 报文段可能会丢失,从而致使服务端一直处于 LAST-ACK 状态等待客户端响应。这时候服务器会重传一次 FIN-ACK 断开连接报文,客户端接收后再重新确认,重启定时器。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
- 还可以防止已失效的报文段。客户端在发送最后一个 ACK 之后,再经过经过 2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。
为什么建立连接是三次握手,关闭连接确是四次挥手呢?
因为可能还存在未发送完的数据
建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
HTTP是什么
我们上网需要客户端给服务端发送请求报文,服务端回复响应报文,HTTP规定了请求、响应报文的格式。HTTP是属于应用层的一种直接提供用户访问资源的无状态协议
举个栗子:
报文格式
报文格式:
请求行
请求头部
空行
请求数据
首部
请求首部
分析几个重要的参数:
- Accept : 浏览器端可以接受的媒体类型。
*/*
表示浏览器可以接受任意类型。 - Accept-Encoding:浏览器申明自己接受的编码方法,通常指定压缩方式。
- Accept-Language:浏览器申明自己接受的语言。
- Connection:用于指定建立连接后,连接的状态。(
keep-alive
:连接不关闭。close
:连接关闭,需要重新建立TCP连接。) - Host:用于指定被请求资源的主机号和端口号。
- Referer:告诉服务器请求时从哪个页面连接过来的。
- User-Agent:告诉服务器,客户端使用的操作系统和浏览器的名称和版本。
响应首部
分析几个重要的参数:
-
Content-Type:返回数据的类型
-
cache-control:max-age=3153600
表示缓存可以保存在浏览器一年的时间。
no-cache:表示可以使用缓存,但是需要每次都确认。
no-stroe: 不允许缓存,每次都要从服务器中取。
持久性和非持久性
非持久性:
- HTTP1.0使用非持久性连接
- 每个TCP连接最多允许传输一个对象
持久性:
- HTTP1.1版本中已经默认使用Connection: keep-alive。支持持久连接
- 再次发送请求不需要再次创建TCP连接
- 想结束连接,只需要发送请求头中设置为Connection:close。
HTTPS
HTTPS并不是一个单独的协议,只是在HTTP的基础上用
TLS/SSL
进行了加密。
加密
对称加密
如果有第三方获取了算法G,那么就很容易被破解了。
非对称加密
举个栗子:
TLS加密过程
证书
SSL证书其实就是保存在源服务器的数据文件,要让SSL生效就需要向CA申请证书。
证书中还包括了特定的公钥和私钥。
服务器安装了SSL证书以后,用户就可以通过HTTPS来访问服务器了。
端口
HTTP默认端口: 80
HTTPS默认端口: 443
总结
HTTPS = HTTP + SSL/TLS
GET和POST的区别
表单的提交方式:
- get 请求直接将表单数据以 name1=value1&name2=value2 的形式拼接到 URL 上(http://www.baidu.com/action?name1=value1&name2=value2),多个参数参数值需要用 & 连接起来并且用 ? 拼接到 action 后面;
- post 请求将表单数据放到请求头或者请求的消息体中。
传输数据的大小限制:
- get 请求传输的数据受到 URL 长度的限制,而 URL 长度是由浏览器决定的;
- post 请求传输数据的大小理论上来说是没有限制的。
参数的编码:
- get 请求的参数会在地址栏明文显示,使用 URL 编码的文本格式传递参数;
- post 请求使用二进制数据多重编码传递参数。
缓存:
- get 请求可以被浏览器缓存被收藏为标签;
- post 请求不会被缓存也不能被收藏为标签。
GET产生一个TCP数据包;POST产生两个TCP数据包:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
一个URL执行过程
TCP与UDP
区别
UDP
- UDP是无连接的,不可靠的,基于数据报文段的用户数据报协议,传输的数据少,速度快,头字节为8个字节
- 传输数据时无需建立连接,远程主机在接收到UDP报文后不需要确认
TCP
- TCP是面向连接的,可靠的,基于字节流的传输层协议,它传输的数据多,速度慢,头字节为20-60个字节
- TCP会在传输数据时建立连接,数据传送后释放连接,可靠性体现在,在建立连接和释放连接时有三次握手和四次挥手,在传输数据时还有确认,窗口,重传,拥塞控制等。所需资源多,需要确认,计数器,连接控制等
使用场景
TCP:文件传输发送,远程登录等
UDP:qq语音,视频等
TCP拥塞控制
拥塞控制是为了防止过多的数据出现在网络中导致路由器或链路出现过载。
以上是关于计算机网络面试题的主要内容,如果未能解决你的问题,请参考以下文章