概述

通信方式分类

  • 全双工:数据可以在两个方向上同时传输。比如视频电话,电话。
  • 半双工:数据可以在两个方向上传输,但不能同时进行,比如对讲机
  • 单工:数据只能朝一个方向传输,比如广播,电视广播

交换方式

电路交换

电话网络使用的交换方式

  • 优点:通信前从主叫端被叫端建立一条专用的物理通路,在通信的全部时间内,两个用户始终占用端到端的线路资源。数据直送,传输速率高。
  • 缺点:建立/释放连接,需要额外的时间开销;线路被通信双方独占,利用率低;线路分配的灵活性差;交换节点不支持差错控制,无法发现传输过程中的发生的数据错误。

因为打长途电话需要占用更多的资源,所以更贵。

报文交换

电报网络使用的交换方式。

使用了存储转发的思想,把传送的数据单元先存储进中间节点,再根据目的地址转发至下一节点。

  • 优点:通信前无需建立连接;数据以报文为单位被交换节点间存储转发;通信线路可以灵活分配;在通信时间内,两个用户无需独占一整条物理线路,相比于电路交换,线路利用率高;交换节点支持差错控制(通过校验技术)
  • 缺点:报文不定长,不方便存储转发管理;长报文的存储转发时间开销大、缓存开销大;长报文容易出错,重传代价高。

分组交换

基于报文交换技术,出现了分组交换技术,把报文拆分成多个分组,出现数据包丢失只需要重发数据包即可,不需要重发整个数据;存储转发也有时延;适用于当前计算机网络。

不定长的报文拆分成定长的分组,然后再进行传输:

如下图所示,各分组可以选择合适的路线,但是最终都被转发给H5(小美),殊途同归;所有分组到达后,然后就会按照分组号进行拼接。在现代网络中,路由器就是典型的分组交换机,各个分组能被正确转发到对应主机,得益于IP地址。

  • 优点:通信前无需建立连接;数据以分组为单位被交换节点间“存储转发”,通信线路可以灵活分配;在通信时间内,两个用户无需独占一整条物理线路,相比于电路交换,线路利用率高。交换节点支持差错控制(通过校验技术)。

    相比于报文交换,分组交换改进了如下问题:

    • 分组定长,方便存储转发管理
    • 分组的存储转发时间开销小、缓存开销小
    • 分组不易出错,重传代价低
  • 缺点:相比于报文交换,控制信息占比增加;相比于电路交换,依然存在存储转发时延;报文被拆分为多个分组,传输过程中可能出现失序、丢失问题,增加处理的复杂度。

针对分组交换的缺点,人们提取出了一种解决方案:’虚电路交换’,就是在分组交换的基础上,当通信双方需要交换数据的时候,建立一条连接,我们把这条连接叫做虚电路

编码和调制

我们知道,数据在计算机中的存储形式是二进制(0和1),但当我们想要进行数据传输,却不能直接传输二进制数据,而是需要先把二进制数据转换成可以在信道上传播的信号。可传播的信号可分为数字信号,模拟信号和光信号

其中把二进制数据转化成数字信号的过程叫做编码,这个过程的逆过程叫做解码

二进制数据转化成模拟信号的过程叫做调制,这个过程的逆过程叫做解调

我们电脑的网线插口,对应的其实是有线网络适配器,它可以实现编码和解码的功能。

我们日常生活中常见的光猫,其实就是光信号的调制-解调器。

以太网拓扑结构

  • 点到点:最简单的网络拓扑
  • 星型:最常见,所有设备(结点)都连接在一个中心点上,拓展性好,故障隔离;缺点是中心结点压力大,中心结点出问题所有连接的设备都断网(单点故障)
  • 总线型:现在已经不常见,多台设备通过一条线路连接,缺点是两个结点无法同时传输信号,而且总线左右两端要有终端电阻吸收信号,否则信号会反射
  • 环形:实现简单,但是只要一条线路断了多台设备就断网
  • 网状拓扑:每个结点都与其他结点有线路连接(强连通图),优点是一条线路断开影响很小,缺点是结点多了线路连接复杂

