网络编程实战
盛延敏
前大众点评云平台首席架构师
立即订阅
6034 人已学习
课程目录
已完结 39 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 学好网络编程,需要掌握哪些核心问题?
免费
第一模块:基础篇 (9讲)
01 | 追古溯源:TCP/IP和Linux是如何改变世界的?
02 | 网络编程模型:认识客户端-服务器网络模型的基本概念
03丨套接字和地址:像电话和电话号码一样理解它们
04 | TCP三次握手:怎么使用套接字格式建立连接?
05 | 使用套接字进行读写:开始交流吧
06 | 嗨,别忘了UDP这个小兄弟
07 | What? 还有本地套接字?
08 | 工欲善其事必先利其器:学会使用各种工具
09丨答疑篇:学习网络编程前,需要准备哪些东西?
第二模块:提高篇 (10讲)
10 | TIME_WAIT:隐藏在细节下的魔鬼
11 | 优雅地关闭还是粗暴地关闭 ?
12 | 连接无效:使用Keep-Alive还是应用心跳来检测?
13 | 小数据包应对之策:理解TCP协议中的动态数据传输
14丨UDP也可以是“已连接”?
15 | 怎么老是出现“地址已经被使用”?
16 | 如何理解TCP的“流”?
17 | TCP并不总是“可靠”的?
18 | 防人之心不可无:检查数据的有效性
19丨提高篇答疑:如何理解TCP四次挥手?
期中复习周 (2讲)
期中大作业丨动手编写一个自己的程序吧!
免费
期中大作业丨题目以及解答剖析
免费
第三模块:性能篇 (12讲)
20 | 大名⿍⿍的select:看我如何同时感知多个I/O事件
21 | poll:另一种I/O多路复用
22 | 非阻塞I/O:提升性能的加速器
23 | Linux利器:epoll的前世今生
24 | C10K问题:高并发模型设计
25 | 使用阻塞I/O和进程模型:最传统的方式
26 | 使用阻塞I/O和线程模型:换一种轻量的方式
27 | I/O多路复用遇上线程:使用poll单线程处理所有I/O事件
28 | I/O多路复用进阶:子线程使用poll处理连接I/O事件
29 | 渐入佳境:使用epoll和多线程模型
30 | 真正的大杀器:异步I/O探索
31丨性能篇答疑:epoll源码深度剖析
第四模块:实战篇 (4讲)
32 | 自己动手写高性能HTTP服务器(一):设计和思路
33 | 自己动手写高性能HTTP服务器(二):I/O模型和多线程模型实现
34 | 自己动手写高性能HTTP服务器(三):TCP字节流处理和HTTP协议实现
35 | 答疑:编写高性能网络编程框架时,都需要注意哪些问题?
结束语 (1讲)
结束语丨我相信这不是结束,让我们江湖再见
网络编程实战
登录|注册

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

盛延敏 2019-08-02
你好,我是盛延敏。今天是网络编程课程的第一课,我想你一定满怀热情,期望快速进入到技术细节里,了解那些你不熟知的编程技能。而今天我却想和你讲讲历史,虽然这些事情看着不是“干货”,但它可以帮助你理解网络编程中各种技术的来龙去脉。
你我都是程序员,说句实在话,我们正处于一个属于我们的时代里,我们也正在第一线享受着这个时代的红利。在我看来,人类历史上还从来没有一项技术可以像互联网一样深刻地影响人们生活的方方面面。
而具体到互联网技术里,有两件事最为重要,一个是 TCP/IP 协议,它是万物互联的事实标准;另一个是 Linux 操作系统,它是推动互联网技术走向繁荣的基石。
今天,我就带你穿越时间的走廊,看一看 TCP/IP 事实标准和 Linux 操作系统是如何一步一步发展到今天的。

TCP 发展历史

