本文面向中國互聯網屆衆多的「應用軟件工程師」,確切地說,面向 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