目录
计算机网络背景
独立模式: 计算机之间相互独立;
网络互联: 多台计算机连接在一起, 完成数据共享;
- 局域网(LAN),计算机数量更多了, 通过交换机和路由器连接在一起:
-
- 局域网是指在一个相对较小的地理范围内建立的网络,通常限制在一个建筑物、校园或办公室内部。
- 设备在局域网中可以直接互相通信,通常使用以太网或Wi-Fi等协议和技术。
- 局域网的速度通常很高,延迟较低,适用于需要高带宽和快速数据传输的应用。
- 广域网(WAN):
-
- 广域网是指在较大的地理范围内连接多个局域网,可能覆盖城市、国家甚至全球。
- 在广域网中,通过公共或专用的通信线路,如光纤、电缆、卫星或无线连接,实现远程地点之间的数据传输。
- 由于广域网涉及更大的地理范围,通信延迟可能相对较高,而带宽和传输速度可能受到限制。
总体而言,局域网主要用于相对较小的范围,例如家庭、办公室或校园内部,而广域网用于连接更大范围内的地理位置,使得远距离的设备和网络可以进行通信。
交换机和路由器是在局域网和广域网之间建立连接的关键设备。
- 交换机(Switch): 在局域网或者广域网内部,交换机起着重要作用。它们负责内部设备(如计算机、服务器、打印机)之间的通信。通过交换机,数据可以在局域网内的不同设备之间进行快速、可靠的传输,而无需向所有设备广播信息。
- 路由器(Router): 路由器则承担连接不同网络(如局域网与互联网之间)的责任。它具有识别不同网络和在它们之间传递数据的能力。路由器能够查看数据包的目标地址,并根据其目标确定最佳路径将数据包从源网络传输到目标网络。
认识协议
"协议" 就是一种约定,协议在计算机科学和网络领域通常指的是一种规范或约定,用于定义数据通信和交换的规则。协议确定了通信双方在数据传输过程中应该遵循的标准化规则和格式。
具体而言,协议包括了以下几个方面:
- 语法: 定义了数据的结构和格式,包括数据的各个部分如何排列、组织以及表示。
- 语义: 描述了数据的含义,即数据在不同情境下的解释和理解方式。语义规定了数据的具体含义和操作。
- 同步: 规定了数据传输的时序,确保通信双方能够正确地解释和处理接收到的数据。
协议在网络通信中起着至关重要的作用,因为它们确保了不同设备和系统之间能够有效地交换信息。常见的网络协议包括:
- TCP/IP协议: 用于互联网上的数据传输,包括TCP(传输控制协议)和IP(互联网协议)等子协议。
- HTTP(超文本传输协议): 用于在Web浏览器和Web服务器之间传输超文本文档的协议。
- SMTP(简单邮件传输协议): 用于在邮件客户端和邮件服务器之间传输电子邮件的协议。
- FTP(文件传输协议): 用于在客户端和服务器之间传输文件的协议。
通过使用这些协议,不同厂商、不同平台上的设备可以遵循相同的规则进行通信,实现互操作性和数据的可靠传输。
网络协议认识
网络协议的诞生主要是为了解决计算机和设备之间的通信问题。以下是一些导致网络协议诞生的主要原因:
- 设备互联: 随着计算机技术的发展,人们希望能够将不同的计算机和设备连接在一起,以便实现数据和信息的共享。为了有效地进行通信,需要一种标准化的方式来传输和解释数据。
- 资源共享: 在早期计算机系统中,硬件资源非常昂贵。通过网络协议,用户可以共享远程计算机上的资源,例如打印机、存储器等,从而提高资源的利用率。
- 远程访问: 随着计算机和服务器的分布式部署,人们希望能够从一个地方访问另一个地方的计算资源。网络协议使得远程访问变得可能,使用户能够在远程计算机上执行任务。
- 信息传递: 随着信息的不断增长,人们需要一种高效的方式来传递和共享信息。网络协议提供了一种标准化的方法,确保信息能够被准确、可靠地传输。
- 商业需求: 随着企业和组织规模的扩大,需要一种能够支持大规模通信和协作的技术。网络协议的诞生促进了商业间的信息流和合作。
- 科研和军事需求: 在军事和科研领域,需要高效的通信来支持实时数据传输、指挥控制和科学实验。网络协议的发展满足了这些需求。
- 技术发展: 随着计算机和通信技术的不断发展,出现了更多种类的设备和系统。网络协议的诞生和演进使得这些设备能够协同工作,形成了全球范围内的互联网络。
协议分层
如下打电话例子:
在这个例子中, 我们的协议只有两层; 但是实际的网络通信会更加复杂, 需要分更多的层次,分层最大的好处在于 "封装" . 面向对象例子。软件分层之后的好处,每一层都只关注自己同层的功能,只使用下层的接口,任何一层出现问题,都不会直接影响到另外一层,减少后期开发者的维护成本。也就是俗称的高内聚,低耦合。
OSI七层模型:
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七
个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解
OSI 模型:
- 应用层(Application Layer): 提供用户接口和网络服务,包括应用程序和用户之间的通信。
- 表示层(Presentation Layer): 处理数据的格式、加密和压缩。
- 会话层(Session Layer): 管理会话(会话的建立、维护和结束)。
- 传输层(Transport Layer): 提供端到端的通信,负责可靠的数据传输和流控制。
- 网络层(Network Layer): 处理数据包的路由和转发,通过逻辑地址(IP地址)标识设备。
- 数据链路层(Data Link Layer): 提供数据包的可靠传输,通过物理地址(MAC地址)标识设备。
- 物理层(Physical Layer): 负责传输比特流,处理物理媒体、电压和信号等。
TCP/IP 五层(或四层)模型:
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
- 链路层(Link Layer): 与OSI的物理层和数据链路层相当。(负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。)
- 网络层(Internet Layer): 与OSI的网络层相当,负责数据包的路由和转发。(负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层)
- 传输层(Transport Layer): 与OSI的传输层相当,提供端到端的通信。(负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机)
- 应用层(Application Layer): 与OSI的应用层、表示层、会话层,三层结合相当,也就是说这三层合起来就叫做应用层,提供用户接口和网络服务。(负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层)
每个层次负责特定的功能,而上一层使用下一层提供的服务。这种分层的结构使得修改或扩展网络变得更加容易,同时也支持不同厂商和组织开发独立的协议,从而促进了互操作性。协议分层的概念是计算机网络设计的基石,它在实际应用中帮助实现了各种网络服务和应用。
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型。
一般而言:
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器, 它实现了从网络层到物理层;
对于一台交换机, 它实现了从数据链路层到物理层;
对于集线器, 它只实现了物理层;
但是并不绝对,很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
协议为什么要设计成为层状的?
设计协议为层状结构的主要原因之一是为了解决长距离传输时面临的不同种类的问题,并确保系统的灵活性、可维护性和互操作性:
- 模块化设计: 将通信协议分成不同的层次,每个层次负责特定的功能,使整个系统更易于理解和设计。这种模块化设计使得系统的不同部分可以独立开发、测试和维护,从而提高了系统的可维护性。
- 可维护性: 层状结构使得对系统进行修改或升级变得更加容易。如果需要引入新的功能或改变某一层的实现,可以在不影响其他层次的情况下进行。这降低了系统的维护成本。
- 互操作性: 不同的组织和厂商可以独立地开发符合相同协议层次结构的实现,从而实现互操作性。这种设计模式促进了不同设备和系统之间的互通,推动了技术的发展和创新。
- 标准化: 每个协议层次的功能和接口都可以被明确定义,并且可以制定标准来确保一致性。标准化有助于提高设备和系统的互通性,推动了产业的标准化发展。
- 灵活性: 层状结构提供了灵活性,允许在不同层次上使用不同的技术和协议。这使得系统可以根据特定的需求和应用选择最合适的协议和技术,而不必修改整个系统。
- 问题定位: 如果出现问题,层状结构有助于快速定位问题的来源。每个层次都有特定的功能,因此问题可以被局限在特定的层次,而不会影响整个系统。
网络传输基本流程
1.同一个局域网的两台机器,可用直接进行通信吗?可以的!两个主机通信的本质,是两个主机的OS与网络协议栈在进行通信,同一个网段内的两台主机进行文件传输。
简单描述一个局域网内的通信原理例子:在一个教室里,当老师喊的人就站起来,比如说,老师喊道 "张三" ,其他人发现喊道的不是自己,所以就不进行理会丢弃了这份数据(这就是碰撞的原理),而有一个人对比了一下,喊道的就是自己的名字就站起来和老师进行对话(通信)。
- 老师喊名字: 老师喊出一个学生的名字,比如 "张三",就像网络中的一个设备试图发送数据一样。这相当于一个设备试图在网络上发送数据。
- 学生站起来: 如果有多个学生(设备)都听到了老师的喊声(数据传输),那么所有的学生都会试着进行对比,就像多个设备在同一时间尝试发送数据,导致碰撞。
- 发现不是自己的名字: 在真实的网络中,设备在发送数据之前会监听媒体,就像学生在老师喊名字之前会先听。如果一个学生发现老师喊的不是自己的名字(检测数据是不是发送给自己的),那么其他学生会放弃站起来,就像其他设备会暂时放弃发送数据以避免碰撞。
- 对比确认: 然而,有一个学生(设备)可能对比了一下,发现老师喊的是自己的名字(媒体上没有冲突),那么这个学生就会站起来和老师进行对话,就像一个设备在冲突检测后确认没有碰撞就发送数据。
2.跨网段的主机的文件传输(指的是不同的局域网的两个子网或者多个子网进行文件传输),数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
跨网段通信(使用路由器和交换机)的例子:
- 两个教室代表两个不同的子网: 假设教室A和教室B分别代表两个不同的网络子网。
- 学生在不同的教室: 学生A在教室A,学生B在教室B,分别代表两个不同的设备,两个设备位于不同的网络子网。
- 数据从学生A到学生B: 如果学生A想要传递一张纸给学生B,他将纸递给教室A的老师(交换机)。然后,老师知道这个纸要传递到教室B,就会将纸递给走廊上的校长(路由器)。
- 路由器的决策: 路由器知道如何将数据从一个子网传递到另一个子网,就像校长知道如何将纸从一个教室的走廊传递到另一个教室的走廊。路由器检查目标子网B,并将数据包传递到教室B的老师(交换机)。
- 交换机将数据传递给学生B: 教室B的老师(交换机)知道学生B在哪里,就会将纸递给学生B。
这个例子强调了交换机在同一子网内直接设备通信的作用,而路由器则用于跨越不同子网的通信,通过智能的决策将数据从一个子网传递到另一个子网。
所谓的路由是什么意思?
路由是指确定网络中数据包从源到目的地的路径的过程。在计算机网络中,路由是一种将数据从源主机传递到目标主机的机制。路由器是执行路由功能的设备,它根据网络上的路由表来决定数据包的转发路径。
举个例子来说明路由的过程:
假设有一台计算机A想要向另一台计算机B发送数据包,它们位于不同的子网中。这两个子网之间有一个路由器R。以下是路由的过程:
- 计算机A生成数据包: 当计算机A要发送数据到计算机B时,它首先生成一个数据包,其中包含目标IP地址(计算机B的IP地址)。
- 数据包到达路由器R: 计算机A将数据包发送到本地网络,由本地路由器R接收。
- 路由器R查找路由表: 路由器R查找它的路由表,这是一个记录了网络拓扑结构和最佳路径信息的表格。路由器R会检查目标IP地址,并找到到达该地址的最佳路径。
- 选择最佳路径: 路由器R根据路由表选择最佳路径,这可能涉及到多个中间路由器。路由器R将数据包转发到下一个路由器,沿着选定的路径。
- 数据包到达目标网络: 数据包逐步通过多个路由器,最终到达目标网络。
- 数据包到达计算机B: 数据包到达计算机B所在的子网,然后被交付到计算机B。
这个过程描述了数据包从源到目的地的路由路径。路由器的路由表的更新和维护是网络中的关键任务,以确保数据包以最有效的方式传递。路由协议,如OSPF(Open Shortest Path First)或BGP(Border Gateway Protocol),用于在网络中更新和维护路由表。
认识IP地址
IP协议有两个版本, IPv4和IPv6. 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
MAC地址
MAC地址(Media Access Control Address),是用于识别网络设备(如计算机、网络接口卡、路由器等)的唯一标识符。每个网络设备都有一个独特的MAC地址(一张网卡只有一个MAC地址),由48位二进制数表示,通常以十六进制形式表示。
MAC地址分为两部分:
- 厂商识别码(Organizationally Unique Identifier,OUI): 前24位(前6个十六进制数)是由IEEE(国际电工和电子工程师协会)分配给设备制造商的唯一标识码。这一部分标识了设备的制造商或供应商。
- 设备识别码: 后24位(后6个十六进制数)是由设备制造商自行分配的,用于唯一标识该设备。
MAC地址的常见格式是六组由冒号或连字符分隔的十六进制数,例如:00:1A:2B:3C:4D:5E。
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可
能会冲突; 也有些网卡支持用户配置mac地址)。
MAC地址在数据链路层(第二层)起着关键的作用,用于在局域网中唯一标识网络设备。它与IP地址不同,不是由网络层使用,而是在数据链路层和物理层的通信中使用。在以太网中,MAC地址用于在局域网中定位和识别设备,以确保数据包能够正确地从源设备传输到目标设备。
数据包封装和分用
1.不同的协议层对数据包有不同的称谓,在传输层(TCP)叫做数据段(segment),在网络层(IP)叫做数据报 (datagram),在链路层叫做数据帧(frame),在应用层叫做请求和响应。
2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装。
3.首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
4.数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。
下图为数组封装的过程:
下图为数据分用的过程: