什么是网络编程?用一句话概括,就是对网络协议的落地

落地,意味着对实战的要求更高。所以,一些朋友更喜欢用类似 Netty 这种封装好的框架——快速,高效。既然这样,为什么要学网络编程呢?

跟开发细节相比,有时候我们更看重开发效率。但很多时候,必须要面对极端的网络性能考验。没人喜欢堵车,但应对大量请求时,如果网络性能处理不佳,数据、业务就会面临大塞车

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

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

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

前段时间,跟清华大学计算机系的青年长江学者崔教授吃了个饭,聊到他主持的流媒体实验室。我们说,流媒体优化对各大视频网站非常重要,不仅需要高效的视频无损压缩算法,还需要极高的网络处理效率。

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

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

框架的产生,或是为了实现跨平台支持,例如 JDK;或是为了屏蔽网络编程的细节,让开发更方便,例如 libevent。直接学框架,出了问题也难以排查,更难以捋顺框架背后的设计逻辑。

我面试过一些候选人,发现即使是工作多年的技术人,对网络协议和网络编程的理解,仍然停留在一个比较浅的层次上,比如:

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

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

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

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

大多数人仅停留在「是这样」的阶段,对「为什么」缺乏深入了解。其实,无论在面试还是工作中,这方面知识都是非常重要的基本功。用思想驾驭工具,仍需要再一次强调。

在我看来,学高性能网络编程,首先要掌握两个核心要点:第一,在理解网络协议的基础上,充分利用操作系统内核提供的能力,感知各种网络 I/O 事件;第二,学会使用线程处理并发。

抓住这两个核心问题,就抓住了高性能网络编程的“七寸”

分享给你一张网络编程的核心知识图谱,仔细梳理、透彻理解这些知识点,才能学以致用地解决工作中的实际问题。

这张图谱出自盛延敏,最近他跟极客时间合作了专栏《网络编程实战》

提前看了下目录,其实挺想多说一句:这名字起得太朴素了。要我的话,就叫:高性能网络编程,因为整个专栏都是围绕「高性能」展开的。

但话又说回来,高性能就建立在那些实打实的经验基础上,所以现在这个也算简洁有力。内容同样是单刀直入展开,比如在讲解某个理论或算法时,与代码、实验相关联,分析它提出的目的、解决了哪些问题。

说白了,就是从解决实际问题的角度切入,讲解知识点,让你透彻理解协议、API 和代码。学完就能用得上,这点挺不错的,值得推荐给你。

关于盛延敏

盛延敏,前大众点评云平台首席架构师,现就职于某大型金融服务公司(很好猜但人家不让说),专注云计算的架构和开发工作。

博士毕业于中科大,毕业后加入 IBM,从事 WebSphere 应用服务器、PaaS 平台 Bluemix 等系统的开发工作。后任职大众点评,推动了以Docker为核心的私有云建设和落地。

2000 年起,他开始用网络编程框架 ACE、CORBA 等进行电信网管系统的开发,后来接触了 ICE,写分布式控制系统。再之后转向 Java,使用 JDK 进行 Web Service 和应用服务器的网络开发和研究,使用 Netty 进行 Java 高性能网络编程的开发。

他是如何讲解网络编程的?

网络编程是个重实战的模块。在专栏中,他从底层原理讲起,逐步聚焦到高性能编程上,讲解了常见异常和性能问题,并手把手带你编写一个高性能 HTTP 服务器。

专栏主要聚焦 Linux 系统下的网络编程,相比于 Windows,Linux 可以更好、更完善地实现互联网的所有底层通道。加上基于 Linux 的移动开发平台 Android 迅速崛起,Linux 的重要性我也不多说了。

专栏主要分三大层级,逐步递进:

第一,理解 TCP/IP 网络模型和协议。

在基础篇中,梳理了 TCP/IP 模型和网络函数接口之间的联系,通过实例展开对套接字、套接字缓冲区、拥塞控制、数据包和数据流、本地套接字(UNIX 域套接字)等的讨论,交付了一个全面细致的知识体系。

第二,结合对协议的理解,增强对各种异常情况的处理能力。

比如,对 TCP 数据流的处理、半关闭的连接、TCP 连接有效性的侦测、处理各种异常情况等,这些问题决定了程序的健壮性。这一部分的内容,在提升篇有详细展开。

第三,写出可支持大规模高并发的网络处理程序。

在性能篇中,深入研究了 C10K 问题,引入进程、线程、多路复用、非阻塞、异步、事件驱动等现代高性能网络编程所需要的技术,并在实战篇中,结合实例进行上手操作,让你可以独立写出高性能的网络程序。

我看盛延敏用荀子那句“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。”来诠释学习网络编程的最佳方法,太文艺了,要我说的话:学就完了。

学透了,就要去用,你可以对专栏里的代码进行修改和调试,进一步加深理解。把这些内容吃下去,消化掉,从底层到实战,透彻理解高性能网络编程。

5G 时代快到了,很多人说这是一场革命。是不是业务创新的革命,我说不好。但如果一个业务平台的网络优化技术没跟上,面对每个客户端平均数倍的网速激增,你猜先会革掉谁的命。

从我这里订阅,有什么福利?

1.  早鸟优惠 ¥68,原价 ¥99。

