计算机网络面试题

计算机网络面试题

TCP的三次握手和四次挥手

TCP 是传输层协议,用于建立端到端的连接。

ip+端口号 == Socket,socket就是端。

三次握手

举个栗子:

image-20220325095849492

对比:

img

- seq : 序列号
- ack : 确认号
- SYN-RCVD : 同步已收到

四次挥手

举个栗子:

image-20220325100836391

对比:

img

- 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是属于应用层的一种直接提供用户访问资源的无状态协议

举个栗子:

image-20220325104521001

报文格式

image-20220325104800022

报文格式:
    请求行
    请求头部
    空行
    请求数据

首部

请求首部

image-20220325110121662

分析几个重要的参数:

  • Accept : 浏览器端可以接受的媒体类型。 */*表示浏览器可以接受任意类型。
  • Accept-Encoding:浏览器申明自己接受的编码方法,通常指定压缩方式。
  • Accept-Language:浏览器申明自己接受的语言。
  • Connection:用于指定建立连接后,连接的状态。(keep-alive:连接不关闭。close:连接关闭,需要重新建立TCP连接。)
  • Host:用于指定被请求资源的主机号和端口号。
  • Referer:告诉服务器请求时从哪个页面连接过来的。
  • User-Agent:告诉服务器,客户端使用的操作系统和浏览器的名称和版本。

响应首部

image-20220325110917010

分析几个重要的参数:

  • Content-Type:返回数据的类型

    image-20220325111344504

  • 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进行了加密。

加密

对称加密

image-20220325114021245

如果有第三方获取了算法G,那么就很容易被破解了。

非对称加密

举个栗子:

image-20220325114306484

image-20220325114713048

TLS加密过程

image-20220325115450745

证书

image-20220325115013473

SSL证书其实就是保存在源服务器的数据文件,要让SSL生效就需要向CA申请证书。

证书中还包括了特定的公钥和私钥。

服务器安装了SSL证书以后,用户就可以通过HTTPS来访问服务器了。

端口

HTTP默认端口: 80

HTTPS默认端口: 443

总结

HTTPS 加密、解密、验证及数据传输过程.png

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拥塞控制

拥塞控制是为了防止过多的数据出现在网络中导致路由器或链路出现过载。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结构化思维wz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值