初识网络原理

✏️作者:银河罐头
📋系列专栏:JavaEE

🌲“种一棵树最好的时间是十年前,其次是现在”

网络发展史

网络能够跨主机通信

局域网

局域网:把一些设备通过交换机和路由器连接到一起。

局域网要求这些设备不能离太远(同一个网吧,同一个学校,同一个公司…)

局域网组建网络的方式有很多种:

1)基于网线直连

2)基于集线器组建

3)基于交换机组建

4)基于交换机和路由器组建

集线器,交换机,路由器 , 这几个都是组建网络中涉及到的重要设备。

  • 交换机:组件局域网(不能跨局域网)
  • 路由器:wifi 本质上就是个无线路由器,路由器本质上就是把两个局域网连接起来。

而现在,带有路由功能(三层转发)交换机也是很多很常见的,交换机和路由器之间的界限越来越模糊。

交换机有家用的,也有企业用的。

广域网

广域网:范围更大的局域网,把更多的局域网也连接到一起,把一个城市里的电脑都连起来,再把城市和城市之间的局域网也连接起来,越连越多,越连越大,就成了广域网。

单机 => 局域网 => 广域网

网络通信基础

IP地址

表示了网络上设备所在的位置。(用于定位主机的网络地址)

端口号

标识了一个具体的应用程序。

认识协议

协议是网络通信中最核心的概念。

相当于是一种约定,商量好数据是啥样的格式进行传输的。有了这个约定才能让双方理解对方的含义。

发送方约好了我发的数据是啥样的,接收方按照这个固定的格式来进行解析。

一个协议,可能简单,也可能复杂。

举个栗子🌰:像日常生活中使用的方言,“普通话”,“东北话”…就属于协议。

网络通信是一个比较复杂的事情,需求场景复杂了,实现功能也会比较复杂。如果这个协议太复杂了,学习成本、使用成本、理解成本、维护成本都会比较高。因此,实际采取的做法,是针对这个复杂的大协议,拆分成若干个相对简单的小协议。随着把这个大协议拆分成小协议(每个协议负责一部分功能),此时就发现,某些协议之间起到的功能是类似的。就针对这些小协议,进一步的"分类"(“分层”)。这就好比代码拆分出很多类,有些类功能差不多,就可以放到一个包里。

当前学习的网络协议是在分层的大背景下展开的。

协议分层

协议分层有很多的好处:

1.降低了学习和维护的成本(封装)

2.可以灵活的针对这里的某一层协议进行替换。

当今互联网世界,协议分层主要有两种风格。(其实是一种)

OSI 七层网络模型

TCP/IP 五层(四层) 网络模型 [实际上的情况]

image-20230127195420550

TCP/IP 是 OSI 简化的实现方式

越往下的越接近硬件设备,越往上就越接近用户。

  • 物理层:约定了网络通信中基础的通信设备是啥样的。比如通信中使用的网线,网口等设备。

  • 数据链路层:具体负责两个节点之间,具体怎么进行传输

  • 网络层:主要负责路径的规划,走哪条路比较划算

  • 传输层:端到端之间的传输。

  • 应用层:应用程序,描述了传输的数据,用户要怎样来使用。

举个栗子🌰:

在淘宝买件衣服,我需要写收件人姓名和地址,商家就会根据这个地址给我发快递。

站在我和商家的角度,并不关心快递传输的过程,只关心起点到终点,这个过程就是(传输层)做的工作。

假设这个快递是 上海 => 西安,快递公司就需要考虑从哪条路走。(网络层)

上海 -> 苏州 -> 西安

上海 -> 南京 -> 西安

上海 -> 徐州 -> 西安

假设快递按 上海 -> 南京 -> 西安 这条路线,

上海 -> 南京:通过卡车

南京 -> 西安:通过飞机

两个结点之间怎么运输(数据链路层)

要保证从起点到终点路上都是畅通的,公路,铁路,机场等基础设施…(物理层)

应用层:比如在淘宝买了个鸡毛掸子,可以用来除尘,还能用来打不听话的熊孩子…(doge)

网络分层,相当于上层协议调用下层协议,下层协议给上层协议提供服务

