计算机网络学习笔记

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。

一、基础知识

1、IPV4地址

1.1、v4协议

目前的全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议。目前IP协议的版本号是4(简称为IPv4)。

1.2、v4地址

  • 在TCP/IP体系中,IP地址是一个最基本的概念,我们必须把它弄清楚。
  • IPv4地址就是给因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
  • IP地址由因特网名字和数字分配机构ICANN进行分配。
    • 我国用户可向亚太网络信息中心APNIC申请ip地址,需要缴费。
    • 2011年2月3日,互联网号码分配管理局IANA(由ICANN行使职能)宣布,IPv4地址已经分配完毕。
    • 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6 。
  • IPv4地址的编址方法经历了如下三个历史阶段:
    • 1981年分类编址
    • 1985年划分子网
    • 1993年无分类编址
  • 表示方法:
    • IPv4的地址位数为32位,也就是说最多有2的32次方的IPv4地址可以联到Internet上。
    • 通常,IPv4地址以点分十进制表示。IPV4 就是有4 段数字,每一段由0~255 数字组成。每个部分代表一组构成8位地址方案的8位地址。
      image.png

1.3、分类编址的IPv4地址

  • A类网络,最高位固定为0
    • 8位网络号,24位主机号
    • 最小网络号0,保留不指派
    • 第一个可指派的网络号为00000001,网络地址为1.0.0.0
    • 最大网络号二进制011111111(127),作为本地环回测试地址,不指派。最小还回测试地址:127.0.0.1,最大的本地环回测试地址为127.255.255.254
    • 最后一个可指派的网络号为126,网络地址为126.0.0.0
    • 可指派的网络数量为2^(8-1)-2=126(减2的原因是除去最小网络号0和最大网络号127)
    • 每个网络中可分配的IP地址数量为2^24-2=16777214(减2的原因是除去主机号为全0的网络地址和全1的广播地址)
  • B类网络,最高位固定为10
    • 最小网络号也是第一个可指派的网络号128.0网络地址为128.0.0.0
    • 最大网络号也是最后一个可指派的网络号191.255网络地址为191.255.0.0
    • 可指派的网络数量为2^(16-2)=16384
    • 每个网络中可分配的IP地址数量为2^16-2=65534(减2的原因是除去主机号为全0的网络地址和全1的广播地址)
    • 在有些资料中指出128.0是保留网络号,B类第一个可指派的网络好为128.1。但根据2002年9月发表的RFC3330文档,128.0网络号已经可以分配了。
  • C类网络,最高位固定为110
    • 最小网络号也是第一个可指派的网络号192.0.0,网络地址为192.0.0.0
    • 最大网络号也是最后一个可指派的网络号223.255.255网络地址为223.255.255.0
    • 可指派的网络数量为2^(24-3)=2097152
    • 每个网络中可分配的IP地址数量为2^8-2=254(减2的原因是除去主机号为全0的网络地址和全1的广播地址)

1.4、划分子网的IPv4地址

  • 32比特的子网掩码可以表明分类Ip地址的主机号部分被借用了几个比特作为子网号
  • 子网掩码使用连续的比特1来对应网络号和子网号
  • 子网掩码使用连续的比特0来对应主机号
  • 将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址
  • 例子:
  • 默认的子网掩码是指未划分子网的情况下使用的子网掩码

1.5、无分类编址的IPv4地址

  • 划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间大小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
  • 1993年,IETF发布了无分类域间路由选择CIDR
    • CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念;
    • CIDR可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前 允许因特网的规模继续增长。
  • 例子:

1.5、思考

什么是子网

为了确定网络区域,分开主机和路由器的每个接口,从而产生了若干个分离的网络岛,接口端连接了这些独立网络的端点。这些独立的网络岛叫做子网(subnet)。

什么是子网掩码
  • 指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码
  • 通过子网掩码,就可以判断两个IP在不在一个局域网内部。
  • 子网掩码可以看出有多少位是网络号,有多少位是主机号
子网划分的意义
  • 节省IP地址资源
  • 大大减少路由表的数目

二、面试题

1、浏览器中输入网址敲回车发生了什么?

  • URL解析
  • DNS查询
  • TCP连接
  • 处理请求
  • 接受响应
  • 渲染页面
    参考:在浏览器输入 URL 回车之后发生了什么(超详细版) - 知乎 (zhihu.com)

