前言
近十年随着互联网和软件开发行业的高速发展,让行业内程序员的薪资也水涨船高,越来越多非计算机专业的同学想转行学软件开发,甚至有了“三百六十行,人人转码农”的口号。但很多转码的非科班程序员可能对Java/Python/Go等热门编程语言入了门,但对最基础的网络知识却了解不多,今天就从网络入手,简单聊一聊小白程序员必须要了解的网络知识。
必须要了解的3个网络概念
-
IP地址
可以理解为不同设备(计算机)的“电话号码”,假设一个网络集群环境里有50台设备,如果不给设备一个“电话号码”,那么网络通信就无从谈起,IP地址就是某个设备的专属“电话号码”,是不同设备之间互相通信的基础。
IP地址还分为内网IP和公网IP,简单来说公网IP是具有唯一性的,理论上来说只要其他人知道设备的公网IP就可以访问该设备(假设没有防火墙/白名单等安全设置),内网IP则是某个家庭/公司/组织给自己管理的设备分配的地址,互联网中的其他设备无法直接访问。
假设家里安装好了路由器,家里的的两台笔记本电脑连上路由器后会被分配一个内网IP,比如192.168.10.x,此时两台笔记本电脑之间可以通过分配的内网IP进行网络通信,此时就构成了一个最简单的内网环境。
其实IP地址还有IPv4和IPv6的的区别,目前我们常说的IP地址(xxx.xxx.xxx.xxx)都是IPv4,IPv6暂且不聊。
预留内网(私有)IP地址:
A类地址:10.0.0.0–10.255.255.255
B类地址:172.16.0.0–172.31.255.255
C类地址:192.168.0.0–192.168.255.255 -
子网掩码/网段
IP地址+子网掩码才能确定IP所处的网段,因为IP地址分为网络位和主机位,当网络位相同则代表两个IP在同一网段下可以互相通信,可以将IP地址和子网掩码转换为2进制后做“&”运算,得到的结果就是网络位。
假设有人问你192.168.1.0和192.168.2.0这两个IP是否在同一个网段下呢,这个问题是无法回答的,因为没有告诉你子网掩码是多少。如果告诉你子网掩码是默认的255.255.255.0,则192.168.1.0的网络位是192.168.1,192.168.2.0的网络位是192.168.2,那这两个IP必然不是同一网段。但如果告诉你子网掩码是255.255.0.0,则192.168.1.0的网络位是192.168,192.168.2.0的网络位也是192.168,那这两个IP则同在一个网段。
子网掩码的作用简单来说就是区分IP地址的网络位和主机位,子网掩码跟IP地址一一对应,子网掩码为1的是网络位,为0的是主机位,当网络位一致时,则代表处在同一网段,可以互相通信。
&运算的例子:
11000000 10101000 00000001 00000000 (IP地址:192.168.1.0)
11111111 11111111 11111111 00000000 (子网掩码:255.255.255.0)
11000000 10101000 00000001 00000000 (&运算后:192.168.1.0)
-
DNS
域名服务器,用来做域名和IP地址的转换。日常访问一个网站时是不可能直接输入IP地址的,任何一家互联网公司的门户网站都有着自己的域名,当在浏览器输入www.taobao.com时将会直接跳转到淘宝的主页面,DNS就是将淘宝的域名解析为真实的IP地址。DNS的解析流程大约有8步,每一步的详细内容大家有兴趣再查相关资料即可,这里不再深入阐述。
查看浏览器缓存->查看系统缓存->查看路由器缓存->查看ISP DNS 缓存->询问根域名服务器->询问顶级域名服务器->询问权威域名服务器->保存结果至缓存
网络模型
目前常说的网络模型只有两个,包括OSI七层模型和TCP/IP四层模型。OSI(Open System Interconnect)全称开放式系统互联,是ISO(国际标准化组织)在1985年提出的一个理论模型,但由于OSI模型设计复杂并没有得到广泛认可,相反TCP/IP四层模型成为了网络互联事实上的标准,这并不意味着两个模型冲突,只是划分的粒度不一样。
-
OSI
OSI模型 解释 应用层(Application Layer) 网络服务与最终用户的一个接口 表示层(Presentation Layer) 数据的格式化/转换 会话层(Session Layer) 不同机器之间建立/管理/终止会话 传输层(Transport Layer) 定义传输数据的协议端口号,以及流控和差错校验 网络层(Network Layer) 进行逻辑地址寻址,实现不同网络之间的路径选择 数据链路层(Data Link Layer) 提供介质访问和链路管理 物理层(Physical Layer) 建立、维护、断开传输二进制数据的物理连接 -
TCP/IP
ICP/IP模型 解释 应用层 为用户提供所需要的各种服务 传输层 为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性 网络层 主要解决主机到主机的通信问题 数据链路层 主机和网络之间的交换 -
两种模型参照对比
OSI七层模型 TCP/IP四层模型 对应网络协议 应用层 应用层 HTTP/FTP 表示层 Telnet 会话层 DNS 传输层 传输层 TCP/UDP 网络层 网络层 IP/APR 数据链路层 数据链路层 FDDI 物理层 IEEE 802.1A
网络相关的常见面试题
无论是哪个编程语言的面试都离不开网络,对网络的理解有时候更能看出一个程序员的基本功如何,以下是面试过程中常见的一些网络面试题,有兴趣可以搜索资料来提高对网络的理解。
-
在浏览器输入一个URL至页面呈现,网络上都发生了什么?
-
谈谈对TCP的三次握手和四次挥手的理解
-
TCP协议如何保证可靠性传输?
-
聊一聊HTTP与HTTPS的区别
-
说一下ping的过程
-
GET和POST区别
-
HTTP 1.0、HTTP 1.1及HTTP 2.0的主要区别是什么?
-
Session、Cookie和Token的主要区别
-
…
结语
网络相关的知识点非常多,光是各种网络协议就令人眼花缭乱,很多时候刚入行做开发的程序员往往把重心放在学习编程语言及各种框架上,但可千万别忘了修炼“网络”内功,想要成为资深开发或架构师,网络知识必不可少。