本文面向中国互联网届众多的“应用软件工程师”,确切地说,面向 web 后端工程师(Java、PHP),web 前端工程师,移动开发工程师(iOS、Android)。本文将从铜线讲起,一路讲到 HTTP,为你们剖析出一个真实的“网络”。前端
前两天我给一个要跳槽的作 iOS 的哥们儿讲了几个小时的网络,给他的面试铺路,在讲以前,我就意识到了此次的内容若是可以整理一下将会是一套丰富的面向软件工程师的网络教程。git
我装系统起家,从本身搭建网站开始了解 PHP 技术,大学期间经过作外包成了一名 web 全栈,毕业后创业由于招不到满意的 iOS 因而本身动手写 Swift——当时 Swift 刚刚发布半年,基础库匮乏并且还有缺陷,因而我本身造了一堆轮子,其中就有网络库,因而我对 HTTP 有了深刻的理解(实际上超级简单没啥好深刻的),又搞了 HTTPS pinning,加上我本身作后端和运维,本身申请、购买、部署证书,对 HTTPS 有了一些了解;后来再次创业本身搭建办公室网络,对路由器、交换机、网关、DHCP、DNS 等的概念有了亲身体会,加上我偶尔也会从我买了不看的书堆中找出《图解 HTTP/TCP,IP/网络硬件》啥的看一看,加上此次讲解的机会,终于融会贯通了。程序员
大学时候我对计算机的理解融会贯通的点在“编译”,最近的融会贯通在于我看了神书《CS:APP》,对计算机系统又有了更深刻的理解:硬件和操做系统是密切配合的;当前 x86_64 PC 的性能大部分来自于“缓存” + “乐观” 的概念。之后有机会的话我会写文章分享一下个人理解。github
本系列文章中,咱们将进行以下几个重要约定:web