怎样学好网络编程?

72a63cd59ad924443e775b3acdfc4cea.gif9dea4f42ed5d3c588e6acddf22e61b61.png

差一点

我们就擦肩而过了

有趣

有用

有态度

6b1eab2e80060bc3d5a13d940d5ff4cd.jpeg

前言

在嵌入式行业网络编程使用相对较少,主流应用集中在NB-IOT、Lora、Mqtt这一块,原理上一般是通过加入硬件模块或者是使用第三方SDK来实现。因此,大部分嵌入式从业人员网络编程能力较弱,网络编程水平多数停留在大学阶段。考虑到未来嵌入式的发展趋势,必然是网络化+智能化。因此深度掌握网络编程和人工智能,会有更好的发展前途。当然,走研究linux内核方向也大有可为,只是周期较长,非十年苦工不能大成。

目前笔者研究了一段时间libevent和muduo库早期版本的源码,对如何开发高并发、高性能服务器有了较为深入的了解。在研究过程里面,遇上了很多坑,也有了一些优化性能的心得。在我掌握了这部分知识内容之后,再回头看,发现我们的学习网络编程的路线,其实一直是有问题的。

几个网络编程问题

这里分享几个网络相关问题,前两个问题考察tcp协议理论基础,后两个考察对网络库的了解,大家可以自测一下:

  • tcp四层模型和OSI七层模型的联系和区别是什么?

  • tcp三次握手和四次挥手是什么?time_wait和close_wait状态是意味着什么?

  • select、poll、epoll的原理和区别是什么?epoll反应堆模式是什么?

  • 如何实现网络事件驱动模型?对统一事件源,缓存管理有没有了解?

理论与实战

我相信应该大部分人都对前两个问题较为熟悉,但是对后两个问题就不太熟悉了。

这主要是因为目前我们在学校所学习的网络编程基本上是偏理论的,笔者在大学学习tcp协议相关知识的时候,根本不能理解流量控制、滑动窗口、拥塞控制等等概念。但为了通过考试与面试,硬是把它死记硬背了下来。在实际开发过程中,大量使用网络库之后。逐渐意识到,理论与实战是相符相成的。理论无聊乏味,与实际开发断层严重,但却是大厦之基。实战生动有趣,成就感满满,却被框架蒙蔽双眼,难以洞察本质。

既然理论庞大难学,框架易用难精,我们该如何把握学习网络编程的路线?

答案如下:

  • 学习tcp底层协议,从设计一款简单的tcp协议栈开始着手研究,明白四层模型到底长什么样,每个状态变化是在什么情景下发生,tcp是如何来保障通信的可靠性

  • 学习操作系统提供的网络接口,了解socket编程接口的发展过程,知道操作系统该如何来捕获各种网络IO事件

  • 学习一款优秀的网络库,明白高并发、高性能的网络应用中,如何合理地使用线程。对多线程编程的各种大坑有一个基本的认知,深度思考如何做到"线程安全"

fa9bf9d9e3a0f0a28acf99fdbd1e6308.gif

END

b7cb4bb3c8c8f636ad434270ea1824ec.gif

分享一款Linux平台下的tcp协议栈!超级透彻!

level-ip之虚拟网卡接口封装

手把手教你,拿下观察者模式|c语言!

操作系统我说了算!扒一扒调度器

c7d69a16095ca8c237ff54ddc1f6e74e.gif

陪伴是最长情的告白

为你推送最实用的编程知识

识别二维码

关注我们

fe8fa52937d03f9491576bccc9007083.png

629e8eed316594473bc6b77e4aae0a11.png

点在看~

29ecf2b69650f94034ede31d0eb8c063.gif

捧个人场就行~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值