计算机网络的主要组成部分

  • 通信子网:是指网络中的通信设施,包括传输介质(如电缆、光纤)、通信设备(如路由器、交换机)
  • 通信协议
  • 主机

osi参考模型

关于osi模型的详细介绍,可以参考前端面试—网络 | 三叶的博客中的osi七层模型部分。

  • 应用层: 通过应用程序使用网络服务,传输的单位是报文,http协议就是应用层的协议
  • 表示层:处理交互数据的表示方法,例如格式转换,数据的加密和解密,以及数据的交换
  • 会话层: 负责维护两个节点之间会话的建立维护和断开;存在检查点机制,当通信失效时候自动在检查点恢复通信
  • 运输层:提供端到端(也叫进程到进程)的数据传输服务。传输的数据单位为报文段,比如tcp协议,它提供了端到端的错误检测、流量控制、拥塞控制和数据包排序等功能。
  • 网络层: 传输的数据单位为分组 ,提供路由选择功能,以分组为单位实现拥塞控制等功能,实现主机到主机的通信
  • 数据链路层:传输的数据单位为;在物理层的基础上,提供节点节点之间的服务,采取差错控制(比如CRC校验码)和流量控制(控制数据帧的发送速率,防止拥塞)的方法实现网络互联。
  • 物理层:单位bit,传输字节流。

物理层

传输介质

  • 有线

    • 双绞线:传输数字信号或者模拟型号
    • 同轴电缆:传输模拟或数字信号
    • 光纤:传输光信号,衰减小、带宽高和抗干扰能力强
  • 无线

    • 无线电波
    • 微波

mac地址

6个字节,48位,标识唯一一台计算机。mac地址也叫做物理地址,网卡的硬件地址,而ip地址被称作逻辑地址。

物理层设备

中继器(repeater)

增强信号,解决信号衰减的问题。

物理层“电气特性”规定0.5~1.5V是低电平,4.5~5.5V是高电平,不符合此标准的信号视为无效;中继器接收到信号后,会将低电平整形为1V(标准的低电平),将高电平整形为5V(标准的高电平),然后再输出。

集线器(hub)

解决多台主机互联线路复杂的问题,缺点在于是广播的,不安全。

冲突域

如果两台主机同时发送数据会产生冲突,那么这两台电脑就在同一个冲突域。

如图,把多个集线器通过一个集线器连接到一起,形成了一个更大的冲突域,我们也可以说,集线器不能分割冲突域

数据链路层

物理链路上传播的时候可能会受外界因素的影响发生比特跳变,即产生了差错。

封装成帧

原始SDU可以理解为分组透明传输指的是网络层的感受:网络层感受不到分组组装成帧帧拆分成分组的过程,因为这些工作都是数据链路层完成的。

差错控制

可靠传输

流量控制

控制发送方发送帧的速率别太快,让接收方来得及接收。

滑动窗口机制

下图介绍了流量控制是如何实现的,由此可以看出,滑动窗口和流量控制密不可分。

停止等待协议

数据帧和确认帧必须编号,因为如果接受方接收到帧并发送ack了,但是ack丢失了,发送方就会重复发送一个帧,此时接收方就无法判断这个帧是不是重复的(到底是发送方接收到ack后发送的新的帧,还是未接收到ack重复发送的帧呢?)。

因为在停止等待协议中,发送窗口和接受窗口的大小都是1,所以要满足1+1<=2^n解得n>=1,也就是说,至少使用1bit就能给帧编号。

因为在实际生活中,其实接收方也可能发送数据,所以需要区分帧的类型

  • 发送一帧后,必须收到ack后,才能发送下一个帧

  • 超时重传发送方每发送一个就开启一个计时器,设定一个重传时间,如果发送方超过这个时间没有接收到ack,则重传该帧;重传时间应该比帧的平均传输rtt(平均往返时间)更长。

  • 发送完一个帧必须保存它的副本,确认接收方接收到了再删除。

