0%

计算机网路基础回顾

本文是对计算机网络基础做的一次整体的梳理

osi七层模型

  • 应用层: 针对特定应用的协议
  • 表示层: 设备固有数据格式 → 网络标准数据格式
  • 会话层: 通信管理, 负责建立和断开通信连接
  • 传输层: 可靠传输
  • 网络层: 地址管理/路由选择
  • 数据链路层: 数据帧 <-> 01比特流 的转化
  • 物理层: 01比特流 <-> 电子信号 的转化

设备

中继器/ 集线器: 1层交换设备

  • 区别: 集线器有多端口, 中继器只有两个
  • 作用: 物理层面延长网络, 信号放大
  • 特点: 逐比特转发, 无法改变传输速度, 无差错控制, 不能连接传播速度不同的网络

网桥/ 交换机: 2层交换设备

  • 区别: 交换机有多个端口, 网桥只有两个
  • 作用: 识别数据帧 -> 存储于内存 -> 重新生成新的帧转发给另一网段
  • 特点: 不限制连接网段个数, 可以连接传输速率不同的网段, 具有差错检测, 地址自学习功能

路由器: 3层交换设备

4-7层交换机

  • 以传输层及以上的协议为基础, 分析收发数据, 并做特定处理
  • eg. 负责均衡器, 带宽控制

网关

  • 传输层及其以上: 转发+转换数据
  • eg. 手机电子邮件和互联网邮件的转换

数据链路层

作用

提供直连的两个设备间的通信功能, 在互联的同一种数据链路的节点之间进行包传递

MAC地址

mac地址

网络层: ip协议

作用

可以跨过不同的数据链路, 在复杂的网络环境中将数据包发送给目标地址

ip地址

格式

组成: 网络标识 : 主机标识 (路由器只根据网络标识进行转发)
表示: xx.xx.xx.xx / xx(代表网络标识的位数)
首部:

ip地址首部

  • 版本: 标识ip版本, ipv4该值为4
  • 首部长度: 单位为4字节; 当可选项为空时, 该值为5, 即20字节
  • 总长度: 首部+数据的总长度
  • 标识, 标志, 片偏移 共同控制数据包的分片与重组
    • 标识: 同一个数据包标识相同
    • 标志: 分片的相关信息
      标志
    • 片偏移: 每个分片相对于原始数据的位置. 第一个分片该值为0
  • 生存时间: 每经过一个路由器, TTL减1, 变成0时丢弃该包
  • 协议字段: 表示ip首部的下一个首部隶属于那个协议, eg. tcp/udp/icmp…

    分类

    ip地址分类

一个ip地址只要确定了它的分类, 也就确定了网络标识和主机标识

  • A类: 0.0.0.0 - 127.0.0.0
  • B类: 128.0.0.1 - 191.255.0.0
  • C类: 192.168.0.0 - 229.255.255.0
  • D类: 224.0.0.0 - 239.255.255.255 没有主机标识, 用于多播
  • 主机地址全0: 表示对应ip地址不可获知
  • 主机地址全1: 用作广播地址; 广播分为 本地广播直接广播.
    在本网络中的广播叫做本地广播, 此时ip地址的网络标识为该网络的地址, 主机标识为全1; 该ip会被路由器屏蔽, 所以不会到达其他的网段上; A网络下的主机向B网络广播叫做直接广播;

子网掩码

为了解决分类造成ip地址浪费的情况. 因为同一链路网络标识相同, 已b类ip地址为例, 同一链路可架设六万多台主机, 但实际情况中一般不会出现这种情况, 因此造成了地址的浪费. 因此我们引入子网掩码, 使ip地址不再受限于分类.

格式: 网络标识位全1, 主机标识位全0

全局地址/私有地址

为了解决ip地址分配不够的问题, 出现了私有地址. 全局地址在整个互联网保持唯一, 私有地址只需要在同一个域内保持唯一即可. 若配有私有ip的主机联网时, 则需通过NAT进行通信.

私有网络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
    即所有10开头, 192.168开头, 和172开头的都是私有地址

路由控制

路由表

格式: ip地址 / 下一个路由器
到达每个路由器后, 在路由表中找到符合目标地址的下一跳地址, 转发至下一个路由器; 直至找到目标网络;

分类

默认路由

ip地址为 0.0.0.0 或 default

主机路由

ip地址为 x.x.x.x/32, 即所有整个ip的所有位都参与路由, 多用于不希望通过网络地址路由的情况.

环回地址

localhost / 127.0.0.1
是同一台计算机的程序进行网络通信所使用的默认地址, 使用该地址时, 数据包不会发送到网络上

MTU与分片

MTU: 每种链路的最大传输单元; eg.以太网的MTU为1500
因为帧大小有限制, 且不同链路的MTU值不尽相同. 因此, 必要时路由器会对ip数据包进行分片, 并在目标主机处进行重组

IPV6

ARP

以目标ip地址为线索, 用来获得 下一个应该接受数据包的网络设备的mac地址 ;
当目标主机在同一链路上, 利用ARP广播直接获得目标主机的mac地址, 进行发送;
当目标主机不在同一链路, 则通过ARP获得下一跳路由器的mac地址;
获取到的mac地址会缓存到ARP缓存表中, 直至过期失效; (发送主机和目标主机都会进行mac地址缓存)

