初识计算机网络

(一).局域网和广域网

1.局域网

局域网,简称LAN。局域网内的所有主机可以相互进行网络通信,所以又被称为内网。如果一个局域网。

在进行组建网络的时候,我们需要可以用到的设备有交换机和路由器。

交换机可以将多台主机连接到一起,组成一个小型的局域网。路由器则可以将多个小型的局域网组建成一个更大的网络。

2.广域网

广域网,简称为WAN

通过多个路由器将多个局域网组建起来,在物理上组建成一个很大范围的网络,就形成了广域网。

广域网和局域网的区别主要是网络的覆盖范围,广域网的覆盖范围广,局域网的覆盖范围就小一点。事实上,广域网就相当于是一个大范围的局域网

(二).IP地址和端口号

1.IP地址

IP地址,用来表示网络主机,其他网络设备的的网络地址。

IP地址是由32位二进制数组成 ,通常被分割为4个"8位二进制数"

在前面介绍JDBC的时候,在创建DataSource往DataSource里面设置一些关键的属性,其中包含一个URL "jdbc"mysql://127.0.0.1 .........",其中127.0.0.1就是ip地址,用来标识网络一台设备所在的位置

例如:在买快递的时候,我们都会写一个收货地址,xx省xx市xx县xx小区,这就对应的是网络中的ip地址

2.端口号

端口号,用于区分一台主机上多个应用程序的

在一台主机上,可能有多个程序同时使用网络,这就需要通过端口号来确定具体是哪个程序

还是以买快递为例子,xx省xx市xx县xx小区,即使2精确到了小区,一个小区可能有几百个人,那么怎么才能确定出是你的快递?可以写,xx省xx市xx县xx小区xx单元xxx门牌号,这样就具体确定出是你的快递了

(三).协议

1.认识协议

当程序已经收到数据了,程序应当如何理解数据的含义?这就需要引入网络协议了。

网络协议,就是通信双方在 发送/接收 数据格式的约定。我这个数据怎么发,你收到就需要怎么解析

只有当多个主机都能认同并遵守同一套协议,此时的通信才是有意义的

2.五元组

在进行网络通信的过程中,会涉及到5个重要的参数

源IP:发送方的IP地址

源端口:发送方的端口

目的IP:接收方的IP地址

目的端口:接收方的端口

协议类型:通信过程中涉及到的协议

3.协议分成

(1).概念

对于网络通信的过程是非常复杂的,这也很容易想到。如果我设计一个协议,完成网络通信中方方面面的问题,那么肯定会使这个协议非常复杂。所以我们就需要将这个复杂的大协议进行拆分,拆分成若干个小的协议,但是一拆分会拆除几十个甚至上百个,那么我们就需要对这些协议进行分类。只有相邻两层协议之间可以进行交互,上层协议可以调用下层协议,下层协议可以给上层协议提供服务

这样做的目的有两个:

**①.封装。**上层的协议不需要了解下层协议的细节。通过上图可以看出,打电话的人,只需要会说话就行了,不需要理解电话机的工作原理。

**②.解耦。**封层之后,可以灵活的替换其中的某一层。对于整体的工作过程影响很小。通过上图可以看出,使用无线电进行通信和使用电话机进行通信是不会相互影响的

(2).具体分层

Ⅰ.OSI七层网络模型

这七层分层的体系,只是存在于教科书上,由于体系太复杂了,所以现代网络通信采用的是TCP/IP协议

Ⅱ.TCP/IP五层(四层)模型

对于到底是四层还是五层,只是说法上的差异,视角不同。如果是四层的话,会将数据链路层和物理层合并为物理层。这是因为,物理层通常都是和硬件相关的,如果物理层发生改变,那么对于数据链路层影响也是比较大的,即这两层的耦合程度高

物理层(硬件),物理层规定了网络通信中的一些硬件设施符合的要求,例如网线,wifi,光纤

数据链路层(网卡层),完成两个相邻设备之间如何进行通信的。通过网线,把电脑连接到路由器或者交换机上,此时,电脑和路由器或交换机就属于相邻设备

对于物理层和数据链路层,通常是设备驱动程序与网络接口

网络层(互联网层),完成两个任意设备之间是如何进行通信的,这两个设备可能隔着多个交换机和路由器

传输层,完成两个任意设备之间的通信,不考虑中间过程,只考虑起点和终点

网络层和传输层是由操作系统内核实现的,我们在写代码的时候,就是调用传输层给应用层的接口

应用层,当数据到达目的主机后,目的主机如何使用该数据,对于应用层来说,我们将来写的代码主要都是工作在应用层

通过一个例子来看,网络相当一个物流系统。假设我从网上要买一个锅

物理层就相当于在铺桥修路

数据链路层就相当于是货车司机或快递小哥,考虑的是点对点

网络层就相当于物流公司,决定包裹是通过哪条路径来进行运输的

传输层就相当于商家,商家只关心收件人,也就是我的信息

应用层就相当于当我收到锅之后我该如何进行使用

对于上图的TCP/IP分层模型,我们也可以叫做"TCP/IP协议栈",上层协议调用下层协议,下层协议调用底层协议

对于主机来说,工作的过程涉及到从物理层到应用层,通过应用程序来满足网络通信的需求

对于路由器来说,工作过程涉及到从物理层到网络层,主要用途是组建局域网,进行网络数据包的转发