差错情况

  • 发送方发送的数据帧丢失/数据帧错误:设置的重传时间到后,发送方重新发送帧。
  • 接收方发送的ack丢失:发送方因为在规定时间内没有接收到ack,就会重新发送帧,但是由于接收方已经收到了帧,所以接收方会丢弃收到的重复帧,返回一个ack。
  • ack迟到:发送方因为在规定时间内没有接收到ack,就会重新发送帧,但是由于接收方已经收到了帧,所以接收方会丢弃收到的重复帧,返回一个ack;接收方丢弃重复的ack(因为发送了2个ack)。

后退N帧协议(GBN)

GBN是go back n的意思,意思就是后退n。要注意的是后退N帧指的不是滑动窗口后退,而重新发送n帧。

特点

  • 发送方维持一组允许连续发送的帧的序号;发送完一个数据帧,立马发送发送窗口中的下一个数据帧,就像流水线,效率变高了
  • 发送窗口可以有N个,但是接收窗口只能有一个
  • 不对接收到的每个帧进行确认,而是累积确认。

选择重传协议(SR)

SR(selective repeat)

介质访问控制

CSMA/CD

是什么

是一种介质访问控制(MAC)协议,要求设备先听再说,或者边听边说(检测到别人说就停止说),总之无论就是每时每刻都检查是否有别人在说,如果别人在说(占用了信道),自己就不说或者停止说(停止发送数据)

冲突检测

确保能监听到数据冲突,则要求数据帧的传输时延至少是传播时延的2倍,就是说受到发生碰撞的信号的时候还没说完(类比生活中自己没说完话然后听到了别人的话但是听不清说的是啥)

四大要点

  • 先听再发(检查是否空闲)
  • 边听边发(检查是否有冲突)
  • 冲突停止
  • 延迟后发

物理设备

网桥

  • 两个端口的交换机;
  • 左右2个端口连接集线器,每个集线器连接多台主机;
  • 根据帧的目的地址对帧进行转发过滤;
  • 网桥表的建立是根据转发的帧的源mac地址

交换机

一般来说,一个交换机确定一个子网;基于全双工的特点,每个接口构成一个冲突域,整个交换机构成一个广播域;交换机学习后可以知道每台主机在哪个端口,可以对数据帧进行精确转发,所以交换机一般不广播,但是不是不能广播。如果没有MAC地址,交换机将无法有效地进行帧的转发,可以理解为交换机只知道端口和MAC地址的对应关系。
接口类型:

  • access
  • trunk

局域网LAN

  • LAN(local area network),指某一区域内多台计算机组成的计算机组,使用广播信道,一个局域网一般就是,就是一个网段,就是一个广播域。局域网内的通信不一定总是广播,集线器连接多台主机形成的局域网确实是只能广播,但现代局域网通常使用交换机来实现更为高效的点对点通信。
  • 局域网可以分为有线局域网无线局域网(WLAN)

VLAN 虚拟局域网

被用来划分广播域;VLAN 可以将一个物理网络(一个实际的局域网/广播域)划分为多个逻辑上的广播域(每个VLAN就是一个独立的广播域),每个 VLAN 内部的设备可以互相通信,但不同 VLAN 之间的设备默认情况下不能直接通信。

