计算机网络概述

从小网络开始

当两台计算机想要互相通信时,只需要在它们之间添加一条信道即可

台计算机想要互相通信时,如果按照最朴素的思路,需要在它们之间添加数量级别的信道。于是我们想到可以用一个集线器,充当中间站,集线器的特点为:

  • 有多个端口,每个端口和一条信道相连
  • 每次从端口收到消息,会无条件转发给
  • 多台计算机同时发消息会造成相互干扰,导致数据紊乱

所以我们可以用交换机来充当中间站,交换机的特点为:

  • 有多个端口,每个端口和一条信道相连

  • 内部维护了一个MAC地址表

    • MAC地址是每张网卡的唯一标志

    • 以下图为例,其MAC地址表完整状态下应该为:

      MAC地址 端口
      BL:AC:K0
      PU:RP:LE
      GR:RE:N0
      OR:AN:GE
    • MAC地址表是动态自动维护的(通过泛洪),也可以手动配置

  • 支持广播和单点转发

    • 广播:从收到消息后,发现是一条广播消息,则会转发给
    • 单点转发:从收到消息后,在自己的MAC表中,找到消息携带的目标MAC地址对应的端口

记不住网卡MAC地址...

上述的通信方式,是和网卡强相关的,如果我不知道目标的网卡,或者与我通信的计算机的网卡被更换了,似乎就只能通过和目标直接线下协商,才能建立通信了

为了分离网卡对通信的强绑定,我们抽象出了一个叫做IP地址的东西,这样我只需要知道IP地址就能和目标进行通信了,即使对方更换了网卡,只要IP地址没有变化,都能继续通信,而确保我能通过对方IP地址获取对方MAC地址的协议叫做ARP协议。ARP协议涉及到一个ARP记录表,是存放在本机上的

稍微大一点的网络

我们可以继续尝试在交换机网络的基础上拓展,把多个交换机相连:

不过我们很快遇到了瓶颈:

  • 交换机的MAC地址表大小有限制,不能记录下全网每台MAC对应的端口
  • 在广播时,全网泛洪让网络效率非常糟糕

于是我们希望把网络隔离开,将网络分成不同的网段,交换机只用来传输同一网段的信息,于是子网掩码就出现了。我们认为一个IP地址可以被划分成两个部分:网络号,主机号

这样计算机可以通过,来判断当前消息应该发往当前子网,还是发给外网,发给的消息将交给路由器来进行处理。而计算机如何定位到路由器的位置呢?每台计算机上会配置默认网关的值就是对应的IP地址,我们通过能查到对应的地址,消息就能被顺利送到网关了

路由器维护了一个叫做路由表的东西,有不同的协议(OSPFBGP)来自动维护路由表,保证能顺利在上穿行

传输层

当消息传递到目的时,如何确定由哪个应用来接收呢?不同的应用使用不同的端口,在此基础上诞生了UDP协议

不过面对复杂的网络环境,UDP协议并不稳定,我们希望有一种协议能保证消息可靠到达,基于此愿景诞生了TCP协议,TCP协议需要解决:连接建立,连接关闭,数据分包,分包确认应答,重传分包,分包整理,控制传输速度(滑动窗口,拥塞控制)

应用层

UDP和TCP是应用层协议的根基

graph TB

TCP-->HTTP
TCP-->HTTPS
TCP-->FTP
TCP-->POP3
TCP-->...
graph TB
UDP-->NFS
UDP-->TFTP
UDP-->SNMP
UDP-->DHCP
UDP-->...

IPv4告急

随着网络继续扩大,IPv4不够用了,于是我们让内网的所有计算机共有一个公网IP,由路由器负责提供公网IP,同时维护一个NAT映射表

内网IP 内网端口 公网端口
192...1 1000 555
192...2 1000 666

这就是NAT协议