浅谈计算机网络(面试篇)

计算机网络的知识点我认为可以完全串成一个体系,以面试连环炮的形式进行学习记忆更加事半功倍。

你了解http的请求过程吗?(在浏览器输入url到显示主页过程)

  • DNS解析(网站到ip地址)
    • DNS缓存查找顺序:浏览器,若浏览器缓存未命中,会检查操作系统中对应的已经解析的结果,windows在C盘的host中,若没有就分级查询 :本地DNS服务器(它可能就在你城市的某个角落,一般到这一级就能解析出大部分的ip地址了),根域名服务器,顶级域名服务器,主域名服务器
  • TCP连接(三次握手)
  • 发送http请求
  • 服务器处理请求并返回http报文
  • 浏览器解析渲染页面
  • 断开连接(四次挥手)

那既然提到了三次握手你简单介绍一下吧。

  • 三次握手是由客户端发起的,当客户端想和服务端连接的时候客户端会向服务端发送一个SYN=1, client_seq=x的报文
  • 服务端收到后知道客户端想与我建立连接,会回复给客户端一个ACK报文,报文中SYN=1, ACK=1, server_seq=y, server_ack=x+1
  • 这时已经完成了两次握手,这时候对于客户端来说它知道自己可以成功接收消息,也知道自己可以发送消息,但是对于服务端来说,它只知道自己可以接受消息,并不知道自己是否可以正确发送消息,此时还需要第三次握手,即客户端回传给服务端一个ACK报文报文中ACK=1, client_ack=y+1, client_seq=x+1
    三次握手.png

那四次挥手呢?

  • 四次挥手是由客户端发起的,当客户端想和服务端断开连接的时候客户端会向服务端发送一个FIN=1, seq=u报文
  • 服务端收到报文后知道客户端想和我断开连接,然后立马回复给一个ACK报文,报文中ACK=1, seq=v, ack=u+1,告知客户端它收到了报文
  • 过一会等服务端发送完数据之后,会给客户端发送一个FIN报文,报文中FIN=1,ACK=1,seq=w,ack=u+1
  • 客户端收到报文后,知道服务端消息也都完全发送完毕,想要断开连接,会回复给服务端一个ACK报文,报文中ACK=1,seq=u+1,acl=w+1

那四次挥手完毕后是立马结束吗?

  • 不是
  • 最后要等两个时间周期,2MSL时间去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)。
  • 客户端不知道服务端收没收到ack报文,所以要等2MSL是为了等待在2MSL这段时间中可能出现的服务端FIN超时重传,如果服务端真的需要超时重传,那么一定会在这段时间里进行,反之,若过了这段时间还没有重传,则可以确认ACK被服务端收到了。
    四次挥手.png

那既然是基于TCP的,TCP的安全可靠是怎么保证的?

  • 校验和:接收方和发送方进行数据的校验和比对,如果发送方和接收方的校验和不一致那传输有误
  • 确认应答(ack)与序列号:TCP将每个字节的数据都进行了编号。保证数据的按序到达,提高效率。可实现多次发送,一次确认。去除重复数据。接收方对于按序到达的数据会进行确认(ack),发送方如果收到了已发送的数据的确认报文,则继续传输下一部分数据
  • 超时重传:当报文发出后在一定的时间内未收到接收方的确认(ack),发送方就会进行重传
  • 连接管理:三次握手,四次挥手
  • 流量控制:TCP支持根据接收端的处理能力,来决定发送端的发送速度
  • 拥塞控制:解决了两台主机之间因传送速率(网络拥堵)而可能引起的丢包问题。为此TCP引入慢启动机制,先发出少量数据,就像探路一样,先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。

那我们现在视频面试的软件是基于什么协议?

  • UDP
  • UDP不需要建立连接,远程收到UDP报文后不需要给出任何确认,开销小,速度快
  • 适用于直播,视频,语音

UDP与刚才聊得TCP有什么区别呢?

  • TCP是面向连接的协议,提供可靠传输,在收发数据之前需要通过三次握手建立连接,并且通过校验、序号等机制保证传输数据的正确性;UDP是无连接的协议,提供尽最大努力交付,适合实时应用
  • TCP提供流量控制和拥塞控制,而UDP没有
  • TCP对系统资源要求较高,速度比UDP慢
  • TCP数据报没有边界,可能出现粘包问题,而UDP是一个独立的数据报,不会出现粘包现象
  • TCP提供点到点的通信,而UDP支持一对一、一对多、多对多的通信

HTTP1.0和HTTP1.1有什么区别?

  • 连接:
  • 1.0 短连接,每次请求建立一个连接,HTTP基于TCP/IP协议的,每次建立断开连接都要经历三次握手四次挥手,开销大。
  • 1.1长链接,流水线方式:客户收到响应报文之前就可以发送下一次的请求报文,非流水线方式:收到响应后才能发送下一个请求
  • 错误状态响应码:
  • 1.1新增24个错误状态响应码,比如410表示服务器上某个资源被永久删除
  • 缓存处理:
  • 1.1引入了更多的缓存控制策略比如IF-Match,If-no-match等可供选择的缓存头来控制缓存策略
  • 带宽优化和网络连接的使用:
  • 1.0中存在浪费带宽的现象,比如客户端只想要某个对象的一部分,而服务器却把整个对象送过来了,而且不支持断点续传的功能。
  • 1.1在请求头引入了range头域,允许只请求某个部分。

###HTTP中get和post有什么区别?

  • get用于请求,post用于对表单的提交,相当于把信息交给服务器等待服务器作出响应
  • get不安全(因为参数放在url中),post安全(请求体,对于用户不可见)
  • get的url有长度限制,post放在请求体中没长度限制
  • get请求会被浏览器主动缓存,post不会
  • get会发一个TCP数据包,http header和data一起发送,服务器响应200。post发送两个TCP数据包,先发送header服务器响应100,在发送data,服务器响应200.

那刚刚聊完了http了,https请求过程或者说加解密流程又是啥呢?

  • 浏览器发送https请求后,会使用443端口进行连接
  • https需要使用一套CA数字证书,证书内有一个公钥和一个私钥,私钥服务器自己保存,服务器收到请求后,将包含公钥的证书返回给客户端
  • 客户端收到证书,验证合法性,若不通过显示https警告,通过则继续
  • 客户端生成一个用于对称加密的随机key并用证书里的公钥加密发送给服务端
  • 服务端收到后使用私钥进行解密
  • 服务端使用客户端发送过来的随机key对要传输的http数据进行对称加密,将密文返回客户端
  • 客户端使用随机key对称解密密文,得到http明文
  • 后续https请求使用之前交换好的随机key进行对称加解密

cookie和session区别?

  • cookie数据存放在客户的浏览器上,session数据放在服务器上
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗;session安全
  • session会在一定时间内保存在服务器上,当访问量增加时,会比较占用服务器的性能(session存到redis)。考虑到减轻服务器性能方面,应当使用cookie
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie;

token和session区别?

  • 服务器不需要记录任何东西,每次都是一个无状态的请求,浏览器访问Web服务器后认证成功后生成Token并返回给客户端,客户端浏览器后续的请求都会把这个Token带到服务器端去解密验证,以此判定请求是否合法
  • Session是存放在服务器端的
  • Token是放在客户端存储
    -token传递的方式也不限于cookie传递,session要依赖于cookie传输Jsessionid (如果浏览器禁用了cookie/不支持cookie,可以通过URL重写的方式发送到服务)
  • token 和 cookie 本质上没啥区别,只不过 token 只是一个字符串,访问的时候可以放在 url 的参数,请求头里等,不像 cookie 那么重量级

HTTP状态码有了解吗?

  • 1xx 提示信息,代表当前是协议被处理的阶段,还需要后续操作
  • 2xx 请求成功,请求报文已经收到并且被成功处理
    • 200 ok 表明请求成功
  • 3xx 重定向,资源位置发生了变动,需要客户端重新发送请求
    • 301 Moved Permanently 永久重定向
    • 302 Moved Temporarily 临时重定向
  • 4xx 客户端错误,客户端发送的报文有误,服务器端无法处理
    • 400 Bad Request 客户端请求有误
    • 403 Forbidden 服务器禁止访问资源
    • 404 Not Found 请求的资源不存在
  • 5xx 服务器错误,服务器处理请求的时候内部出了错误
    • 500 Interval Server Error 服务器端出现了错误
    • 502 Bad Gateway 网关返回的错误码

参考

https://www.nowcoder.com/discuss/751824?source_id=profile_create_nctrack&channel=-1
https://github.com/Snailclimb/JavaGuide/blob/master/docs/cs-basics/network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值