这五层协议各司其职。

  • 网络数据传输的基本流程(站在协议分层背景下理解)

以 QQ 为例,A 给 B 发送一个 hello

1.应用层:

用户在输入框中输入 hello 这个字符串,qq 这个应用程序,就把这个字符串给构造成一个应用层数据包。

一个假设的应用层协议的格式:

发送方QQ号;发送时间;接收方QQ号;消息内容

image-20230127205148366

所谓的"应用层数据包"本质上就是一个遵守了约定格式的字符串

程序员要调用操作系统的 api ,把应用层数据交给传输层。

2.传输层(进入系统内核了)

在传输层中就要把上述应用层数据,构造成传输层的数据报。

传输层使用到的协议,最知名的就是 UDP 和 TCP.比如此处是使用 UDP ,需要构造出 UDP 数据报(在应用层数据基础上加个 UDP 报头)

image-20230127210928330

UDP 报头,这是另外一个特定格式的字符串(这里涉及到源端口和目的端口),此处就好像字符串拼接一样,把这个报头和后面的数据拼到一起.

所谓的报头就是一个标签,,通过这个标签表示要把这个信息进行怎样的传输

传输层就把 UDP 这个数据报交给网络层

3.网络层

最知名的协议 IP 协议,IP 协议要基于上述数据,打包成一个 IP 数据报

image-20230127212025854

IP 报头也相当于是一个字符串,,包含了另外一组信息,(最核心的信息,源 IP,目的 IP)

传输过程需要知道 源 IP,源端口,目的 IP,目的端口,协议类型。(一次通信中,基础的 五元组)

网络层数据已经准备好了,需要进一步交给数据链路层。

4.数据链路层

最知名的协议,叫做"以太网"。基于上述数据,还要打包成一个"以太网数据帧"

image-20230127213207542

接下来这个数据继续向下传输,交给物理层

5.物理层

把上述二进制的数据(0101)转换出电信号/光信号。

此时就真正把数据传输出去了。

上述过程从应用层到物理层,层层加码,这个过程称为"封装"(这个封装不是面向对象的封装)

接收方的工作。(此处省略中间的转发过程) 此处只考虑B 的接收

1.物理层

网卡收到的光信号和电信号。是在物理层,把这个光电信号转换回二进制数据的,转换回的这个二进制数据其实就是一个以太网数据帧

2.把这个数据交给数据链路层解析

image-20230127214518399

数据链路层需要去掉帧头帧尾,去除中间的载荷,交给上层的网络层,IP 协议。

以太网数据帧帧头里会记录这个载荷是不是一个 IP 数据报

3.网络层

IP协议针对这里进行解析,解析出 IP 报头,取出IP 协议的载荷,把这里得到的传输层协议交给上层传输层。

image-20230127214948889

IP 报头里会记录载荷是 UDP 还是 TCP

4.传输层

UDP 再进行解析,取出报头,取出载荷,再把这个载荷交给对应的应用层程序。

image-20230127215135261

UDP 报头里有一个重要的字段,目的端口,目的端口是一个具体的应用程序,关联在一起的,因此就可以根据这个端口来把数据交给应用程序了。

5.应用层

qq 应用程序,qq就会针对应用层协议 , 也进行解析,显示到界面上

image-20230127215436364

上述,从下到上,层层解析,这个过程称为"分用"

HTTP 是一个应用层协议,和传输层没啥关系

TCP 和 UDP 报头结构不一样,前面拼接的字符串也是不同的, 报头不同,支持的功能和特性也是不同的。

TCP ,可靠传输。UDP,不可靠传输。

一次通信只能用一个(不能一次通信中发送方是 TCP , 接收方是 UDP)

整个网络协议中,协议分成了很多层。山城协议要调用下层协议(上层协议把数据交给下层,继续封装),下层协议要给上层协议提供支持(下层协议解析好数据交给上层)

这里的这几层协议之间是有明确的层级关系的,只有相邻的两层之间才能进行交互(不能跨层交互)

上述这些约束,让通信变得简单,清晰起来了。

路由器,三层转发,在网络层转发。

交换机,二层转发,在数据链路层转发。

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值