一线开发人员不得不知的计算机网络基础知识

2020/4/17 17:24:40

本文主要是介绍一线开发人员不得不知的计算机网络基础知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、五层网络模型

1. 主要的网络协议

以下每层列出的协议,都能够在代码或者操作系统中使用和管理,当程序进行网络通信时,需要由这些协议共同协作完成。

  • 应用层,包括HTTP、TLS(SSL3.1)、DNS、Thrift、FTP等
  • 传输层,TCP(传输控制协议)、UDP(用户报文协议)
  • 网络层,IP(网际协议)
  • 链路层,ARP(地址解析协议)
  • 物理层,该层与硬件关系更为紧密,无需太过关注

2. 网络通信的过程

网络通信的过程
在程序中发送HTTPS请求时,数据经过各层的处理,最终到达目标地址。上图以https://www.baidu.com为例,对各层处理的主要部分进行了描述,其中第1、2、3步在程序中进行,第4、5、6步在操作系统内核中进行,第7步由硬件设备完成,下面对每一步进行详细描述:

  1. DNS解析将域名www.baidu.com转换为IPv4或IPv6地址,它依托于UDP协议向DNS服务器发送查询请求并获取响应信息。
  2. HTTP报文由程序中的httpclient工具生成,包含用户设置的HTTP相关参数(URL、header、body等)。
  3. TLS协议通过四次握手机制协商出公钥/私钥,客户端生成“会话密钥”由公钥加密发送到服务端,服务端通过私钥解密获取,最终使用该“会话密钥”对HTTP报文进行加密。
  4. TCP连接通过三次握手机制建立,HTTP报文以字节流形式写入,发送的数据都需要经过“发送-确认”的过程,以保证其完整送达到指定IP地址。
  5. IP数据包将字节流按MTU大小进行拆分,局域网内通常为1500字节,互联网通常为512字节。IP数据包的头信息上记录了发送者IP和接收者IP。
  6. MAC帧在发送时,实际无法直接发送到指定的IP地址,需要内核根据路由表中记录的信息(本地路由表查看命令route -n),通过“IP地址与子网掩码”进行“与运算”得到下一跳的网关IP。然后,链路层通过ARP协议获取网关IP的MAC地址(本地ARP缓存表查看命令arp -a),将发送者MAC地址和网关MAC地址封装到MAC帧中。

二、关键的外部服务

上一节描述的网络通信过程,需要多种外部服务的参与才能完成,包括DNS服务、CA服务、路由器、ISP服务。

1. DNS服务

DNS服务器由DNS服务提供商进行管理,提供根据域名查询IP地址的服务,常见的DNS服务提供商有中国电信(114.114.114.114)和谷歌(8.8.8.8),Linux系统中在文件/etc/resolv.conf中和目录/etcc/sysconfig/network-scripts/下使用cat命令查看配置的DNS服务器IP地址。

2. CA颁发与验证服务

CA服务器提供了TLS协议中需要的证书颁发服务,在TLS进行四次握手时通过CA服务验证服务器提供的证书是否可信。浏览器内置了多种CA服务器的地址,并且也可以在本地配置证书进行验证(如:12306.cn需要在浏览器安装私有证书)。

3. 路由器

路由器是个人电脑发送IP数据包到互联网的第一道网关,路由器内置了相关ISP服务器的信息。

4. ISP服务器

ISP(Internet Service Provider)互联网服务提供商(如:中国电信、中国联通)是网络服务的关键角色,ISP服务器的作用与路由器相同,它们记录了庞大的路由表提供给数据链路层进行查询。当我们想要将自己的服务器接入到互联网中,需要付费给ISP进行注册,本质就是在ISP服务添加了自己服务器的路由信息(实际还涉及到光纤建设等物理层实施,这里不做描述)。



这篇关于一线开发人员不得不知的计算机网络基础知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程