对于交换机来说,工作过程涉及到从物理层到数据链路层,主要功能是对路由器的接口进行扩展,不需要考虑组网问题

4.网络数据通信的基本流程

假设我现在通过"微信",发送"hello world"给对方

这个过程分为发送前过程,中间过程,收到后过程,由于中间过程过于复杂,这里只讨论发送前过程和收到后过程

具体为一下步骤:

Ⅰ.发送前过程

①.应用程序获取到用户的输入,构造出一个应用层的数据包。这个应用层数据包就是一个"结构化数据",类似于C语言中的结构体。

发送数据的时候,将结构化的数据转换成字符串或者是二进制bit流(序列化)

接收数据的时候,将字符串或者是二进制bit流转换成结构化的数据(反序列化)

构造出一个应用层的数据包之后,就会遵行应用层协议(开发程序员自己定义的)

此处假设协议的格式为:

发送者的微信号,接收者的微信号,发送消息的时候,消息的正文

②.应用程序调用传输层提供的接口(socket api),把数据交给传输层。传输层拿到数据之后,构造出**"传输层数据包"**。在传输层中,最重要的两个协议为 TCP 和 UDP ,这里假设使用的是TCP

此时"传输层数据包"就相当于TCP数据包,TCP数据包=TCP报头+TCP载荷(应用层数据包)

在TCP报头中有很多TCP功能相关的属性,里面的属性非常多,当前阶段只需要知道里面包含了源端口和目的端口即可

TCP协议不会关心在载荷里面的内容是什么

同时在传输层报头中也会记录应用层中使用了哪个协议(把数据交给哪个应用程序)

③.传输层构造好数据之后,就会继续调用网络层的api,把传输层的数据包交给网络层。网络层继续进行处理,网络层中最重要的协议是IP协议,IP协议会继续对上述的数据包进行加工,拼上IP报头

此时IP数据包=IP报头+IP载荷(整个传输层的数据包) ,IP报头中包含的信息也很多,当前阶段只需要知道里面包含了源IP和目的IP即可。同时,IP报头中也会记录当前的传输层中使用的是哪个协议

④.IP协议继续调用数据链路层的api,把IP数据包交给数据链路层。数据链路层中核心协议为"以太网",以太网这个协议也会在网络层数据包的基础上进一步加工

以太网数据帧=帧头+载荷+帧尾

其实,数据包,数据帧,数据报,数据段。在日常工作中,不会明确区分这些概念。数据段是TCP用的,数据报是UDP用的,数据包是IP用的,数据帧是数据链路层用的

⑤.以太网将这样的数据交给硬件设备,例如网卡,网卡会把上述二进制数据,最终以光信号/电信号/电磁波信号传播出去

上过的过程称为**"封装"**

Ⅱ.收到后过程

①.数据到达接收方的网卡。然后网卡将光电信号还原成二进制"0101",然后把二进制数据交给数据链路层

②.数据链路层按照以太网协议进行解析,把报头和报尾取出来,剩下的载荷,继续网上传递给网络层

③.网络层拿到这个数据之后,按照IP协议的格式进行解析,再把载荷数据交给传输层

④.传输层拿到数据之后,按照TCP协议进行解析,取出载荷,交给应用层

⑤.微信应用程序,解析应用层数据,拿到关键信息,展示到界面上,给出提示

上述的过程称为**"分用"**

Ⅲ.中间过程

传输的中间过程,也是涉及到封装分用的。

对于交换机来说,只需要封装分用到数据链路层即可。主机的数据传给交换机,交换机收到之后,物理层解析,然后数据链路层解析(没有网络层),重新构造出新的以太网数据帧,发送给下一个设备,数据链路层中,得到的以太网数据帧的帧头,里面的信息就足够支持交换机进行下一步工作

对于路由器来说,只需要封装分用到数据链路层即可。主机的数据传给路由器,路由器收到之后,物理层解析,数据链路层解析,网络层解析(没有传输层),重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发

相关推荐
小程同学>o<1 小时前
Linux 应用层开发入门(二十五)| 网络编程
linux·网络·嵌入式软件·嵌入式应用层·应用层开发·linux应用层开发
忡黑梨2 小时前
eNSP_DHCP配置
c语言·网络·c++·python·算法·网络安全·智能路由器
YaBingSec2 小时前
玄机网络安全靶场:Jackson-databind 反序列化漏洞(CVE-2017-7525)
linux·网络·笔记·安全·web安全
TechWayfarer2 小时前
网络安全溯源实战:78.1%网络攻击来自境外,如何精准定位攻击源
网络·安全·web安全
ElevenS_it1882 小时前
日志在哪里找?分布式环境下日志采集断裂的5个排查路径
运维·网络·分布式
半壶清水2 小时前
ubuntu中部署开源交换机模拟器bmv2详细步骤
linux·运维·网络·网络协议·tcp/ip·ubuntu
爱吖吖吖a2 小时前
CSMA/CA(载波侦听多路访问/冲突避免)
网络·网络协议
minji...3 小时前
Linux 网络套接字编程(六)TCP的通信是全双工的,自定义协议的定制,序列化和反序列化
linux·运维·服务器·网络·c++
hhb_6183 小时前
Tcl脚本自动化运维实操落地案例详解
运维·网络·自动化