【计算机网络】计算机网络中的基本概念

文章目录

网络互连就是将多台计算机连接在一起,完成数据共享。数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网。

局域网LAN

局域网,即 Local Area Network,简称LAN。Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。局域网组建网络的方式有很多种:

基于网线直连

基于集线器组建

基于交换机组建

基于交换机和路由器组建

广域网WAN

广域网,即 Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

IP地址

IP地址用于定位主机的网络地址。也就是说IP地址描述了一个设备在网络上的地址。IP地址是一个32位的二进制数,通常被分割为4个"8位二进制数"(也就是4个字节)如:01100100.00000100.00000101.00000110。通常用"点分十进制"的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

127.* 的IP地址用于本机环回(loop back)测试,通常是127.0.0.1本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

端口号

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程,也就是区分不同的应用程序。端口号是0~65535范围的数字(两个字节)。

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号 。

协议

协议是网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定和规则。如:怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。通常由三要素组成:

①语法:即数据与控制信息的结构或格式

类似打电话时,双方要使用同样的语言:普通话

②语义:即需要发出何种控制信息,完成何种动作以及做出何种响应

语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。类似打电话时,说话的内容。

③时序:即事件实现顺序的详细说明

时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输。

协议(protocol)最终体现为在网络上传输的数据包的格式

为什么要有协议

计算机之间的传输媒介是光信号和电信号 。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。计算机生产厂商有很多;计算机操作系统,也有很多;计算机网络硬件设备,还是有很多;如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是网络协议

知名协议的默认端口

系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如:

22端口:预留给SSH服务器绑定SSH协议

21端口:预留给FTP服务器绑定FTP协议

23端口:预留给Telnet服务器绑定Telnet协议

80端口:预留给HTTP服务器绑定HTTP协议

443端口:预留给HTTPS服务器绑定HTTPS协议

注意:以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~65535 范围内的端口来绑定知名协议。就像餐厅的VIP包房是给会员使用,但会员也可以不坐包房。

五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

源IP:标识源主机

源端口号:标识源主机中该次通信发送数据的进程

目的IP:标识目的主机

目的端口号:标识目的主机中该次通信接收数据的进程

协议号:标识发送进程和接收进程双方约定的数据格式

协议分层

协议分层就像我们平时写代码一样,代码越写越多越写越复杂,这个时候就需要把代码拆成多个部分,这样可以使人更容易理解。

网络通信的场景非常复杂,有很多问题就需要协议来解决,如果搞一个大的协议去解决,这样就很庞大很复杂,不容易让人们去学习和理解。但是如果把大的协议拆成小的,这样每个小的协议就不会很复杂。也更容易让人们学习理解。

按照协议的作用和定位我们约定不同的层次之间的调用关系"上层协议调用下层协议 ","下次协议给上层协议提供支持",这样协议之间就不容易混乱。

协议分层之后,上层和下层之间就进行了封装,使用上层协议不必过多关注下层协议,使用下次协议也不必过多关注上层协议

TCP/IP五层模型

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。

传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。

网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。

数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。

物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层 。

网络设备所在分层

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也就是TCP/IP五层模型的下四层
  • 对于一台路由器,它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层
  • 对于一台交换机,它实现了从数据链路层到物理层,也就是TCP/IP五层模型的下两层
  • 对于集线器,它只实现了物理层

封装和分用

封装和分用描述了网络通信过程中,基本的数据传输流程。

比如我们举一个例子:

如果小明要通过QQ把hello发送给小张。

对于小明(发送方)

1.应用层

QQ这个应用程序会把hello打包成一个应用层的数据报(数据报的格式只有写QQ的人才知道),我们假设是这样的:源qq,目的qq,发送时间,发送内容

12234125,52143221,2023-11-01 21:30:00,hello

就可以把应用层数据报通过操作系统的api把数据发送给传输层。

2.传输层

传输层需要对刚才的应用层数据再进行打包,变成传输层的数据报,这里打包本质上是字符串的拼接(传输层的典型协议TCP、UDP),把刚才的应用层数据在基础上拼接上传输层的报头(一个数据报=报头+载荷)

UDP报头+UDP载荷(12234125,52143221,2023-11-01 21:30:00,hello)

UDP报头是二进制的数据其中最关键的是源端口和目的端口,传输层数据处理好之后,这个数据又会交给网络层。

3.网络层

网络层最主要的协议是IP协议

IP报头+IP载荷(UDP报头+UDP载荷(12234125,52143221,2023-11-01 21:30:00,hello))

IP报头里也包含了很多的属性,其中最重要的源IP和目的IP,网络层数据打包好之后会交给数据链路层。

4.数据链路层

数据链路层也就是以太网

以太网报头+以太网载荷(IP报头+IP载荷(UDP报头+UDP载荷(12234125,52143221,2023-11-01 21:30:00,hello)))+以太网报尾

以太网报头中最重要的信息是源mac地址和目的mac地址(描述一个设备在网络上的地址),以太网数据报处理好后会继续传递给物理层。

5.物理层

物理层就会把传过来的以太网数据转换成二进制的0和1序列,通过光/电信号进行传输。

从上层协议到下层协议每一层都给数据报添加报头,我们把这个过程称为封装。

数据发送出去后,会经过一系列的交换机和路由器的转发,当小明发送的数据到达后小张这边后,小张这边就要针对发送过来的数据进行分用(对数据进行解析)

对于小张(接受方)

1.物理层

拿到光/电信号 => 转换成二进制 => 得到以太网的数据报,然后这个数据报还要交给数据链路层进行对应的协议处理。

2.数据链路层

以太网报头+以太网载荷(IP报头+IP载荷(UDP报头+UDP载荷(12234125,52143221,2023-11-01 21:30:00,hello)))+以太网报尾

通过以太网协议针对以太网数据报进行解析,这个解析过程就会解析出报头、荷载和报尾,然后再进一步把载荷交给网络层的协议来处理。

3.网络层

IP报头+IP载荷(UDP报头+UDP载荷(12234125,52143221,2023-11-01 21:30:00,hello))

IP协议再进一步针对网络层数据报进行解析得到报头和载荷,然后会把荷载传递给传输层。

4.传输层

UDP报头+UDP载荷(12234125,52143221,2023-11-01 21:30:00,hello)

这里使用UDP协议针对这个数据报进行解析,拿到载荷,把载荷交给应用层,这里会根据端口号来区分交给哪个应用程序。

5.应用层

12234125,52143221,2023-11-01 21:30:00,hello

上述数据根据端口号,会交给QQ,QQ会进一步解析这里的数据,这里的解析就是按照写QQ的人自定义的协议来展开的,最后得到hello。

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5