【面试】你能说说 OSI 七层协议每一层都做了什么吗?每层常见技术有哪些?你最常用的技术是什么?怎样用的?

文章讲述了面试中关于OSI七层协议的问题,详细解释了各层功能,并比较了ApacheHttpClient和OkHttp在性能上的差异。还讨论了HTTP性能优化策略,如GZIP压缩、CDN使用和HTTP/2特性。
摘要由CSDN通过智能技术生成

这个问题我印象比较深刻,是之前面试开发时问到的。你说它难吧,其实网上都有标准答案。但是你说它不难吧,在面试上也很难说得上来,即使说上来了也只是八股文一笔带过。

当初被问到这个题的时候我就在想“该不会什么时候得罪面试官了?”,如果这题问现在的职场新人肯定会被怼,最起码会反问“知道又有什么用?你工作的时候会七层都用到吗?你们公司最多就到传输层,往下的有你什么事了吗?…”

好吧,虽然没什么用但该答的还是要答,我就按照自己的思路重新回答一下吧,记得多少答多少。OSI 七层协议从下到上依次是:

OSI 层级回答内容
物理层做什么:定义了设备的物理特性,比如电缆、接口类型等;
常见技术:各种传输介质(双绞线、光纤等),各种接口和接头(RJ45、USB等);
数据链路层做什么:在网络中的主机间数据帧传送,处理物理地址、MAC地址等;
常见技术:以太网、FDDI、PPP等数据链路层协议,VLAN、MAC地址等;
网络层做什么:负责网络互连和IP寻址;
常见技术:IP、ARP、RARP、ICMP、IGMP等网络层协议。路由选择协议如RIP、OSPF、BGP等;
传输层做什么:提供端到端的可靠传输,处理流量控制、重发等;
常见技术:TCP、UDP等传输层协议以及各种端口号;
会话层做什么: 建立、管理和终结会话;
常见技术: PAP、SOCKS等会话层协议;
表示层做什么:对数据进行加密和压缩等处理;
常见技术:ASCII、TIFF、GIF、PCM等数据表示与编码格式;
应用层做什么:直接为用户的应用进程提供网络服务;
常见技术:HTTP、FTP、SMTP、POP3、DNS等应用层协议;

用得最多的肯定就是 HTTP 技术了,项目里面经常会用到 HttpClient 和 OKHttp 客户端,他们之间各自有自己的优缺点(仅代表个人使用后的意见):

客户端优点缺点
Apache HttpClient- 使用广泛、稳定且成熟
- API 完善,功能强大
- 支持多线程,连接池管理优秀
- 支持 HTTPS、认证、代理等功能
- 配置相对复杂
- 底层实现老旧,效率不如 OkHttp
- 不支持 HTTP/2
OkHttp- 性能高,传输速度快
- 支持 HTTP/2 ,采用了多路复用
- 内部实现利用Android最新特性
- 使用不及 Apache HttpClient 广泛
- 连接池管理不如Apache 完善

总体来说如果对于性能方面有所追求可以使用 OkHttp 试试,效果不错。但是如果想快速开发 Apache HttpClient 是更好的选择。扯远了,除了客户端之外,Springcloud 服务通讯也是用 HTTP 协议的(这个应该大家都懂)。它简单、灵活、易扩展,文本显示也便于调试,我想这应该是应用层使用率最高的通讯协议。

关于对 HTTP 性能的优化其实有很多种包括缓存、持久连接、分片传输、压缩、异步传输等,而 HTTP/2 和 HTTP/3 引入了多路复用、头部压缩、服务器推送等功能可以进一步提升 HTTP 性能。我这边接触得最多的是以下 4 种,都是基于服务端的优化方式:

  1. 压缩传输数据:对文本类数据启用 GZIP 压缩,减少包体积。对多媒体文件如图片、视频使用先压缩后上传的策略,而不是整个上传;
  2. 使用 CDN :使用 CDN 缓存和分发静态资源,就近响应用户请求;
  3. 采用 HTTP/2 :HTTP/2 引入多路复用、头部压缩、服务器推送等特性,可以有效优化 HTTP 性能;
  4. 优化 TCP 参数:一般通过调整 Linux 系统参数来实现,譬如:增加初始化拥塞窗口大小 ( Initial Congestion Window ) 。通过 setsockopt() 来设置 SOCKET_RCVBUF 和 SOCKET_SNDBUF 参数。通过修改 /proc/sys/net/ipv4/tcp_delayed_ack 来设置延迟回复来减少 ACK 数量等等;

至于前端嘛,公司有专门的开发人员管理,但如果给我管的话我可能会:

  1. 采用异步技术:使用 AJAX 、HTTP 流(Streaming)等异步技术,改善交互体验;
  2. 利用缓存机制:适当设置 Cache-Control 、Last-Modified 、Etag 等缓存头部信息,充分利用缓存避免重复请求;
  3. 查询字符串优化:避免过长查询字符串,使用 POST 提交数据;

估计就这些吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Kida 的技术小屋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值