计算机网络初识

计算机网络定义

计算机网络是指将地理位置不同且具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

计算机网络基本组成

硬件部分

  • 计算机:包括服务器和客户机。服务器是网络的核心设备,它为网络用户提供共享资源和服务,如文件服务器、打印服务器、数据库服务器等。客户机是网络用户直接使用的计算机,它通过网络访问服务器上的资源。
  • 网络接口卡:每台计算机要接入网络,都需要有相应的网络接口卡(网卡)。网卡是计算机与通信介质之间的接口,它负责将计算机上的数据转换为适合在通信介质上传输的信号,同时也将通信介质上传输过来的信号转换为计算机可以识别的数据。
  • 通信介质:用于计算机之间传输数据的物理通道。常见的通信介质有双绞线、同轴电缆、光纤和无线通信介质(如无线电波、微波、卫星通信等)。双绞线成本低、安装方便,适用于短距离传输;光纤传输速率高、抗干扰能力强,适用于长距离高速传输;无线通信介质则让计算机可以在一定范围内自由移动,实现无线网络连接。
  • 网络互联设备:用于连接不同网络或网络段的设备。常见的有中继器、网桥、路由器和网关。中继器用于延长通信线路的长度,它对传输信号进行放大和整形,以克服信号在传输过程中的衰减;网桥用于连接两个相似的网络,它根据数据帧的地址信息进行转发,实现不同网络段之间的通信;路由器用于连接多个不同类型的网络,它根据数据包的目的地址选择合适的路径进行转发,是网络层的互联设备;网关用于连接不同体系结构的网络,它在不同网络协议、数据格式或通信环境之间进行转换,是应用层的互联设备。

软件部分

  • 网络操作系统:是计算机网络的核心软件,它为网络用户提供统一的网络资源管理和通信服务。常见的网络操作系统有Windows Server系列、Linux、Unix等。网络操作系统负责管理网络中的各种资源,如文件、打印机、通信线路等,同时提供用户界面,让用户能够方便地访问网络资源和进行网络通信。
  • 网络通信协议:是网络中计算机之间进行通信的规则和约定。它规定了数据的格式、传输顺序、传输速率、错误检测和纠正等。网络通信协议分为多个层次,如物理层协议、数据链路层协议、网络层协议、传输层协议和应用层协议等。例如,TCP/IP协议是目前互联网上最常用的通信协议,它包括传输控制协议(TCP)和网际协议(IP)等,用于实现计算机之间的可靠通信和数据传输。
  • 网络管理软件:用于对网络进行管理和维护。它可以帮助网络管理员监控网络的运行状态,配置网络设备,管理网络用户,维护网络安全等。例如,网络监控软件可以实时监测网络流量、设备状态等信息,及时发现网络故障并进行报警;网络配置管理软件可以方便地对网络设备进行配置和升级;网络安全管理软件可以防止网络攻击、保护网络数据的安全等。

功能

  • 资源共享:计算机网络能够将网络中的各种资源,如硬件资源(计算机、打印机、扫描仪等)、软件资源(应用程序、数据库等)和数据资源(文件、文档等)进行共享。例如,一个公司内部的多台计算机可以通过网络共享一台打印机,而无需每台计算机都配备一台打印机,这样可以节省成本,提高资源的利用率。
  • 数据通信:计算机网络可以实现计算机之间的数据通信,包括文本、图像、音频、视频等各种类型的数据传输。例如,通过电子邮件、即时通讯工具等可以在不同地理位置的用户之间快速地传递信息;企业内部的各个部门可以通过网络进行数据的上传和下载,实现信息的共享和协同工作。
  • 分布式处理:计算机网络可以将复杂的任务分解为多个子任务,分配给网络中的多台计算机同时进行处理,从而提高任务的处理速度和效率。例如,在分布式计算系统中,一个大型的科学计算任务可以被分解为多个小任务,分别在不同的计算机上进行计算,最后将计算结果汇总起来得到最终结果。这种方式可以充分利用网络中的计算资源,解决单台计算机难以完成的复杂任务。
  • 提高可靠性:计算机网络可以通过冗余设计和备份机制提高系统的可靠性。例如,网络中的数据可以存储在多个服务器上,当其中一台服务器出现故障时,其他服务器可以继续提供数据服务,从而保证网络系统的正常运行。同时,网络中的设备和通信线路也可以采用冗余配置,当出现故障时可以自动切换到备用设备或线路,减少网络中断的时间。

分类

