网络原理初阶

局域网和广域网

局域网

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

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

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

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

1.基于网线直连

image-20220408131320464

两根线,将三台主机连接起来,这三个主机就构成了一个局域网.咋们日常的主机一般都是一个网口,但是有的主机是多个端口的.

2.基于交换机组建

image-20220408131858859

借助交换机,组成一个局域网,交换机上的网口之间是对等的(都是一样的口)

效果就是把插在交换机上的设备给创建成一个局域网,这个局域网内部至今的主机可以相互访问.交换机可以把若干个设备组建成一个局域网.

3.基于路由器组建

image-20220408132255298

路由器上有两种接口,一种叫做LAN口,一种叫做WAN口

其中插在LAN口的设备,再同一局域网里,通过WAN口可以连接到其他的局域网

此时路由器A的WAN连接的就是B的LAN口,所以A其实是B的局域网中的一个设备

广域网

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

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

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

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

端口号

概念

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

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

格式

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

注意事项

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

了解:

一个进程启动后,系统会随机分配一个端口(启动端口)

程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。

进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号

认识协议

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

本质就算是发出来的数据是什么样子的格式 , 接收方按照对应的格式来接收

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

通过光信号的频率,(高频率/低频率),电信号的电平(高电平/低电平)来表示0和1

所以协议就是一种约定

协议分层

网络通信这个过程,其实很复杂,里面有很多细节,如果就只通过一个协议,来约定所有的细节,这个协议会十分庞大,复杂,更好的办法就是把一个大的复杂的协议,拆成多个小的,更简单的协议,每个协议只负责部分工作.

就和写代码一样,写一个复杂的程序不能一个文件将所有代码装进去,把一个代码拆分成更小的,更简单的文件,每一个文件负责一部分工作.

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

image-20220408134805168

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

1 每层协议不需要知道其他层协议的细节(封装)

打电话的人不需要知道电话的工作原理,就能完成打电话的操作

制作电话的人不需要成为语言大师.就可以制作出电话

2 把对应层的协议替换成其他协议(低耦合)

打电话的人可以使用汉语,也可以使用英语

打电话的人可以使用有线电话,也可以使用无线电话

TCP/IP五层网络模型

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

image-20220408141738385

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

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

image-20220408142027874

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

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

站在全局的角度,这是五层模型

但是在一个程序猿的角度来看,最下面的物理层描述的是硬件设备,(和软件没啥关系,和程序猿的距离比较远),所以这时会认为就是四层

物理层

网络通信中的硬件设施

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

比如我随便买一个路由器都可以插上我买的网线,我不需要考虑网卡不匹配这样的问题,因为物理层协议已经规定好了

数据链路层

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

image-20220408143359053

主机1和路由器是相邻的

主机2和路由器是相邻的

但是主机1和主机2不是相邻的

网络层

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

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

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

传输层

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

比如我们快递买东西,商家就是起点,消费者就是终点

消费者提供住址和电话,商家负责根据增地址将快递打给消费者

此时消费者和商家就只关注结果,不负责过程

此时的快递公司就要关注其中的过程

应用层

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

比如博主有一天在网上买一个物品

商家站在传输层.考虑这个东西能不呢达到我手上

快递公司站在网络层规划路线

快递小哥站在数据链路层,骑着电动车把货拉到集散中心

电动车/集装箱卡车/公路就是物理层.提供传输的基础

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

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

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

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

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

封装和分用

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

举个栗子:

封装

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

应用层(QQ应用程序)

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

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

其他的传输层,网络层。。。的协议都是现成的,操作系统/硬件/驱动实现好的,但是应用层的协议大概率是程序猿自己设计的

假设的应用层协议

image-20220408184948603

发送方是A,接收方是B发送时间为2022/4/8 18:48 ,发送内容为“hello”

应用层协议就调用操作系统提供的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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值