软件工程师需要了解的网络知识:从铜线到HTTP(一)—— 前言
写作目标
本文面向中国互联网届众多的“应用软件工程师”,确切地说,面向 web 后端工程师(Java、PHP),web 前端工程师,移动开发工程师(iOS、Android)。本文将从铜线讲起,一路讲到 HTTP,为大家剖析出一个真实的“网络”。
写作由来
内容来源
前两天我给一个要跳槽的做 iOS 的哥们儿讲了几个小时的网络,给他的面试铺路,在讲之前,我就意识到了这次的内容如果能够整理一下将会是一套丰富的面向软件工程师的网络教程。
为什么是我
我装系统起家,从自己搭建网站开始了解 PHP 技术,大学期间通过做外包成了一名 web 全栈,毕业后创业因为招不到满意的 iOS 于是自己动手写 Swift——当时 Swift 刚刚发布半年,基础库匮乏而且还有缺陷,于是我自己造了一堆轮子,其中就有网络库,于是我对 HTTP 有了深入的理解(实际上超级简单没啥好深入的),又搞了 HTTPS pinning,加上我自己做后端和运维,自己申请、购买、部署证书,对 HTTPS 有了一些了解;后来再次创业自己搭建办公室网络,对路由器、交换机、网关、DHCP、DNS 等的概念有了亲身体会,加上我偶尔也会从我买了不看的书堆中找出《图解 HTTP/TCP,IP/网络硬件》啥的看一看,加上这次讲解的机会,终于融会贯通了。
说说融会贯通
大学时候我对计算机的理解融会贯通的点在“编译”,最近的融会贯通在于我看了神书《CS:APP》,对计算机系统又有了更深入的理解:硬件和操作系统是密切配合的;当前 x86_64 PC 的性能大部分来自于“缓存” + “乐观” 的概念。以后有机会的话我会写文章分享一下我的理解。
本文约定
本系列文章中,我们将进行如下几个重要约定:
- 本文目标是让软件工程师了解网络各层的本质,而不是事无巨细什么都讲
- 有些部分我将会用打比方的形式讲解,目的是让读者更容易理解,而不是每个细节都完全是真实情形
- 如果有我理解的不对的地方欢迎在评论里指出
相关日志:
软件工程师需要了解的网络知识:从铜线到HTTP(四)—— TCP 和路由器
软件工程师需要了解的网络知识:从铜线到HTTP(五)—— HTTP 和 HTTPS
软件工程师需要了解的网络知识:从铜线到HTTP(一)—— 前言的更多相关文章
- 1、软件工程师要阅读的书籍 - IT软件人员书籍系列文章
软件工程师要阅读的书籍估计是项目组内最多的.软件工程师处于项目组中最基础的人员储备阶层,与项目的关系最密切.当然,现在是大数据时代,我们无法全部看完所有相关的书籍,只能够先学习工作需要的知识,然后在项 ...
- 关于Java 软件工程师应该知道或掌握的技术栈
鄙人星云,今天突然想写这么一篇需要持续更新的文章,主要目的用于总结当前最流行的技术和工具,方便自己也方便他人. 更新时间:2018-10-23 09:26:19 码农职业路径图 码农入门职业路径图 J ...
- Atitit 大龄软件工程师的出路attilax总结
Atitit 大龄软件工程师的出路attilax总结 1.1. 创业vs打工 联合创始人 合伙人1 1.2. 项目管理 架构师1 1.3. 软件培训 讲师2 1.4. 研究院研究员2 1.5. 继续博 ...
- Linux实战教学笔记19:Linux相关网络知识梳理
第十九节 Linux相关网络知识梳理 标签(空格分隔): Linux实战教学笔记-陈思齐 一,前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工 ...
- (转)我在北京工作这几年 – 一个软件工程师的反省
我于2007年来到北京,在北京工作这些年,先后在NEC.风行.百度几家公司担任软件工程师的职务.NEC是一家具有百年历史的传统日企,在知春路的分公司叫日电电子,我们部门主要从事机顶盒.数字电视上嵌入式 ...
- [面试] Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- Java软件工程师技能图谱
原文链接:Java软件工程师技能图谱 最近在考虑"拥有怎样的技能才能算一名合格的java软件工程师呢?"这个问题.碰巧在github发现一个很棒的开源项目--程序员技能图谱.@Zh ...
- [No00004D]深度思考好文:软件工程师的困境
昨天是我一同学结婚的好日子,同学们大家聊各自的工作,有个同学突然问了我一句:我们同学中好像做软件的不多?如果再细分,好像做网络相关的更少? 回想起当时为何读计算机信息管理的专业,是因为那时听说读电脑未 ...
- Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结
Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结 1. 完备的知识体系 2 2. 编程理论/原理的掌握 2 1.1. 掌握常用的概念(ORM,IOC,AOP,event driv ...
随机推荐
- 国产手机没有google services 和google play崩溃,判断google services是否存在
public static boolean isGooglePlayServiceAvailable (Context context) { int status = GooglePlayServic ...
- 利用 C# dynamic 减少创建模型类
C# 的 dynamic 关键字可以是C#可以像 javascript 这种弱类型语言一样具有随时可以添加属性的能力.C# 是一种强类型语言,dynamic 要摆脱类型的限制,自然是有代价的.这里不讨 ...
- POJ2749 Building road
传送门 这道题真是2-SAT好题啊!!卡了我两个点才做完……垃圾POJ还不告诉我哪错了…… 首先我们先花一段时间把题看懂……(其实是翻译一下),之后我们发现因为每个谷仓只能向一个中转点连边,所以他就是 ...
- securecrt中vim行号下划线问题及SecureCRT里root没有高亮的设置,修改linux终端命令行颜色
背景:在用raspberry用SecureCRT下的vim打开文件时出现用set nu时行有下划线,于是找了下解决办法,如下:vim行号下划线问题在vim中发现开启显示行号(set number) ...
- 【FFmpeg】FFmpeg常用基本命令(转载)
转自:http://www.cnblogs.com/dwdxdy/p/3240167.html 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an outp ...
- .gitignore(转载)
转自:http://blog.csdn.net/liuqiaoyu080512/article/details/8648266 git 可以管理所有文件的变更, 但并不是所有文件都有意义. 大部分二进 ...
- bzoj 1833: [ZJOI2010]count 数字计数【数位dp】
非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r)-ans(l-1),用预处理出的f数组dp出f即可(可能也不是dp吧--) #include ...
- bzoj2679: [Usaco2012 Open]Balanced Cow Subsets(折半搜索)
2679: [Usaco2012 Open]Balanced Cow Subsets Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 462 Solv ...
- (斯特林公式)51NOD 1058 N的阶乘的长度
输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 输入N(1 <= N <= 10^6) Output 输出N的阶乘的长度 Input示例 6 Out ...
- PHP的包依赖管理工具Composer简介
composer是一个基于项目的依赖管理器,负责将php项目的所依赖的包和库安装在项目的目录中,默认不会不会安装任何数据到全局.他用于取代之前pear工具 1 安装Composer curl -sS ...