一般来说,我们认为互联网起源于阿帕网(ARPANET)。
最早的阿帕网还是非常简陋的,网络控制协议(Network Control Protocol,缩写 NCP)是阿帕网中连接不同计算机的通信协议。
在构建阿帕网(ARPANET)之后,其他数据传输技术的研究又被摆上案头。NCP 诞生两年后,NCP 的开发者温特·瑟夫(Vinton Cerf)和罗伯特·卡恩(Robert E. Kahn)一起开发了一个阿帕网的下一代协议,并在 1974 年发表了以分组、序列化、流量控制、超时和容错等为核心的一种新型的网络互联协议,一举奠定了 TCP/IP 协议的基础。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《网络编程实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(46)

  • 业余爱好者
    网络协议,epoll,系统调用...脑子里对这些基础知识一直一知半解,不成体系,希望通过追一个贴近实战的网络专栏建立知识之间的关联。flag~

    作者回复: 竭力帮你达成所愿

    2019-08-02
    9
  • 陈俊豪200
    讲的很好啊,很多书上提及的混乱的历史都被梳理了一遍,很有兴趣,谢谢老师!

    作者回复: 这就是我想要的目标

    2019-08-02
    9
  • Skrpy
    我认为没必要把世人熟知的 Linux 改成 GNU/Linux,我觉得如果一个操作系统名字这么写,那着实不好看……(我不是说 TCP/IP )。C 语言的编译器就是 GNU 家的,它还有许多为人称道的自由软件,GNU 会名垂千古,没必要把自己贴到同样名垂千古的 Linux 脸上

    作者回复: 各有各的想法吧

    2019-08-02
    6
  • Leon📷
    之前学习linux网络编程的时候被人给忽悠了,说mac系统不需要装linux,完全兼容,然后学习过程中遇到了一堆不明觉厉的问题,最坑的是macos没有epoll,然后我和一个同学一脸懵逼的把epoll改成了poll才把程序编过去,学习linux编程最好还是装个linux虚拟机,哈哈哈,当前往事不堪回首

    作者回复: 用vagarant+virtualbox,完美搞定Linux虚拟机环境

    2019-08-02
    2
    4
  • Zopen
    问个问题:

    摄像头推送视频流到流媒体服务器(基于TCP传输),理论传输速度是3M/S,实际测试发现是2M/S,请分析下可能出现的原因?

    作者回复: 网卡,交换机,应用程序,都可能是瓶颈

    2019-08-02
    3
  • 高超
    支持将 linux 叫做 GNU/Linux,这样也算是对 GNU 致敬了。

    作者回复: 你是挺GUN的

    2019-08-02
    3
  • helloworld
    老师文章中那两张UNIX发展历史图非常好,让人一下子明白了UNIX、Linux和我所用的Mac系统的关系。UNIX操作系统最早诞生于贝尔实验室,这是所欲*NIX系统的鼻祖。在这个基础上出现了各种各样的发行版,包括开源,闭源的和商业的。名宿Linux属于开源的,Mac属于闭源的(并且属于BSD分支中的一个演变过来的),而SUN(已被Oracle收购)的Solaris等均属于商业性质的
    2019-08-13
    2
  • java小白
    能把这么复杂的问题讲清楚,真的是一种能力,真心的叫你一声“老师”

    作者回复: 谢谢,这让我很有成就感

    2019-08-06
    2
  • QQ怪
    想深入网络底层中,这样才知根知底,再去学其他的才会举一反三
    2019-08-09
    1
  • Mr. Ren
    连续听了两节课,第一节中所说的学习网络过程中的那种心里很符合我现在的情况,到底是学基础还是学框架有点迷茫,第二课中说了发展历史,对这些年了解的历史更加细一些,图文加语音,足见老师对课程的用心,站在巨人的肩上,可以看的得更远,期待老师下一课的课程🤝

    作者回复: 我在用心写,你在用心听,一定会有收获

    2019-08-04
    1
  • 树了
    老师 OSI模型更多的是运用到硬件设备分层,TCPIP协议更多作为互联网协议么?

    作者回复: OSI是一个参考模型,实际上我们用的都是TCPIP协议,TCPIP里也有和硬件设备打交道的分层

    2019-08-04
    1
  • 奔跑的八戒
    追古溯源,了解历史,理清技术发展的脉络,是为了更好的学习。

    作者回复: 接下来就要进入正题了

    2019-08-02
    1
  • 葛学强
    打卡
    2019-08-02
    1
  • 文子休
    期待后面的更新
    2019-08-02
    1
  • 雷霹雳的爸爸
    我承认我有那么点无聊...我听音频里面叫GNU为/nju:/的样子,这个,我忽然意识到原来我总是一个字母一个字母的读这玩意儿可能是不对的(但是也有可能像SQL一样,嗯,都是被认可的),那么nju是否是一个正确的读音呢?这文章既然提到Richard Stallman为牛人,那还是得听听这位大爷的读法,https://www.gnu.org/gnu/pronunciation.en.html,好吧,感觉自awk之后,又多了一个得瑟的利器...

    作者回复: 好吧,我承认,其实在此之前我也一直像SQL一样的逐个字符读的 (🤦‍♂️)。

    2019-11-25
  • godtrue
    有些看隋唐演义的感觉,过瘾!
    有生于无,由简入繁,认知还是需要一个循序渐进的过程的,这样就不会怀疑自己是否有大脑了,会觉得一切都是自然而然的就发生了。

    作者回复: 了解历史,才能知道我们从哪里来,到哪里去。

    2019-11-18
  • 子龙
    网络编程、socket、TCP/IP 协议的实现,操作系统实现
    从实际问题出现,解决问题,成为事实上的标准
    2019-09-18
  • 小伟
    了解操作系统的由来给我最大的启发是,没有什么是理所当然和凭空出现的,有需求才有产品。理解了需求,也许可以设计出更优秀的产品,而不是只能学习和使用别人的
    2019-08-11
  • YUANWOW
    我觉得应该是整体借鉴
    是Linux还是GNU/Linux
    Linux只是内核,如果发行版的内核不是通过GCC编译出来的可以叫Linux
    如果是GCC编译出来的就应该叫做GNU/Linux

    作者回复: 仁者见仁智者见智吧,我看Ubuntu就是叫GUN/Linux

    85-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

    2019-08-08
  • javaYJL
    刚好今年的学习重点是网络编程,希望跟着老师的节奏好好提高。

    作者回复: 好的,希望可以帮助到你

    2019-08-08
收起评论
46
返回
顶部