网络通信过程基础详解
网络通信
现在已经是一个互联网时代了,家家户户都有手机、电脑、电视等随时随地可以在网上进行冲浪,我们俗称的上网就是通过物理介质和通信设备将不同的用户连接到一起,实现了用户之间的通信,在发送信息的整个过程中,要经过一系列协议处理,然后寻找到我们要沟通的通信设备,最终实现将信息传递给目标用户。
网络通信的概述
首先我们要明白怎么实现通信的,通信可以分为两部分,第一部分是将要发送的数据进行一系列处理,然后转化为二进制数字准备进行发送。第二部分就是将二进制数字通过某些路径发送到目标通信设备,第三部分就是将要接到的二进制数字在通过反向的第一部分的处理最后转为我们看到的数据。
接下来我就按照这三部分顺序进行分析。
一、互联网的tcp\ip五层协议
这个五层协议主要就是第一部分和第三部分,对数据的处理,方便第二部分能够找到目标计算机以及目标计算机能够对数据进行“拆包”拿到我们的原始数据。
互联网的5层协议按照从上向下分为:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
首先要将数据从A发送到B,那么数据就要从应用层对数据进行处理之后发送给传输层,经过传输层的打包处理也就是增加一个软件所对应的端口,然后传给网络层,网络层会在传输层发来的数据头部接上一层(自己的ip地址和,对方的ip地址)然后传给数据链路层,数据链路层会结果数据包并加上自己的mac地址和对方的地址的占位符(此时并不能得知对方目标计算机的mac地址),然后最终在物理层将整个数据转为二进制数字。这样第一部分就完成了。有一个图能很简单的将这个流程表示出来。
下面对整个数据处理进行逐层分析,我们逐层进行分析:
应用层
此时后传递的数据数据
。
功能:主要是对数据处理的不同格式,有http\https\ftp等等,通过这些协议对数据进行处理然后发送给传输层。
协议就是按照某种规范进行处理,相当于字符编码,将数据按照某种规范转为某种格式,然后可以在按照相同的规范转为该数据。在计算机中,标准化是很重要的,如果我们每个人的标准都不同,那么在数据处理等等方面都会很麻烦,所以一般都会大家共同定义一个标准,然后默认按照这种标准去处理。
通过某个软件(比如说QQ)将数据发给对象的时候,首先软件会按照某种协议处理数据,然后传给传输层。
传给传输层的时候一般有两种协议:TCP和UDP。
- TCP是可靠性协议,在每次发送完数据后,都会得到目标计算机的反馈。安全性高,但是发送速度较为缓慢。
- UDP是不可靠协议,得到数据之后就会发送,不在乎对方是否接受到。安全性较低但是发送速度快。
按照发送数据情况具体分析,是采用哪一种协议进行传送数据。
传输层
此时要传送的数据TCP或UDP头+数据
.单位是段
功能:接受来自应用层的数据并将该软件所对应的端口号加到头部并传递给网络层。
计算机本身有0~65535个端口,每一个端口都可以对应一个基于网络通信的软件,只要软件要通信,那么它肯定对应着计算机的某个端口,如果不通信,那么就不会占用端口。
TCP协议
我们通常使用TCP协议进行处理重要的数据,在使用TCP协议的时候,一般都会建立一个双向通道:三次握手和四次挥手。
三次握手:用于建立双向通道。通信设备A向目标计算机B发送建立通道的请求,目标计算机接到请求之后会发送同意建立通道的请求,并且同时想A发送建立连接的请求,B在发送同意建立链接的请求。在整个过程中,一共发生了三次连接,称为三次握手。
四次挥手:用于断开连接。A在将数据发送完毕之后,会发送请求断开连接,B收到之后会同意该请求。因为两个通道是互不相连的,因此在断开A到B的连接时,有可能B到A的链接的通道中间还有数据在传输,因此等到数据传输完毕之后,B才会发送断开连接请求,然后A同意。此时一共经历了四次挥手。
当然上述的连接通道并不是真的在传输层之间互相联系,数据还要通过网络层等传送给目标计算机,这个通道式虚拟概念的通道。
网络层
此时的数据为ip头+TCP或UDP头+数据
,单位是包
功能:接受传输层发来的信息并加上自己的ip地址和对方通信设备的ip地址,对方的ip地址此处是已知的公网ip地址。
我们想要发送数据给目标计算机,肯定要知道目标计算机在哪,就像上邮局寄快递,但是不知道对方的地址怎么去寄东西呢?Ip地址就规定了目标计算机的通信设备。常见的Ip地址有ipv4和ipv6,其中ipv4已经逐渐不够用了,正在逐步替换成ipv6。
每台计算机只要遵守Ip协议就可以链接互联网。它用来给计算机一个编号,相当与电话号码。每台想要联网的计算机都要有自己的ip地址。
ip协议
ip地址有32位二进制组成的,也就是4个字节,有网络地址和主机地址。Ip一般也分为A类、B类、C类,这里不做过多描述。
ip又分为公网ip和私网ip,用户要连接互联网需要用公网ip作为身份标识,且全世界公网ip每一个都是独一无二的,但是私网IP不同,同一局域网的私有Ip是不可以重复的,但是不同的公网ip下的局域网内部的私有ip是可以重复的。也就是说同一时刻在联网的计算机都是有自己的公网Ip身份的,所以可以通过公网Ip地址找到目标计算机,
但是私网ip在公网上是不能使用的,只能在局域网内部使用,一下是几个保留的私网ip。
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
总结:公网IP,是在互联网上使用的,在任何地方只要能连网都能访问公网IP。而私有IP是局域网所使用的,通过互联网是不能访问私有IP的。
子网掩码:通过ip和子网掩码可以用来判断两台计算机是否位于同一网络ip内,由于ip地址是有网络地址和主机地址组成,如果网络地址是相同的,那么在传输的过程中,就可以不经过路由器而是可以直接发送,如果网络地址不相同,那么传送数据就得发送给路由,采用路由的方式进行发送。
子网掩码是由连续的1和0的32个bit组成,用1来代替网络位,0代表主机位。不同类的ip默认掩码有所不同。分别对应255.0.0.0(A类),255.255.0.0(B类),255.255.255.0(C类)。计算一般是用AND计算(全1则为1,不全为1则0)来对比两个不同的ip地址。
网关:连接两个不同子网的通信设备需要经过一道“关卡”。但是如果是同一个局域网之内的通信就用不到网关,一般路由器的网关都是192.168.0.1或者192.168.1.1。每当局域网内的通信设备要链接外界的电脑的时候,都是通过网关然后才能出去。
总结:当用户链接网络的时候,会有一个唯一一个与之对应的公网ip.而私网ip则只能用于同一局域网之内的通信。子网掩码和Ip用来确认是否位于同一个网络位,如果是可以直接进行通信,如果不是,则需要发送到网关。
数据链路层
此时的数据为mac头+ip头+TCP或UDP头+数据
,单位为帧。
功能:接到网络层传来的数据,并将自己的mac地址和对方计算机的mac地址(但是此时并不能获取对方的mac地址,所以通常用占位符代替)加到头部然后传给物理层。
首先要明白什么是mac地址,mac地址就是通信设备在出厂的时候在网卡上烧制的一个独一无二的mac地址,是不可改变的,不同的通信设备的mac地址是不相同的,网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。
通过mac地址,在同一网络之内,我们就可以通过广播的方式发送广播包,同一局域网内的所有通信设备都会收到这个包并拆开,然后目标计算机发现ip是接收方自己的时候,就会将自己的mac地址返回,mac头的数据就会自己的mac地址和对方的mac地址,如果判断不是自己同一局域网内的计算机的话,就会返回网关的mac地址,然后通过网关发送出去。
这里要注意ip和mac各自的作用:
- Ip主要用于网络层,将一个数据包从一个网络发送到另一个网络。
- mac主要用于数据链路层,将数据从一个节点发送到相同链路的另一个节点。
ip地址和mac地址存在一定的映射关系,因此可以通过ip地址获取到mac地址,这种协议叫做arp协议。ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络。
在一个稳定的网络中,IP地址和MAC地址是成对出现的。如果一台计算机要和网络中另一外计算机通信,那么要配置这两台计算机的IP地址,MAC地址是网卡出厂时设定的,这样配置的IP地址就和MAC地址形成了一种对应关系。在数据通信时,IP地址负责表示计算机的网络层地址,网络层设备(如路由器)根据IP地址来进行操作;MAC地址负责表示计算机的数据链路层地址,数据链路层设备(如交换机)根据MAC地址来进行操作。IP和MAC地址这种映射关系由ARP协议完成。
物理层
此时的数据为二进制数字。
功能:将来自数据链路层的数据转化为二进制数字,然后通过链接介质发送到目标。
物理层是将不同的通信设备通过光纤、双绞线等进行连接,用于互相之间通过高低电位发送01的二进制数字。
二、寻找目标计算机
到此时为之,数据通过一系列的协议完成了处理,转为了二进制数字,接下来就是第二部分,如何寻找到目标计算机。
这时候就要提到交换机了。现在使用最广泛的依然是二层交换机(以太层交换机)。交换机的每个端口口都有一个arp列表,含有ip和mac地址的对应关系。一个端口可对应多个mac地址,但是一个mac地址只能对应一个端口。
当交换机拿到ip地址的时候,就会对照arp列表找是否含有对应的mac地址,如果有,就由该端口进行转发。如果没有会向所有端口发送数据,目的计算机得到响应之后,会将自己的mac地址发送到交换机,然后arp列表会进行学习更新。
目标计算机位于同一网络位
如果目标计算机在同一局域网,然后交换机就会重新封装mac头的信息
(自己mac地址,目标计算机占位mac地址)===》(自己mac地址,目标计算机mac地址。)
然后将数据传递给目标计算机。此时的数据并不出网关。
目标计算机不位于同一网络位
如果经数据的ip地址判断,发现不在同一个局域网之内,交换机就会将网关的mac地址改为目标计算机mac地址。然后将数据发给网关,然后网关在对ip地址进行arp协议解析,然后重新打包数据以太头为(网关的mac地址,下一路由的mac地址),其他层的数据不变。
然后依次类推,在路由上不停的转换最终达到目标计算机所处的网关。经由ip和mac的映射关系,找到该目标计算机的mac地址。最终完成了传输。
三、目标计算机拿到数据之后
当目标计算机的物理层拿到这些电信号之后,会按照物理层、数据链路层、网络层、传输层、应用层的顺序依次拆头部信息,最终拿到数据,完成了一次完美的发送数据之旅。
TIPS:刚开始学习,还是有很多细节并没有处理好,应该有可能理解出入。只是大概地理解,恳请大佬指正,不胜感激。