网络编程实战 / 从底层到实战,深度解析网络编程
盛延敏
前大众点评云平台首席架构师
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 学好网络编程,需要掌握哪些核心问题?

    在我看来,学习高性能网络编程,只要掌握两个核心问题就够了。

  • 01 | 追古溯源:TCP/IP和Linux是如何改变世界的?

    今天我想和你讲讲TCP/IP和Linux的历史,这些内容可以帮助你理解网络编程中各种技术的来龙去脉。

  • 02 | 网络编程模型:认识客户端-服务器网络模型的基本概念

    这一讲我们重点客户端-服务器网络编程模型,一起来初步认识IP地址、端口、子网掩码和域名。

  • 03丨套接字和地址:像电话和电话号码一样理解它们

    套接字作为网络编程的基础,概念异常重要。今天我们就来了解一下套接字。

  • 04 | TCP三次握手:怎么使用套接字格式建立连接?

    上一讲里我们介绍了IPv4、IPv6以及本地套接字格式,这一讲我们来讲一讲怎么使用这些套接字格式完成连接的建立。

  • 05 | 使用套接字进行读写:开始交流吧

    连接建立的根本目的是为了数据的收发,在这一讲里,我来讲一下如何使用创建的套接字收发数据。

  • 06 | 嗨,别忘了UDP这个小兄弟

    如果说TCP是网络协议的“大哥”,那么UDP可以说是“小兄弟”。这个小兄弟和大哥比,有什么差异呢?

  • 07 | What? 还有本地套接字?

    上一篇文章中,我们讲了UDP。很多同学都知道TCP和UDP,但是对本地套接字却不甚了解。

  • 08 | 工欲善其事必先利其器:学会使用各种工具

    今天我来介绍一些常见的网络诊断工具,用好它们,可以加深我们对网络编程的理解。

  • 09丨答疑篇:学习网络编程前,需要准备哪些东西?

    这篇是基础篇的最后一讲。在这一讲中,我将会针对基础篇中大家提出的普遍问题进行总结和答疑。

  • 10 | TIME_WAIT:隐藏在细节下的魔鬼

    在四次挥手的过程中,发起连接断开的一方会有一段时间处于TIME_WAIT的状态。你知道它的作用是什么吗?

  • 11 | 优雅地关闭还是粗暴地关闭 ?

    TCP的四次挥手中,发起连接关闭的一方会有一段时间处于TIME_WAIT状态。那么究竟如何来让连接关闭呢?

  • 12 | 连接无效:使用Keep-Alive还是应用心跳来检测?

    在这一篇文章中,我将带你体验一下对连接状态的检测,并提供检测连接状态的最佳实践。

  • 13 | 小数据包应对之策:理解TCP协议中的动态数据传输

    发送窗口、接收窗口、拥塞窗口,这些东西各自解决的是什么问题,又是如何解决的?

  • 14丨UDP也可以是“已连接”?

    在我们的脑海里,已经深深印上了“UDP 等于无连接协议”的特性。那么看到这一讲的题目,你是不是觉得有点困惑?

  • 15 | 怎么老是出现“地址已经被使用”?

    当服务器端程序重启之后,总是碰到”Address in use“的报错信息,这个问题是如何产生的?

  • 16 | 如何理解TCP的“流”?

    在这一讲里,我们回到数据的收发这个主题,谈一谈如何理解TCP的数据流特性。

  • 17 | TCP并不总是“可靠”的?

    在这一讲里,我们讨论一下如何通过增强读写操作,以处理各种“不可靠”的场景。

  • 18 | 防人之心不可无:检查数据的有效性

    为了增强程序的健壮性,除了增强防御机制外,我们还需要准备什么?

  • 19丨提高篇答疑:如何理解TCP四次挥手?

    在今天的内容里,我将针对大家的问题做一次集中回答,希望能帮助你解决前面碰到的一些问题。

  • 期中大作业丨动手编写一个自己的程序吧!

    今天进入专栏的期中复习周,我希望借由作业让你上手编写代码,对我们之前学习的内容有更加深刻的理解。

  • 期中大作业丨题目以及解答剖析

    这次的大作业不是在考察网络编程的细节,而是在考如何使用系统API完成cd、pwd、ls等功能。

  • 20 | 大名⿍⿍的select:看我如何同时感知多个I/O事件

    今天我来讲一下select函数的使用,select函数提供了最基本的I/O多路复用方法,让我们开始吧!

  • 21 | poll:另一种I/O多路复用

    有没有别的I/O多路复用技术可以突破文件描述符个数限制呢?当然有。

  • 22 | 非阻塞I/O:提升性能的加速器

    今天,我们一起进入非阻塞I/O模式的世界。非阻塞I/O配合I/O多路复用,是高性能网络编程中的常见技术。

  • 23 | Linux利器:epoll的前世今生

    在select、poll、epoll几种不同的I/O复用技术中,epoll的性能是最好的。这是为什么呢?

  • 24 | C10K问题:高并发模型设计

    这一讲里,我们了解一下历史上有名的C10K问题,并借着C10K问题系统地梳理一下高性能网络编程的方法论。

  • 25 | 使用阻塞I/O和进程模型:最传统的方式

    如何为每个连接客户创建一个进程来服务呢?在这其中,又需要特别注意什么呢?

  • 26 | 使用阻塞I/O和线程模型:换一种轻量的方式

    前面一讲中,我们使用了进程模型来处理用户连接请求,这一讲里,我们就来了解一下线程模型。

  • 27 | I/O多路复用遇上线程:使用poll单线程处理所有I/O事件

    fork进程和pthread线程这两种技术的性能会随着并发数的上涨而快速下降,这个时候我们需要寻找更好的解决之道。

  • 28 | I/O多路复用进阶:子线程使用poll处理连接I/O事件

    这一讲我们就将acceptor上的连接建立事件和已建立连接的I/O事件分离,形成所谓的主-从reactor模式。

  • 29 | 渐入佳境:使用epoll和多线程模型

    今天,我们切换到epoll实现的主从反应堆模式,分析一下为什么epoll的性能会强于poll等传统的事件分发机制。

  • 30 | 真正的大杀器:异步I/O探索

    Proactor模式和reactor模式到底有什么区别和联系呢?今天我们就来揭开proactor模式的面纱。

  • 31丨性能篇答疑:epoll源码深度剖析

    在今天性能篇的答疑中,我们一起梳理一下epoll的源代码,从中一定可以有更多的发现和领悟。

  • 32 | 自己动手写高性能HTTP服务器(一):设计和思路

    在开始编写高性能HTTP服务器之前,我们先要构建一个支持TCP的高性能网络编程框架。

  • 33 | 自己动手写高性能HTTP服务器(二):I/O模型和多线程模型实现

    这一讲,我们延续第32讲的话题,继续解析高性能网络编程框架的I/O模型和多线程模型设计部分。

  • 34 | 自己动手写高性能HTTP服务器(三):TCP字节流处理和HTTP协议实现

    今天我们延续第33讲的话题,继续解析高性能网络编程框架的字节流处理部分,并增加HTTP相关的功能。

  • 35 | 答疑:编写高性能网络编程框架时,都需要注意哪些问题?

    在今天的内容里,我将针对评论区的问题做一次集中回答,希望能帮助你解决前面碰到的一些问题。

  • 结束语丨我相信这不是结束,让我们江湖再见

    感谢这几个月以来的相伴,不管你对这个专栏有什么样的评价,我都可以自豪地说,我是很用心地在做这个事情。

  • 期末测试题丨有关网络编程的知识,你掌握了多少呢?

    快来测试一下吧!