按地理范围划分

  • 局域网(LAN):覆盖范围较小,通常在几公里以内,如一个办公室、一个学校或一个企业内部。局域网的传输速率较高,一般在10Mbps到1000Mbps之间,甚至更高。它的主要特点是连接距离短、延迟小、数据传输速率高、误码率低。例如,一个企业的内部办公网络就是一个典型的局域网,员工可以通过这个网络共享文件、打印机等资源,进行日常工作。
  • 城域网(MAN):覆盖范围比局域网大,通常是一个城市或一个地区的范围。城域网的传输速率介于局域网和广域网之间,它主要用于连接城市内的多个局域网,实现城市范围内的资源共享和通信。例如,一个城市的多个企业、学校和政府部门可以通过城域网进行数据交换和资源共享。
  • 广域网(WAN):覆盖范围最广,可以跨越一个国家、一个洲甚至全球。广域网的传输速率相对较低,但覆盖范围广,它主要用于连接不同地区的局域网或城域网。例如,互联网就是一个典型的广域网,它将全球范围内的计算机连接在一起,使人们可以访问世界各地的信息资源。

按拓扑结构划分

  • 总线型拓扑:所有计算机都连接到一条共享的通信总线上,总线是网络的通信介质。总线型拓扑结构简单,易于安装和维护,成本较低。但是,当网络中的计算机数量较多时,总线上的冲突会增加,导致网络性能下降。例如,在早期的一些小型局域网中,可能会采用总线型拓扑结构。
  • 星型拓扑:所有计算机都通过单独的通信线路连接到一个中心节点(如交换机或集线器)上。星型拓扑结构的优点是易于管理和维护,当某个节点出现故障时,不会影响其他节点的通信。但是,中心节点的负担较重,如果中心节点出现故障,整个网络将瘫痪。例如,许多企业内部的办公网络采用星型拓扑结构,通过交换机将各个办公室的计算机连接在一起。
  • 环型拓扑:网络中的计算机通过通信线路首尾相连,形成一个闭合的环。环型拓扑结构的优点是数据传输延迟固定,适用于实时性要求较高的应用。但是,环型拓扑结构的可靠性较低,当环上的某个节点或通信线路出现故障时,整个环将中断。例如,一些工业控制系统可能会采用环型拓扑结构,以保证数据的实时传输。
  • 树型拓扑:是一种分层的拓扑结构,它由多个层次的节点组成,每个节点可以有多个分支。树型拓扑结构的优点是易于扩展和管理,适用于大型网络。例如,一个大型企业的网络可能会采用树型拓扑结构,将各个部门的网络连接在一起,形成一个层次化的网络结构。
  • 网状拓扑:网络中的计算机之间通过多条通信线路相互连接,形成一个复杂的网络结构。网状拓扑结构的优点是可靠性高,当某个节点或通信线路出现故障时,数据可以通过其他路径进行传输。但是,网状拓扑结构的复杂度较高,成本也较高。例如,互联网的骨干网络采用网状拓扑结构,以保证网络的高可靠性。

计算机网络之OSI模型

OSI模型是一个网络通信的概念模型,用于描述计算机网络中各个不同层次之间的通信和功能。它将网络通信分为七个不同的层次,每个层次负责不同的任务,使得网络通信的设计、开发和管理更加模块化和可维护。以下是OSI模型的七个层次以及它们的主要功能:

物理层(Physical Layer)

功能:处理物理传输介质上的原始比特流,确保数据在传输媒体上能够以适当的方式传输。大白话就是将数据转换为二进制,方便通过线缆进行传输。

功能:

  • 把上层数据进行转换为帧(对数据进行处理加工)

  • 这一层加工数据时,还增加了MAC地址

网络层(Network Layer)

功能:

  • 负责将数据从源地址传输到目的地址(IP)

  • 主要作用就是路由(指路)和寻址(根据ip地址找人)

  • 用于指定源ip和目标ip

传输层(Transport Layer)

功能:提供端到端的数据传输服务,并且控制了数据传输方式是否可靠,且指定了端口号

  • 可靠的传输:TCP

  • 不可靠的传输:UDP

会话层(Session Layer)

功能:管理会话的建立、维护和结束

表示层(Presentation Layer)

功能:负责数据格式的转换、加密、解密等工作

应用层(Application Layer):

功能:为用户提供网络应用服务,包括文件传输、电子邮件、网页浏览等服务。

大部分软件、服务都运行在应用层中,暴漏很多接口,提供给其它服务软件使用,主要就是提供应用程序可以接入网络的接口,并根据程序不同提供对应不同的接口,这一层提供了http、https、ssh、ftp、dns等协议。

TCP和UDP协议

上文提到了TCP协议和UDP协议,这里重点讲述一下。

