网络原理初识一>网络基本的概念, 网络如何转发

news/2024/12/14 15:23:06/

目录: 

一.网络基本的概念: 

二. 封装和分用 (网络转发):  



一.网络基本的概念: 

1..局域网 (LAN):

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


2.广域网 (WAN):

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


3.IP地址:

IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的⽹络地址。 就像我们发送快递⼀样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 


3.端⼝号:

概念 在⽹络通信中,IP地址⽤于标识主机⽹络地址,端⼝号可以标识主机中发送数据、接收数据的进程。 简单说:端⼝号⽤于定位主机中的具体进程。 类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。 格式 端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数 据。 


4.协议:

概念 协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵 从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能 相互通信交流。 协议(protocol)最终体现为在⽹络上传输的数据包的格式。(我们学习网络主要就是学习各种协议)   

协议分层:网络通信非常复杂,所以我们把一个大的协议拆分成若干个小的,功能单一的协议所以协议会分很多层,各自管好各自的功能,实现上层协议调用下层协议,下层协议为上层协议提供服务  

分层的好处:

类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。 在代码中,类似于定义好⼀个接口,⼀⽅为接口的实现类(提供⽅,提供服务),⼀⽅为接口的使用 类(使⽤⽅,使⽤服务): • 对于使⽤⽅来说,并不关⼼提供⽅是如何实现的,只需要使⽤接口即可 • 对于提供⽅来说,利⽤封装的特性,隐藏了实现的细节,只需要开放接口即可。


5.五元组

在TCP/IP协议中,用五元组来标识一个网络通信(实现一次网络通信离不开以下元组)

1. 源IP:标识源主机

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

3. 目的IP:标识目的主机

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

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


6. OSI七层模型:

OSI 七层⽹络模型是⼀个逻辑上的定义和规范:把⽹络从逻辑上分为了7层。 OSI 七层模型是⼀种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输; 

这一套分层只在教科书上,太复杂我们把它为TCP/IP五层(或四层)模型 


7.TCP/IP五层(或四层)模型:

具体解释: 

物理层:规定了网络通信一些硬件设施符合的要求 (网线,WiFi,光猫......) 

数据链路层:完成两个相邻节点设备之间如何通信的 (网线把电脑和路由器/交换机连接起来) 

网络层:两个任意设备之间如何通信 (之间可以隔着很多路由器和交换机) 

传输层:也是两个任意设备之间如何通信,但是不考虑中间隔着多少个设备 

应用层:Java程序员操作最多的层,关注怎么使用和应用程序直接相关。 


注:这里也可以把物理层和数据链路层看作一个整体,因为这两层都直接于硬件设备直接相关



2. 封装和分用:  

以下简述,实现一次网络通信的基本流程:通过QQ发一个简单的信息来叙述 


封装: 

第一步:应用层:

应用层获取用户输入,构造一个应用层数据包,这个应用层数据包就会遵守应用层的协议 (这个协议一般都是开发者自己自定义的)

数据包在发送和接收的时候,会涉及序列化,和反序列化;
序列化:把这个结构体的数据包,转化为字符串或者bit流的方式
(网络传输实际上就是0,1或者光电信号的方式传输) 


第二步传输层:

 应用程序调用传输层提供的API,把数据传输给传输层,传输层拿到数据后,构造传输层数据报,传输层主要协议TCP/UDP

注:数据报一般等于,报头+载荷

报头:该数据包的一些属性,比如TCP的端口,窗口大小等等。

载荷:拼接上的,一层的数据包 


第三步网络层: 

传输层继续调用网络层的API,把传输层的数据包交给网络层,网络层继续进行处理


第四步数据链路层: 

IP协议继续调用数据链路层的API,把网络层的数据包交给数据链路层,数据链路层核心协议“以太网”,以太网这个协议也会进一步加工无力网络层的数据包。 

 注意:以太网不光会加上以太网数据报头,还会加上一个帧尾  (帧==报) 


第五步物理层: 

