嵌入式开发需要掌握的网络编程

嵌入式开发需要掌握的网络编程

2022-07-11 15:30:25 zhaodeng 1
嵌入式开发需要掌握什么技术?什么是网络编程?用一句话概括,就是对网络协议的落地。


落地,意味着对实战的要求更高。所以,一些朋友更喜欢用类似 Netty 这种封装好的框架——快速,高效。既然这样,为什么要学网络编程呢?
跟开发细节相比,有时候我们更看重开发效率。但很多时候,必须要面对极端的网络性能考验。没人喜欢堵车,但应对大量请求时,如果网络性能处理不佳,数据、业务就会面临大塞车。

举个例子,绿盟做研发那会儿,有个信息安全产品,叫黑洞,是当时市场上最成功的 DDOS 过滤设备,为绿盟贡献了丰厚的收入和利润。

从技术上说,最大的难点在于:攻击报文洪水到达时,每秒要过滤掉几十万攻击请求,一点不夸张。当时,他们用了一种叫零拷贝的核心技术,需要对操作系统内核和网络协议底层有很深入的了解。

掌握核心技术的是两位清华博士师兄,这件事让我开拓了视野。在这之前,我从没想过通过程序代码,对网络报文的处理效率,竟然能达到如此强悍的地步。

随着5G 时代到来,用户的平均网络传输速度正在大幅提升。对流媒体平台来说,提供高质量的视频势在必行。压力在哪里,身为技术人的你,应该不难猜到。

而高性能网络编程,就意味着:不仅要解决诸如提高吞吐量和并发性等问题,还得处理各种棘手异常,比如保证千万个连接的正常运行等等。这些,可不是一个框架就能搞定的。

框架的产生,或是为了实现跨平台支持,例如 JDK;或是为了屏蔽网络编程的细节,让开发更方便,例如 libevent。直接学框架,出了问题也难以排查,更难以捋顺框架背后的设计逻辑。
我面试过一些候选人,发现即使是工作多年的技术人,对网络协议和网络编程的理解,仍然停留在一个比较浅的层次上,比如:

• 大家经常说的四层、七层,分别指的是什么?

• TCP 三次握手是什么,TIME_WAIT 是怎么发生的?CLOSE_WAIT 又是什么状态?

• Linux 下的 epoll 解决的是什么问题?如何使用 epoll 写出高性能的网络程序?

• 什么是网络事件驱动模型?Reactor 模式又是什么?


大多数人仅停留在「是这样」的阶段,对「为什么」缺乏深入了解。其实,无论在面试还是工作中,这方面知识都是非常重要的基本功。用思想驾驭工具,仍需要再一次强调。
在我看来,学高性能网络编程,首先要掌握两个核心要点:第一,在理解网络协议的基础上,充分利用操作系统内核提供的能力,感知各种网络 I/O 事件;第二,学会使用线程处理并发。

抓住这两个核心问题,就抓住了高性能网络编程的“七寸”。
分享给你一张网络编程的核心知识图谱,仔细梳理、透彻理解这些知识点,才能学以致用地解决工作中的实际问题。


图片关键词



这张图谱出自盛延敏,他跟极客时间合作过一个专栏叫《网络编程实战》。
提前看了下目录,其实挺想多说一句:这名字起得太朴素了。要我的话,就叫:高性能网络编程,因为整个专栏都是围绕「高性能」展开的。
但话又说回来,高性能就建立在那些实打实的经验基础上,所以现在这个也算简洁有力。内容同样是单刀直入展开,比如在讲解某个理论或算法时,与代码、实验相关联,分析它提出的目的、解决了哪些问题。
说白了,就是从解决实际问题的角度切入,讲解知识点,让你透彻理解协议、API 和代码。学完就能用得上,这点挺不错的,值得推荐给你。


电话咨询
产品介绍
**新消息
QQ客服