TCP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。

TCP数据包结构图

  1. 序号:Seq(Sequence Number)序号占32位,用来标识从计算机A发送到计算机B的数据包的序号,计算机发送数据时对此进行标记

  2. 确认号:Ack(Acknowledge Number)确认号占32位,客户端和服务端都可以发送,Ack = Seq + 1。

  3. 标志位:每个指针占用一个Bit,共有6个,分别为URG、ACK、PSH、RST、SYN、FIN,具体含义如下

    • URG:紧急指针(ungent pointer)有效
    • ACK:确认序号有效(Acknowledge,确认)。
    • PSH:接收方应该尽快将这个报文交给应用层。
    • RST:重置连接。
    • SYN:建立一个新连接(建立一个新的同步连接)。
    • FIN:断开一个连接 (Finish,表示完成)

TCP协议特点

面向连接

TCP协议在数据传输之前需要建立一个可靠的连接。建立连接的过程称为"三次握手",而关闭连接的过程称为"四次挥手"。这种面向连接的特性使得TCP协议能够提供可靠的传输服务。例如,在文件传输过程中,TCP协议通过建立连接确保数据能够可靠地传输,而不会出现数据丢失或损坏的情况。

建立连接-三次握手

通过抓包工具可以捕捉到TCP建立连接的过程

流程大概就是:

  1. 客户端发起建立连接请求,SYN(标记建立连接请求),发出seq的随机数,从图中可以看到seq为0
  2. 服务端收到客户端请求,并向客户端发出SYN、ACK(确认标记),以及seq(图中是0)、ack=seq+1(图中为1)
  3. 客户端收到服务端请求,并向服务端发出ACK标记以及seq(这里的seq是第二步的ack)和ack(这里的ack是第二步的seq+1)
  4. 到此为止,客户端与服务端建立连接,开始传输相关数据

记忆口诀:一问一答一确认

断开连接-四次挥手

流程大概是:

  1. 客户端向服务端发起断开请求,携带FIN、ACK标记,以及seq和ack
  2. 服务端收到请求,向客户端发出ACK确认请求
  3. 这里服务端会向客户端传输未传输完成的数据,当数据传输完成之后,服务端向客户端发起断开连接请求,携带FIN、PSH、ACK标记,并携带seq和ack
  4. 客户端收到服务端请求,并向服务端发出ACK确认请求,到此连接断开

记忆口诀:两问两答

可靠传输

TCP协议通过一系列机制(如确认应答、超时重传、滑动窗口等)确保数据的可靠传输。TCP协议会对接收方收到的数据进行确认,如果发送方没有收到确认应答,会自动重传数据。此外,TCP协议还会对数据进行排序,确保数据按照发送顺序到达接收方。例如,在网页浏览过程中,TCP协议能够确保网页数据完整地传输到浏览器,不会出现部分内容丢失或损坏的情况。

基于字节流

TCP协议将数据视为一个连续的字节流,而不是像UDP协议那样以数据报的形式传输数据。TCP协议会自动对数据进行拆分和重组,确保数据的完整性。例如,在文件传输过程中,TCP协议会将文件数据拆分成多个TCP段进行传输,接收方收到后会按照顺序重新组装成完整的文件。

UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、简单的、不可靠传输层协议,广泛应用于计算机网络中

UDP协议数据包结构图

UDP协议特点

无连接

UDP在数据传输之前不需要建立连接。发送方可以随时发送数据报,而接收方也可以随时接收数据报。这种方式的优点是简单高效,减少了建立和维护连接的开销,但缺点是没有连接的可靠性保证。例如,在一些对实时性要求较高但对数据完整性要求不高的应用场景(如在线视频直播),UDP的无连接特性可以快速地发送数据,即使偶尔丢失一些数据也不会对整体效果产生太大影响。

不可靠传输

UDP不保证数据报的可靠传输。它不会对发送的数据报进行排序、确认或重传。如果数据报在传输过程中丢失或损坏,UDP不会进行自动修复或重新发送。这种不可靠性使得UDP的传输速度相对较快,但同时也要求应用层程序自行处理数据的可靠性问题。例如,在一些简单的查询服务中(如DNS查询),UDP的不可靠性是可以接受的,因为即使查询请求丢失,客户端可以重新发送请求。

面向数据报

UDP以数据报的形式传输数据。每个UDP数据报都有一个独立的报头,包含源端口、目的端口、数据报长度和校验和等信息。UDP不对数据报进行拆分或合并,而是将应用层提交的数据作为一个完整的数据报发送出去。这种方式使得UDP能够快速地传输数据,但也要求应用层程序自行处理数据报的大小和边界问题。例如,如果应用层提交的数据报过大,可能会导致IP层的分片和重组,从而增加传输延迟。

