0
点赞
收藏
分享

微信扫一扫

网络原理初阶

岛上码农 2022-04-13 阅读 59
java

局域网和广域网

局域网

局域网,即 Local Area Network,简称LAN。

Local 即标识了局域网是本地,局部组建的一种私有网络。

局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

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

1.基于网线直连

image-20220408131320464

2.基于交换机组建

image-20220408131858859

3.基于路由器组建

image-20220408132255298

广域网

广域网,即 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。

特殊IP

IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。

端口号

概念

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

格式

端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

注意事项

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

了解:

认识协议

要想进行有效的通信,前提就是能够明确通信协议

网络通信的时候,本质上,传输的是光信号和电信号

所以协议就是一种约定

协议分层

协议分层类似于打电话时,定义不同的层次的协议

image-20220408134805168

这就体现了协议分成的两个好处

TCP/IP五层网络模型

我们听到的最多的是OSI五层参考模型,如下图

image-20220408141738385

但实际上,这种参考模型只出现在教科书中,所以不做过多介绍

真实情况下,使用最多的是TCP/IP五层(四层)网络模型

image-20220408142027874

如图,左侧是OSI七层参考模型,右侧是TCP/IP五层网络模型.可以看出,下面四层其实都是一样的,

下面的四层,和程序猿的关系不是特别大,这里的代码逻辑都是通过操作系统和驱动以及硬件实现好的,程序猿打交代最多的其实是应用层的协议

物理层

网络通信中的硬件设施

比如网线、网卡…针对硬件设备的约定,就是物理层协议负责的范畴,需要保证所有的主机和网络设备之间,都是相互匹配的

数据链路层

负责相邻(一根网线连接的两个设备)的设备之间的通信

image-20220408143359053

网络层

负责点到点之间的通信.也就是网络中的任意节点到任意节点之间的通信

网络层负责这两个点之间,规划出一条合适的路线

实际上,网络中的环境非常复杂,两个点之间的路线不止一条,就需要规划处一条最合适的路线

传输层

负责端到端之间的通信(起点到终点之间的通信)
传输层只关注结果(数据到没到),不关注过程(数据是怎么到的)

应用层

和应用程序密切相关的,不同的程序就有不同的用途

以上的所有只考虑包裹如何传输,不关系包裹内部是啥,更不关系包裹里的东西是干啥的

而我作为购物的人,是是抱着一定的用途/目的来购买的

一个主机,其实就对应了物理层到应用层五层(五层全部实现)

一台路由器,主要是物理层到网络层(主要实现了物理层,数据链路层,网络层)

一台交换机.主要就是物理层到数据链路层(主要是实现了物理层,数据链路层)

封装和分用

不同分层的写意之间,是如何相互配合的

举个栗子:

封装

用户A在键盘上输入了一个"hello",按下回车键

应用层(QQ应用程序)

根据用户输入的内容,把数据构造成一个应用层的协议报文(协议是一种约定,报文就是遵守这个约定的一组数据)

QQ代码中就会根据程序猿所设计的应用层协议,来构造出一个应用层数据报文。

假设的应用层协议

image-20220408184948603

应用层协议就调用操作系统提供的API(称为socket API),把应用层的数据,交给传输层(就已经进入了操作系统内核了)

传输层(操作系统内核)

根据刚才传过来的数据,基于当前使用的传输层协议,构造出一个传输层协议报文

传输最经典的协议 (TCP/DCP) 这里一TCP为例

image-20220408185653804

TCP的数据报 = TCP报头 + 数据载荷(Payload ,也就是一个完整的应用层数据)

构造TCP的过程可以视为是一个字符串拼接(二进制数据)

TCP的报头有很多的信息,最重要的就是”源端口“ 和 ”目的端口“ (相当于发送人电话和收件人电话)

网络中的封装的目的就是为了贴标签,贴上辅助转发的信息

接下来就将这个传输层的数据报交给网络层

网络层(操作系统内核)

拿到完整的传输层数据报,就会再根据当前使用的网络层协议(例如IP),再次进行封装,把TCP数据报狗造成IP数据报(添加上一个协议报头)

image-20220408190606548

IP数据报 = IP协议报头+载荷(完整的TCP/UDP的数据报)

IP协议报头中也有很多的信息,其中最重要的就是源IP和目的IP。相当于发件人的地址和收件人的地址

紧接着,当前的网络层协议就会将这个IP数据报交给数据链路层

数据链路层(驱动难关程序)

image-20220408191022867

以太网数据报 = 帧头 + IP数据报 —— 帧尾i

帧头最重要的信息就是接下来要传入的设备的地址是啥

帧尾放的是校验和

数据链路层又会把则会个数据交给物理层

物理层(硬件设备)

工作就是根据刚刚的以太网数据帧(一组0 1 )把这里的0 1 变成高低电平,通过网线传输出去;或者把这里的0 1 变成高频、低频的电磁波,通过光纤、无线的方式传播出去

此时的数据就已经离开了当前主机,前往了下一个设备。

分用

数据到了B的主机后。

物理层(硬件设备/网卡)

主机B的网卡感知到了一组高低电平,然后将这些电平分翻译为0 1 的一串数据 ,然后这一串0 1 就是完整的以太网数据帧

物理层九就把这个数据交给了数据链路层

数据链路层(驱动)

image-20220408192257694

数据链路层负责对这个数据进行解析,去掉帧头和帧尾,去除里面的IP数据报,然后交给网络协议

网络层(操作系统)

image-20220408192032580

网络层协议(IP协议)又会对这个数据进行解析,去掉IP协议报头,去取出里面的TCP数据报再交给传输层

传输层(操作系统内核)

image-20220408192431972

传输层协议(TCP协议)又会对这个数据进行解析,去掉TCP报头,取出里面的TCP数据报,交给应用层

应用层(应用程序)

image-20220408184948603

应用层就会调用socket API从内核中读取到这个应用层数据报。再按照应用程协议进行解析。

再根据解析结果给显示到窗口中

中间的过程

image-20220408192805601

image-20220408192816652

image-20220408192834549

无论网络多么复杂,这里整体的传输过程都是类似的,只是在不断的封装和分用

举报

相关推荐

0 条评论