网络基本概念

发布于:2024-04-25 ⋅ 阅读:(19) ⋅ 点赞:(0)

1. 几个关键概念

1.1 局域网

局域网指的是把若干个电脑连接到一起,通过路由器组成的网络.

1.2 广域网

广域网指的是把很多局域网相连到一起,构成更复杂的网络体系.

1.3 主机

主机指的是上网的设备(电脑/手机/其他设备)

1.4 路由器和交换机

路由器和交换机是组建网络的重要设备.路由器上lan口和wan口,路由器和路由器之间可以通过一个接wan口,一个接lan口来连接,要连接上网设备的路由器就让上网设备接在它的lan口.但是虽然路由器有很多网口,路由器上的口可能不够用,这时交换机就可以对接口进行拓展.现在的交换机都是程序,也就实现好了,自动启动的.

2. IP地址

IP地址是标识网络上的一个设备的位置.通过这个位置找到这个设备,进行进一步的通信.IP地址是32位的整数,四个字节的数字.往往采用"点分十进制"的方式来表示IP地址.

3. 端口号

端口号是标识同一个主机上同一时刻不同的应用程序.要求每个程序在启动的时候,就需要关联上一个和别人不重复的端口号.因此,不同主机上的不同程序可以使用同一个端口号,同一主机上一个程序运行完了,这个端口号也可以被之后开始运行的程序使用.

4. 协议

4.1 协议的概念

协议是一种约定,通信双方对于通信规则的约定.一定是得到通信双方认可的.协议可以是认可面非常广的,也可以是认可面不广的.(只有两个人用也行,只要互相认可就行)

在进行网络通信时,一定需要通信协议,这个是非常重要的环节.确保两台主机在不同硬件,不同操作系统,不同应用程序的背景下也能正确进行.

4.2 协议分层

在网络通信中,涉及到的细节非常多,这些细节都需要协议去规定.如果写到一个协议里面,这个协议就会非常庞大,非常复杂.

这时,我们就需要将这个协议拆分成许多功能单一的协议.但是,拆分完后的协议太多了.要对这些协议进行分层.把不同功能的协议分成不同的层级,每个层级都有对应的主线任务.上层协议会调用下次协议的功能,下层协议会给上层协议提供服务.

4.3 协议分层的好处

1. 达到封装的效果:某一层协议,不需要知道其他层协议的细节,降低了学习的成本.

2. 任意层次的协议都可以灵活替换使用,达到解耦合的效果.

4.4 TCP/IP五层(四层)模型

1. 物理层: 属于硬件层面,例如网线,网口......在硬件层面上有相关的约定.

2. 数据链路层: 关注的是通信过程中,两个相邻结点之间的通信.

3. 网络层: 关注的是通信过程中,通信路径的规划.规划出的路径就决定了,数据要经过哪些结点.注重"点到点的传输".

4. 传输层: 关注的是通信双方的"起点"和"终点".注重"端到端的传输".

5. 应用层: 和具体应用程序直接相关.注重"传输的数据用来干啥".

至于到底是算5层还是4层,加上物理层就是5层,不加物理层就是4层.

4.5 OSI七层模型

从下至上:

物理层对应TCP/IP模型中的物理层;

数据链路层对应TCP/IP模型中的数据链路层;                                                                                     

网络层对应TCP/IP模型中的网络层;                                                                                                   

传输层对应TCP/IP模型中的传输层;

会话层,表示层,应用层对应TCP/IP模型中的应用层.

对于程序猿来说下面三层,都是操作系统内核,硬件,驱动,已经实现好了,我们无需过多干涉.应用层和传输层和日常开发息息相关.

5.客户端和服务器

客户端是主动的一方,客户端给服务器发送的信息就称为请求.

服务器是被动的一方,服务器处理完客户端发来的请求之后返回给客户端的信息就被称为响应.

6. 两台主机之间的网络通信流程

假设我们现在要让QQ用户A给QQ用户B发送一条消息"hello".

这条消息肯定需要通过网络来传输,QQ应用程序就需要负责实现上述逻辑.

6.1 应用层处理

我们假设QQ的应用层协议如下:

这条消息被转换成了四个信息的组合:

发送者的qq号,接收者的qq号,发送的具体时间,消息正文\n

例如:114514,1919810,2024-4-24 12:00:00,hello\n

6.2 传输层处理

我们得到了一个应用层数据包,接下来要调用QQ系统的api进行传输,就需要传输层的处理.

传输层提供了socket api来接受应用层数据包.

拿到数据包后,调用两个典型协议中的一个:TCP/UDP协议来把这个数据包进行进一步封装.我们这里假设使用UDP来作为传输层的协议.

UDP数据包:  UDP报头+114514,1919810,2024-4-24 12:00:00,hello\n

UDP报头里放的是一些UDP的相关属性.应用层数据包的内容就作为UDP数据包的载荷.

传输层还会提供将UDP数据包传输到网络层的api,这个调用过程是系统内核自己负责的.

6.3 网络层处理

网络层得到UDP数据包后,调用最经典的协议------IP协议.

IP数据包:IP报头+UDP数据包

IP报头存有发送者和收件者的IP地址.UDP数据包作为IP数据包的载荷.

6.4 数据链路层处理

数据链路层提供了api把IP数据包从网络层传输到数据链路层.

再调用数据链路层典型协议以太网进一步地封装IP数据包.

以太网数据帧:帧头+IP数据包+帧尾

封装好后数据就进入网卡中了.

6.5 物理层处理

上述的以太网数据帧本质上还是二进制数据.硬件设备要把这些二进制数据转换为光信号/电信号/电磁波才会真正地进行发射.

对于接收者B,接收的过程则是从下至上:

先在物理层接收到光信号/电信号/电磁波,再转换成二进制数据交给数据链路层.

数据链路层对数据进行解析,解析报头中的重要信息,拿到载荷中的数据.解析后的载荷数据交给网络层.

网络层拿到了IP数据包,根据IP协议进一步解析报头中相关信息,取出载荷.把载荷信息交给传输层.

传输层根据UDP协议解析UDP数据包,把载荷内容交给应用层.

最后应用层拿到应用数据包,按照QQ自己的协议格式进行解析,拿到结构化数据显示在屏幕上.

这样就完成了两台主机之间的一次网络通信.