支持多播和广播

UDP不仅支持一对一的单播通信,还支持一对多的多播和广播通信。多播是指将数据发送到多个特定的接收者,而广播是指将数据发送到网络中的所有设备。这种特性使得UDP在多媒体会议、网络视频直播等应用场景中非常有用。例如,在一个多媒体会议中,主持人可以通过UDP多播将视频数据同时发送给多个参会者,而无需分别建立多个连接。

TCP协议和UDP协议区别

特性 UDP协议 TCP协议
连接类型 无连接 面向连接
可靠性 不可靠 可靠
传输速度 相对较慢
数据传输单位 数据报 字节流
支持通信类型 单播、多播、广播 单播
应用场景 实时性要求高、简单查询服务、多播和广播应用 文件传输、网页浏览、邮件传输等

DNS协议

DNS(Domain Name System,域名系统)是互联网中用于将域名和IP地址相互映射的一个分布式数据库系统。它为用户提供了一种易于记忆和使用的域名,而计算机网络则通过IP地址进行通信。DNS在互联网中扮演着至关重要的角色,使得用户可以通过域名访问网站和服务,而无需记住复杂的IP地址。例如www.baidu.com就是一个域名。

DNS作用

域名解析

DNS最主要也是最重要的功能就是将域名解析为对应的IP地址,例如将www.example.com解析为193.184.216.34,以便于计算机可以通过IP地址访问目标服务器

负载均衡

通过DNS可以实现对多个服务器的负载均衡,例如一个域名可以映射多个IP地址,DNS可以根据配置策略(如轮询、地理位置)将用户的请求分配到不通的服务器上,从而提供服务的可用性和性能

故障转移

当某个服务器出现故障时,DNS可以自动将流量重定向到备用服务器,从而实现故障转移,提高系统的可靠性

DNS解析流程

DNS的解析流程也就是通过域名找到IP地址的过程

详解

  • 查找本地DNS缓存,是否存在该域名对应的IP地址
  • 查找系统的hosts文件,是否配置该域名对应的IP地址
  • 访问本地的DNS服务器,询问是否知晓该域名对应的IP地址
  • 本地DNS服务器访问根DNS服务器,但是根DNS只有顶级域名的记录,根DNS服务器告诉我们.cn或者.com的顶级域的DNS地址
  • 本地DNS服务器访问顶级域DNS是否知晓域名对应的IP地址,顶级DNS服务器返回nameserver(二级)DNS服务器地址
  • 本地DNS服务器访问nameServer DNS服务器发起请求,nameServer DNS服务器返回域名对应的IP地址,IP返回给本地的DNS服务器
  • 本地DNS把域名和IP的对应关系交给浏览器/命令行

补充:域名结构图

下图是相关的域名结构图,域名主要分为根域名、顶级域名(.com、.cn都是属于顶级域名)、二级域名、三级域名、四级域名...等,一般我们都是采用三级或者四级域名,例如www.jd.com就是一个三级域名

查看DNS解析的命令

DNS相关故障

  • Linux无法上网
  • 通过域名访问:ping域名、dig解析域名时报错
  • ping 公网IP可以访问

用户访问网站简单过程

有了上面内容的铺垫,我们这里可以简单说一下用户访问网站的过程,但是实际上过程比这个更为复杂,在这里就当了解一下

流程详解:

  • 客户端发出请求

  • DNS解析域名,获取实际IP地址

    • 访问本地DNS缓存和hosts配置文件
    • 访问本地DNS服务器
    • 本地DNS服务器访问根DNS服务器,获取到顶级域
    • 本地DNS服务器访问顶级DNS服务器,获取到二级域
    • 本地DNS服务器访问二级域名,获取到IP地址
    • 返回本地DNS缓存,再给到用户
  • TCP三次握手,通过IP+端口建立连接

    • 客户端向服务端发起SYN请求,携带seq随机数
    • 服务端向客户端发起ACK、SYN建立连接,携带seq随机数和ack(seq+1)
    • 客户端向服务端发起ACK确认标记
    • 建立连接
  • 服务器处理用户的请求

  • 服务器发出http响应,返回给客户端

  • TCP四次挥手,端口连接

    • 服务端-->客户端:发出断开连接请求FIN,ack,seq
    • 客户端-->服务端:发出ACK确认,ack,seq
    • 客户端-->服务端:发出FIN断开连接请求,ack,seq
    • 服务端-->客户端,发出ACK确认,ack,seq
    • 连接断开