2. 结算时,输入优惠口令「justbuyit」再减 5 元,到手仅 63 元,口令【48 小时】后失效。

3. 订阅专栏后,可领取作者整理的高清版「网络编程核心知识」图谱,获取方式:公众号后台回复「编程」。

△扫码立即试读

口令【48 小时后】失效,

点「阅读原文」以最低价 ¥63订阅。

5G时代,技术人员为何要懂网络编程?相关推荐

  1. 四不帮你弄懂网络编程之最后一步

    目录 1 Http原理 1.1 为啥会有应用层 1.2 什么是url 1.3 urlencode和urldecode 1.4 Http协议格式 1.5 Http的方法 1.6 Http的状态码 ​ 最 ...

  2. 5.17大会重磅推送 百卓网络发布“5G时代的网络安全构建”策略

    2019年5月16日-17日,2019年世界电信和信息社会日大会在京举办,本届电信大会以"缩小标准化工作差距"为主题,同时围绕社会广泛关注的5G网络的规划.建设和运营等问题,展开讨 ...

  3. 5G时代要来了?5G到底什么样?

    4G时代在国内的发展已经是大面积的普及了,以前不敢想的事情现在也都实现了.当人们都还沉浸在4G的快乐当中时,我国早就开始着手5G的事情了.那么5G网络到底什么样?5G时代真的要来了吗?一起来看看吧 此 ...

  4. 华为首席开源联络官执笔,带你了解5G时代的边缘计算

    5G将成为未来社会发展的重大需求,成为构建未来智慧社会的核心基础.对5G网络的应用和互联网的应用的一个共同特点是,现在都已进入消费领域与实体经济深度融合的过程.4G也好,互联网也好,都在消费领域发挥了 ...

  5. 转载:5G时代:射频器件大有可为,滤波器国产替代开启大幕

    转载一篇文章:http://www.sohu.com/a/199890605_247621 转载声明:本文旨在为射频技术圈提供行业资讯阅读.如有不正确或侵权问题,请第一时间联系我们处理! 尊重知识.尊 ...

  6. 小小知识点(二十七)20大5G关键技术

    5G网络技术主要分为三类:核心网.回传和前传网络.无线接入网. 核心网 核心网关键技术主要包括:网络功能虚拟化(NFV).软件定义网络(SDN).网络切片和多接入边缘计算(MEC). 1 网络功能虚拟 ...

  7. 5g存储服务器是什么项目,5G时代对服务器有什么要求?

    5G是什么? 5G,其中字母G代表generation(代.际).即第五代移动电话行动通信标准,也称第五代移动通信技术. 5G的应用范围很广,大致可以包括以下几个方面: 1.5G综合产业链分析 2.5 ...

  8. 云南省计算机专业技术,云南省专业技术人员计算机应用能力考试安排通

    根据<云南省全国专业技术人员计算机应用能力考试考务规程>的计划(云人考[2009]17号)现就2013年第三季度专业技术人员计算机应用能力考试考务工作有关事项通知如下: 一.考试内容 全国 ...

  9. java网络编程_Java网络编程进阶:通过JSSE创建安全的数据通信

    小编说:本文作者孙卫琴,知名IT作家和Java专家.本文将通过一个范例向大家介绍JSSE是如何实现安全的网络通信的. 在网络上,信息在由源主机到目标主机的传输过程中会经过其他计算机.一般情况下,中间的 ...

最新文章

  1. 启动Genymotion时报错Failed to initialize backend EGL display
  2. 沫沫金【实践可用】--web工程ORM数据库链接(JDBC)链接集群库||普通库,两种标准...
  3. 学号20145332 《信息安全系统设计基础》实验四 驱动程序设计
  4. Doing Homework HDU - 1074
  5. java 定义方法_java如何定义方法
  6. 挖掘经典:几乎被人遗忘的HTML七种用法
  7. 标准的Java编码规范手册
  8. ESXi6.7修改静态ip地址
  9. 人称代词的各种形式与用法
  10. Spring实战第五章
  11. linux解压时的tar -zxvf是什么意思?
  12. 腾讯区块链强势出击,公链的机会在哪里?
  13. 机器学习(五)logistic回归
  14. cf1064E. Dwarves, Hats and Extrasensory Abilities(二分 交互)
  15. 【Win】全角半角切换 | 解决英文字符变宽
  16. 信息工程计算机应用技术专业介绍,信息工程系举行2019级新生计算机应用技术专业介绍会...
  17. 334. 递增的三元子序列
  18. 《工程电磁场》学习笔记4-时变电磁场
  19. MANACHER最长回文算法
  20. matlab为什么生成obj文件,为文件输入和输出创建新的 System object

热门文章

  1. python parse函数_Python3的urllib.parse常用函数小结
  2. 高斯消元配合概率dp-图上随机游走模型
  3. 计算机网络——ARQ协议
  4. 汉诺塔算法 java_汉诺塔算法java实现详解
  5. DateTime.Now 的24小时和12小时制
  6. Node.js:浏览器环境下使用qrcode生成二维码
  7. C4996 ‘strcat‘: This function or variable may be unsafe. Consider using strcat_s instead. To disable
  8. 80道经典常见测试面试题
  9. 【KaJiYa改进】Shader头发效果
  10. 佳能iC MF645CX彩色激光多功能打印机报E302-0001故障码检修