2、服务器如何区分用户请求的?

  • 浏览器首次访问服务器时,服务器会给客户端创建一个会话session,并响应一个会话的唯一标识sessionId。
  • 浏览器收到此SessionId后,第二次请求时会将此sessionId添加中请求头的cookie中。
  • 服务器判断cookie中的sessionId是否有效,来判断是否是同一浏览器进程发起的请求。
    参考:一分钟解惑:上万个用户请求,服务器如何区分_君子_不器的博客-CSDN博客

3、路由器、防火墙处于哪一层?

  • 路由器:则是一种典型的网络层设备,在不同的网络间存储并转发分组。可在异种网络之间(即不同类型的局域网互连,局域网与广域网,广域网与广域网)传输数据并进行路径选择,使用专门的软件协议从逻辑上对整个网络进行划分。
  • 防火墙:传统的包过滤防火墙工作在网络层,电路网关防火墙工作在传输层(线路级防火墙工作在会话层),应用网关类的代理防火墙则工作在OSI最高的应用层。

4、DNS协议

  • 域名解析系统,是互联网一项服务,完成域名地址与IP地址的转换
  • 参考:超详细 DNS 协议解析 - 知乎 (zhihu.com)
    面试官:DNS 协议是什么?说说 DNS 完整的查询过程?_动感超人,的博客-CSDN博客

5、HTTP协议

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。

注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现。

HTTP 是一种无状态 (stateless) 协议, HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率。

6、HTTP和TCP区别和联系?

  • 联系:Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据传输完毕后,Http会立即将TCP连接断开,这个过程是很短的。
  • 区别:HTTP和TCP位于不同的网络分层。TCP是传输层的协议,定义的是数据传输和连接的规范,而HTTP是应用层的,定义的是数据的内容的规范。建立一个TCP请求需要进行三次握手,而由于http是建立在tcp连接之上的,建立一个http请求通常包含请求和响应两个步骤。

7、HTTP和HTTPS的区别,HTTP中S是指什么?

  • 区别:
    • HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议;
    • HTTP和HTTPS使用的是完全不同的连接方式,用的端口不一样,前者是80,后者是443;
  • 字母S 指的是 SSL/TLS 协议,它位于 HTTP 协议与 TCP/IP 协议中间。
    • SSL/TLS协议目的:
      • 所有信息都是加密传播,避免窃听风险
      • 具有校验机制,被篡改后,通信双方可以立刻发现
      • 配被身份证书,防止被冒充

8、HTTPS原理

  • 建立连接过程(非对称加密)
    • 客户端向服务端发送请求,请求内容中包含(支持的TLS版本,客服端支持的加密套件,随机数A)
      • 服务端响应给客户端,内容包括(确认支持的TLS版本,服务端选择的加密套件,随机数B)
      • 服务端再次发送响应,此次内容为服务器的证书,客户端(浏览器查看可信任的证书列表)验证证书是否可信
      • 服务端响应给客户端证书公钥
    • 客户端生成随机数C,使用公钥加密随机数C,将加密后的随机数C发送给服务端
      • 服务端使用私钥解密随机数C
    • 客户端和服务端使用随机A,B,C,计算出会话密钥(只应用于当前会话)
  • 传输数据(对称加密)
    • 客户端和服务端使用会话密钥对数据进行加解密

9、公钥加密和私钥加密有什么区别?

  • 公钥加密用来加密数据。公钥加密后,只能用私钥解密,而私钥不是公开的,所以保证了数据只能由私钥持有者才能看到。如果用私钥加密,公钥是公开的,这样就会导致所有人都能解密,并不能保证数据的私密性。
  • 私钥加密用来签名,公钥用于验签。签名并不是为了保密,而是保证了这个签名是由特定的人发出的,而不是被其他人伪造的,所有私钥的私有性适合用在签名的用途上。
  • 公私钥特性
    • 公钥与私钥是成对出现的
    • 私钥文件中包含了公钥数据,所以可以基于私钥导出公钥
    • 密钥越长,越难破解,所以2048位密钥比1024位密钥要更安全
    • 公钥和私钥都是密钥,被公开的那个就是公钥,没有被公开的那个就是私钥