实现

  • 基于交换机来说;先创建几个虚拟局域网,然后可以选择把那些接口放在哪个虚拟局域网上;二层交换机只能划分vlan,但是不能实现不同vlan之间的通信,而三层交换机具有二层交换机的功能,并且增加了路由功能,可以在不同的VLAN之间进行路由,实现不同VLAN之间的通信。

    创建vlan

    1
    2
    3
    4
    5
    6
    7
    8
    //首先,在交换机上定义所需的VLAN。每个VLAN都有一个唯一的标识符(VLAN ID),并且可以有一个描述性的名称。
    Switch(config)# vlan 10
    Switch(config-vlan)# name Sales
    Switch(config-vlan)# exit

    Switch(config)# vlan 20
    Switch(config-vlan)# name Engineering
    Switch(config-vlan)# exit

    分配接口到VLAN

    1
    2
    3
    4
    5
    6
    7
    8
    //对于Access端口,直接将端口分配给特定的VLAN。
    witch(config)# interface GigabitEthernet0/1
    Switch(config-if)# switchport mode access
    Switch(config-if)# switchport access vlan 10
    //对于Trunk端口,允许它通过多个VLAN的数据
    Switch(config)# interface GigabitEthernet0/24
    Switch(config-if)# switchport mode trunk
    Switch(config-if)# switchport trunk allowed vlan add 10,20
  • 路由器:除了使用VLAN划分广播域,路由器也可以划分广播域,路由器天然地分隔了不同的IP子网,因此也分隔了广播域。每一个接口通常代表了一个独立的子网,路由器不会转发广播包从一个接口到另一个接口。

我们总结一下,有哪些设备可以划分广播域

arp地址解析协议

是一种用于将网络层的IP地址解析为数据链路层的MAC地址的协议(ip->mac),ARP一般用于局域网(LAN)中,记录私有ip地址和mac地址的映射关系。因为ip地址无法在数据链路层工作。

工作流程

当一台主机要与某个ip地址对应的主机通信的时候,首先检查自己的arp缓存表,查看是否有该ip地址对应的mac地址。

如果没有则广播arp请求到本地网络上的所有主机,这个请求包括了源mac,源ip和目标ip;如果收到该请求的主机发现自己的ip和请求的目标ip匹配,就把自己的mac地址发送给目标主机(单播)

目标主机得知该ip地址mac地址后,就把这个地址封装到帧中并传输。

网络层

路由器

内部网关协议

  • RIP(路由信息协议)
    • 跳数(hop)
      • 该协议使用跳数来衡量与目标网络的距离,路由器到直连网络的距离为1;到非直连网络的距离为经过的路由器数加+1
      • rip只允许一条路径上的最大跳数为15,16就等于不可达也就是最多包含15个路由器,因此rip只适用小型互联网
    • 工作原理
      • 认为跳数少的路由路径就是好的路由路径
      • 如果跳数相同,则可以进行等价负载均衡
      • 只和相邻路由器周期性交换信息(路由表)
    • 工作过程
      • 起初只知道和直连网络的的距离为1
      • 和相邻路由器周期性交换信息(路由表)
      • 若干次交换后就知道到达本格网络的最短跳数和地址(收敛)
    • 路由环路问题:因为更新路由表的时候只关心相邻路由器能否达到某个网络,距离是不是更短,不关心相邻网络是如何到达该网络的。
  • OSPF(开放最短路径优先)
    • 使用洪泛法向自治系统内所有路由器发送信息,即路出器通过输出端口向所有相邻路由器发送信息,每一个相邻路由器又再次将此信息发往其所有的相邻路由器(广播)最终整个区域内所有路由器都得到了这个信息的一个副本。
    • 发送的信息就是与本路由器相邻的所有路由器的链路状态(与哪些路由器相连、以及该链路的代价,距离、时延、带宽等)。
    • 只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息。最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图。

外部网关协议

  • BGP(border gateway protocol):边界网关协议
    • BGP只能是力求寻找一条能够到达目的网络且比较好的路由,而并非要寻找一条最佳路由,因为不同自治系统内部度量代价的方式可能不同,而且自治系统之间的路由选择还要考虑政治经济等因素
    • 在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”,不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接

作用

  • 划分广播域;
  • 划分不同的网段,在不同网段之间传输数据。

ip+端口

ip地址