你将获得

  1. 掌握网络编程的底层原理;
  2. 10 个常见异常和应对措施;
  3. 聚焦常见的网络性能优化问题;
  4. 动手编写高性能 HTTP 服务器。

讲师介绍

盛延敏,本科、博士皆就读于中科大,2000年初就开始接触ACE、CORBA等网络编程技术,毕业后加入IBM从事WebSphere应用服务器开发和云平台Bluemix开发。后任大众点评云平台首席架构师,主持和推动了大众点评私有云平台的建设。目前在蚂蚁金服从事云计算领域的架构和开发等工作。

课程介绍

什么是网络编程?一句话来说,网络编程是对网络协议的落地。

落地,意味着网络编程对实战的要求更高,也正因为如此,很多程序员更倾向于使用类似Netty这种封装好的框架,快速,高效。

既然如此,为什么还要学习网络编程呢?

确实,比起开发细节,在某些时候,开发效率更重要一些。但如果是高性能的网络编程呢?

这就好比盖房子,当我们只需要建一个小平房时,那么对地基的深浅和材质的要求就没有那么高了,但如果是建造一栋高楼大厦,小平房的地基条件显然不能满足我们的需求。

同样的,高性能网络编程与普通的开发不一样,高性能意味着工作中的设计很容易到达临界点。这时不仅要想办法延展边界,比如提高吞吐量和并发性,还要解决临界点下各种棘手的异常问题,比如怎样保证上千万个连接的正常运行?

这个时候就不只是框架的使用问题了,我们更应该从底层原理出发,才能真正搞懂高性能问题。而这些问题,又非常依赖多年的实战,只有这样,才能总结出一套成体系的方法论和经验。

盛延敏,本科、博士皆就读于中科大,2000年初就开始接触ACE、CORBA等网络编程技术,毕业后加入IBM从事WebSphere应用服务器开发和云平台Bluemix开发。后任大众点评云平台首席架构师,主持和推动了大众点评私有云平台的建设。目前在蚂蚁金服从事云计算领域的架构和开发等工作。

他将结合自己多年的实战经验,从网络编程的底层原理开始讲起,一步步聚焦到高性能编程上,教你从原理层面解决实际工作中可能遇到的各种性能问题,并且在最后手把手教你搭建一个可用的高性能框架。

课程基础要求

专栏使用C/C++语言讲解,需要你能看懂基础的C/C++语法。

文稿代码链接

文稿中代码较多,完整版请去GitHub查看。

专栏模块

专栏分为4个模块,还特别设计了“期中周”。

基础篇

从基本的套接字开始讲起,通过形象生动的比喻让你理解诸如三次握手、套接字缓冲区这样的底层原理,构建一个全面的知识体系,为后续的学习打下基础。

提高篇

在网络编程中,异常问题与性能息息相关。尤其是在高性能的条件下,异常问题出现的概率会大幅度增加。本模块重点讲解异常信息,教你提高程序中的鲁棒性。

期中周

为了增强你的实战能力,在基础篇和提高篇的基础上设置了为期一周的动手实践项目。你可以在老师的指导下自己动手编写一个可用的互联互通的程序,加深对网络编程的理解。

性能篇

能否解决程序的性能问题,是衡量水平高低的重要标准。本模块深入聚焦工作中常见的性能问题,带你处理诸如I/O、线程与进程等现在高性能网络编程所需要的技术,从而提高编程能力。

实战篇

除了学会利用轮子之外,造轮子也是学习能力的一个重要体现。本模块将结合前面讲到的技术,教你打造一个高性能的网络程序。

课程目录

特别放送

订阅须知