以太网把数据交给网卡,网卡会把上述的二进制数据,以电信号或者电磁波方式发出去 


总结:从上层到下层,要调用下层的API,以上一层的数据包基础上,加上该层协议的报头,这就是封装 (这个封装和面向对象的封装不是一个意思



分用:

数据到达接收方主机,根据相邻层的协议逐层进行解析: 

步骤一物理层接收: 

数据到达接受对方的网卡,把光电信号还原成二进制,把二进制交给数据链路层 


步骤二数据链路层: 

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


步骤三网络层: 

网络层拿到数据后,根据IP协议进行解析,把IP报头去掉,剩下的载荷向上传给传输层 

 


步骤四传输层: 

传输层拿到数据后,根据TCP协议进行解析,把TCP报头去掉,剩下的载荷向上传给应用层 

 


步骤五应用层: 

QQ应用层程序解析,传来的数据,拿到关键信息展示到页面上 

 


总结:封装和分用,是完全相反的过程 




面试题:

路由器和交换机分别工作在哪一层? 


答:路由器工作在网络

原因:路由器收到数据之后,经过三层转发,网络层,物理层,数据链路层;分别构造:网络层数据包,以太网数据帧,二进制信号进行转发 

 

 

答:交换机工作在数据链路层 

原因:路由器收到数据之后,经过二次转发,物理层解析,数据链路层解析,构造以太网数据帧,和二进制数据进行转发


http://www.ppmy.cn/news/1555048.html

相关文章

Golang学习笔记_08——For循环

Golang学习笔记_05——延迟调用 Golang学习笔记_06——变量和常量 Golang学习笔记_07——基本类型 文章目录 For循环1. 基本形式2. 省略形式3. While循环4. 无限循环5. 使用 range 进行迭代 源码 For循环 在Go语言中,for 循环是唯一的一种循环结构,它非…

chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。

上一节中,实现了先生成一个固定背景的与音频长度一致的视频,然后插入字幕。再合并成一个视频的方法。 但是:这样有点单了,所以: 1.根据字幕的长度先生成视频片断 2.在片段上加上字幕。 3.合并所有片断,…

.NET(C#) 如何配置用户首选项及保存用户设置

最近开发软件,需要将用户设置保存下来以便下次打开后再用,看了半天原来.NET框架自带setting功能。记录如下: 一,“设置” 页面 使用项目设计器的“设置”页指定项目的应用程序设置。 通过应用程序设置,能够为应用程序…

如何切换安卓手机ip?你更喜欢哪种操作

在数字化时代,IP地址作为网络设备的唯一标识,对于网络访问和隐私保护至关重要。有时,可能出于个人需求或工作缘故,想要将自己的安卓手机IP地址更换成其他省份的,或者设置成静态IP等需求该如何实现呢?安卓手…

通信协议 http、tcp、udp

目录 1. 五层网络协议 2. http 3. tcp、udp 4. tcp 3次握手、4次挥手 5. socket 6. httpclient 遇到的问题 1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码 2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed …

深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式

数据库 深入探索数据库世界:SQLite、Redis、MySQL 与数据库设计范式一、SQLite 数据库全方位解析(一)创建与基本操作(二)数据存储与表结构设计(三)数据操作:增删改查(四)与 C 语言联合使用(五)防止 SQL 注入二、Redis 数据库深度剖析(一)数据存储类型与独特结构(…

pstree 查看进程树 命令学习

使用Centos7.6 系统 使用yum安装 使用 yum -y install pstree 下载时会报错,因为 pstree 命令的包名不是这个,使用 yum provides pstree 可以查看pstree属于哪个包,然后安装它。 Loaded plugins: fastestmirror Repository epel is listed mo…

pandas:常用函数

1.groupby groupby 是 pandas 中一个非常强大的函数,它允许你按照某个列(或多列)的值对数据集进行分组,然后对每个组应用聚合函数。以下是 groupby 的基础介绍和用法示例。 基础介绍 groupby 函数通常用于以下情况:…