标识唯一一台计算机的网络地址
组成

  • 网络号+主机号;具体那部分是主机号那部分是网络号,由子网掩码指明;
  • 主机号部分不能全为0,也不能全为1;网段号的主机号部分全为0,广播号的主机部分全为1
  • 0.0.0.0 是一个特殊的 IP 地址,就相当于一个通配符(*),匹配所有的ip地址,不能直接对这个ip地址发请求,向任意ip地址发请求都相当于对这个ip地址发请求
  • 127.0.0.1等于localhost,是一个回环地址,访问这个地址就是访问本机,专门用来测试,ping这个地址不进行任何网络传输

私有ip/公有ip

  • 对于ipv4,能表示的ip地址只有42亿多个,不满足全世界人的对互联网的使用,所以出现了私有ip地址,私有ip地址不在公共网络上注册,仅用于内部。
  • 路由器内部的DHCP会自动为设备分配私有ip地址,而公有ip地址由运营商分配。

公有ip地址分类

常用的可以分为A类,B类,C类,网络号别为前8,16,24位。

如果给出子网掩码,我们当然能迅速的判断出ip的类型,但是如果只给出ip地址,其实我们也能判断出来。

A类ip地址第一位必须是0,B类ip地址前2位必须是10,C类ip地址前3位必须是110

私有ip地址分类

私有ip地址也可分为A,B,C三类

  • A类:10.0.0.0—10.255.255.255/8
  • B类:172.16.0.0—172.31.255.255/16
  • C类:192.168.0.0—192.168.255.255/24(最常使用)

这些ip地址只能用于局域网内的结点,不能分配给互联网上的结点。

NAT(network address translation)地址转换

  • 设备访问互联网时,路由器会把私有ip地址转换成共有ip地址,还会把公有ip地址转化成私有ip地址,这地址转换的功能内置在路由器
  • 多台电脑公用一个ip那如何区分各台电脑?使用端口映射,路由器会使用一个公网IP地址加上不同的端口号来标识不同的内部主机
    ,比如192.168.1.2:1234 -> 203.0.113.5:10001记录在NAT表中。

端口号

操作系统借助端口号来区分数据应该发送到哪个应用或者哪个进程。

为各种公共服务保留的端口范围1 -1023,比如http默认占用80端口,https默认占用443端口,dns默认占用53端口。

所谓的默认端口,就是这些请求(http/https请求,dns请求)的目标端口号,服务器端的Web服务进程监听此端口,准备接收来自任意客户端的请求;客户端则通过操作系统分配的一个临时端口(源端口)与服务器通信。

为什么ip地址和mac地址缺一不可

  • mac地址标识唯一一台计算机,不适合大规模通信。起初人们只用mac地址通信,但后来接入网络的设备多了地址表会很长,而且mac地址不包含位置信息,所以改用ip地址通信;路由器只需要记住哪个端口对应哪个网段,而每个网段会有多台设备,具体哪个ip地址对应那台主机由交换机记录。
  • 为什么还需要mac地址?当多台主机通过交换机相连,交换机和路由器相连,外网发送给某台主机的信息首先会被路由器转发到交换机上,交换机根据数据帧的目标MAC地址将数据帧发送到目标主机(交换机的转发需要mac地址,交换机地址表)。
  • ip地址可以理解为家庭住址,而mac地址就可以理解为住户的姓名,邮递员根据ip地址把包裹交给门卫(具体哪台交换机),门卫再根据mac地址把包裹交给住户,1个公有ip地址(一个小区)可以对应多个私有ip地址(多名住户),也就对应多个mac地址,所以说,mac地址实现了信息通信的”最后1公里”。

传输层

tcp

传输控制协议,面向连接(虚连接,这个连接是全双工的),面向字节流,提供可靠服务;

可靠传输

收到确认报文后,就能在缓存中删除报文段321

冗余ACK(冗余确认)

要是等到超时的时候再重传,未免效率较低,有没有一种方法,能在超时事件发生之前,就提醒发送端重传报文段呢?

