这个问题我印象比较深刻,是之前面试开发时问到的。你说它难吧,其实网上都有标准答案。但是你说它不难吧,在面试上也很难说得上来,即使说上来了也只是八股文一笔带过。
当初被问到这个题的时候我就在想“该不会什么时候得罪面试官了?”,如果这题问现在的职场新人肯定会被怼,最起码会反问“知道又有什么用?你工作的时候会七层都用到吗?你们公司最多就到传输层,往下的有你什么事了吗?...”
好吧,虽然没什么用但该答的还是要答,我就按照自己的思路重新回答一下吧,记得多少答多少。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 种,都是基于服务端的优化方式:
至于前端嘛,公司有专门的开发人员管理,但如果给我管的话我可能会:
估计就这些吧。