RARP

我们的个人电脑可以通过DHCP自动获取本机ip, 但使用例如打印机等嵌入设备, 就无法使用DHCP协议. 此时我们需要一台RARP服务器, 并在该服务器上注册设备的mac地址及其ip地址. 当设备启动后, 会发送获取ip地址的请求.

ICMP

用来辅助ip协议, 报告异常/获取路由, 子网掩码等网络信息

分类

  • 目标不可达: 连接不到目标主机.
  • 超时消息: 路由器发现某报文TTL为0, 就会像发送端发送该消息类型
  • 回送消息: 发送ICMP回送请求消息, 收到ICMP回送应答消息. eg.ping命令就利用该消息实现
  • 地址掩码消息: 向目标主机发送ICMP地址掩码请求消息, 就会受到对应的ICMP地址掩码应答消息

DHCP

主机接入网络后, 自动获取tcp/ip通信所以需要的设置. (ip, 子网掩码, 默认路由, dns等等)

工作机制

  1. 客户端发出ip租用请求报文, 通过 UDP端口69 (DHCP请求默认端口)向网络中发送 DHCPDISCOVER 广播包; 该包中源ip: 0.0.0.0, 目的ip: 255.255.255.255
  2. 任何接收到 DHCPDISCOVER 广播包的DHCP服务器, 都会通过 UDP端口68 回复 DHCPOFFER 广播包, 来提供信息; 该包中源ip为DHCP服务器ip, 目标ip为255.255.255.255
  3. 客户机若收到不止一个DHCPOFFER包, 会选择收到的第一个, 并发送 DHCPREQUEST 包, 其中包含提供ip的DHCP服务器和选择的ip
  4. 没被选择的DHCP服务器收到DHCPREQUEST包后, 会撤销之前分配的ip, 以供下次使用; 被选择的DHCP服务器会广播发送 DHCPACK

    确保所选ip可用

    DHCP服务器: 在分配ip地址前发送 ICMP回送请求包, 确认没有返回应答
    客户端: 向获得的ip发送ARP请求包, 确认没有返回应答

    DHCP中继代理

    通过DHCP中继代理, 对不同网段的ip地址分配也可以通过一个DHCP服务器来进行统一管理; 客户端会向DHCP中继代理发送广播包, 中继代理服务器收到请求后, 再以单播的形式发送给DHCP服务器

NAT

用来在本网络中使用私有ip, 在连接互联网时转为全局ip的技术
NAT有两种, 一种是替换ip, 但现在很少使用;
另一种叫 NAPT, 它的工作原理是用网关的ip, 并分配一个临时会话的端口号; 对于NAPT又分为两个大类型:

Symmetric NAT型 (对称型)

NAT型 (对称型)
即在网关中, 两个不同session, ip相同, 端口号不同.

Cone NAT型(圆锥型, 占主流)


两个不同session, ip和端口号都相同. (但因为目标地址不同, 所以也不是一个连接)

TCP/UDP

端口号

通过端口号, 我们可以知道请求究竟是发给的哪个守护进程. 例如当收到tcp建立的连接请求时(通过ip首部字段可得知), 如果目标端口号为22, 则转给sshd(ssh守护进程), 如果是80则转给httpd(http守护进程).
需要注意的是, 端口号由其使用的传输层协议决定, 因此不同传输协议可以使用相同的端口号. 但是知名端口号与传输层协议无关, 例如53端口无论是tcp还udp, 都是用于dns服务

分类
  • 知名端口号: 0-1023
    eg. http:80 FTP:21 ssh:22
  • 注册端口号: 1024-49151
  • 时序分配法: 49152-65535

TCP

确认应答 + 序列号 + 超时重传 (可靠传输)

tcp通过确认应答实现可靠地数据传输. 在一定时间内没有等到确认应答, 发送端就会进行重发.
确认应答是通过序列号实现的, 序列号是按顺序给发送数据的每个自己都编上号码. 接收端通过查询接受数据tcp首部中的序列号数据长度(ip首部中的数据包长度 - ip首部长度 - tcp首部长度), 将自己下一次应该接受的序号作为确认应答发出去.

MSS: 最大消息长度

tcp在传送大量数据时, 以MSS的大小将数据进行分割发送. 进行重发时也是以MSS为单位.
MSS是在三次握手时, 两端主机分别在tcp首部中写入自己的MSS, 并取较小值使用

窗口控制(提高速度)

如果发送端每次等到确认应答后, 再发送下一个段, 包的往返时间会很长. 因此, tcp引入的窗口的概念.
窗口大小: 无需等待确认应答而可以继续发送消息的最大值.

重发控制

那么, 使用窗口后确认应答, 以及重发控制又是如何实现的呢?
当接受主机收到一个自己应该接受的序号以外的数据时, 会对当前为止收到的数据返回确认应答. 而如果发送端主机连续三次收到同一个确认应答, 就会对其对应数据进行重发.

流控制

如果接收端窗口已满, 并需要一段时间来处理消息, 此时发送端发送的数据就会被丢弃. 为了防止这种情况下网络流量的无端浪费, 我们引入了流控制.

拥塞控制