每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号
比如,发送方已发送1,2,3,4,5报文段
接收方收到1,返回给1的确认(确认号为报文段2的第一个字节,表示期望收到第二个报文段),2号报文段丢失。
接收方收到3,仍返回给1的确认(确认号为报文段2的第一个字节)
接收方收到4,仍返回给1的确认(确认号为报文段2的第一个字节)
接收方收到5,仍返回给1的确认(确认号为报文段2的第一个字节)
发送方收到3个对于报文段1的冗余ACK,认为2报文段丢失,重传2号报文段(快速重传)

流量控制

让发送方发慢一点,否则接收方来不及接收。

在tcp协议中,发送端不会等待上个报文段的ack,就发送其他报文段,并且使用累计确认的方式;

接收方把收到的报文段存储在tcp缓存中,交付给应用层则移除,所以发送方发送的速率不能过快,因为应用层处理报文段的速度有限而且缓存大小有限,发送方发送的速率过快就会丢包。

三次握手 四次挥手

三次握手

  • A:我要和你建立连接了,发送 SYN包
  • B:我准备好了,你来和我建立连接吧,返回SYN包+ACK包
  • A:我现在就来和你建立连接,发送ACK包

四次挥手

  • A:我要和你断开连接了,发送FIN包

  • B:我把数据传输完了和你断开连接,发送ACK包

  • B:我数据传输完了,返送FIN+ACK包,可以断开连接了,发送的seq=w而不是v+1,因为再发送ACK包之后还可能发送其他数据。

    而ack还是等于u+1,因为客户端在发送FIN请求后没有发送其他数据。

  • A:好我们断开连接吧,发送ACK包,然后进入等待,确保服务端接收到ACK连接,否则服务端的连接始终不会关闭

tcp字段

控制字段

  • SYN,ACK
    在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN置1就表示这是一个连接请求或连接接受报文。 TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
  • FIN
    用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接

udp

UDP(User Datagram Protocol),用户数据报协议。

  • 无连接,没有拥塞控,尽最大努力交付(丢包就丢了吧);
  • 面向数据报,即对应用层交下来的 报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层。
  • 开销较小,传输效率较高,可用于广播多播。

区别与联系

  • 添加端口号

    都是工作在传输层的协议,都能给报文添加端口号(源端口,目标端口),把报文封装成

  • 首部开销

    TCP报文段首部内容更多,首部更大,UDP报文段首部开销小。

  • 报文分段

    如果报文很大,TCP会将报文分段,并给这些报文段编号。而UDP则始终把应用层的报文当做一个整体,不进行分片,直接封装。

  • 连接建立

    TCP是面向连接的,即发送数据之前需要建立连接,保证数据可靠性,而UDP是无连接的,直接发送数据,不保证数据可靠性

  • 流量与拥塞控制

    TCP具有流量控制拥塞控制,而UDP没有。

应用层

文件传输协议(FTP)

FTP(File Transfer Protoco)

需要建立两个TCP连接:

  • 文件服务器21端口与客户端的任意一个端口建立一个连接,叫做控制连接,用来传输控制数据
  • 文件服务器20端口与客户端的任意一个端口建立一个连接,叫做数据连接,用来传输文件
  • 传输的方式:ASCII,二进制

DNS

基于UDP,占用53端口,关于DNS的详细介绍参考前端面试—网络 | 三叶的博客

SMTP/POP3

邮件协议,第一个是用于发送的协议,第二个是用于接收的协议

http协议

HTTP(非加密):默认端口号为 80;HTTPS(加密):默认端口号为 443。是无状态的协议,基于tcp连接

关于http的详细介绍参考前端面试—网络 | 三叶的博客

C/S模型和P2P模型

  • C/S模型:客户端/服务器模型,客户端指的是请求服务的主机,服务器指的是提供服务的主机
  • P2P模型:每台主机同时是客户端也是服务器,充分利用了主机的上行,下行带宽,比如迅雷。