一、网络发展
1.1. 独立模式: 计算机之间相互独立
数据分发下去,计算完毕,去收取的时候,还是需要人工去获取的,这就导致工作效率非常的低下。
1.2. 网络互联: 多台计算机连接在一起, 完成数据共享
1.3. 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
1.4. 广域网WAN: 将远隔千里的计算机都连在一起
广域网又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。广域网并不等同于互联网。
通俗来讲:将一个个的局域网连接起来,就是广域网;局域网和广域网只是一个相对的概念。比如一个省份相对于一个县城是广域网,但是相对于整个国家就是局域网。
1.5. 网络需要解决的问题
当两个主机进行数据交互时,可能会产生数据丢失、路由器无法定位目标主机、数据传输速度太慢等问题。因此网络就是要解决这些问题:效率问题、可靠性问题、定位问题。
二、协议
2.1. 网络协议是什么
协议是双方约定同一种通信规则,计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息.,要想传递各种不同的信息, 就需要约定好双方的数据格式。通过约定各种协议,可以很好地解决上面提到的效率问题、可靠性问题、定位问题。
计算机的生产商有很多,计算机操作系统也有很多,网络硬件也有很多,如何让不同的厂商之间生产的计算机能够互相顺利的通信?
这时候就需要制定一个共同的标准,让大家都来遵守,这就是网络协议。
举个简单的例子,假如不同地区的人用方言进行沟通的话,那么不同地区之间的人的交流是无效的,如果大家约定都用普通话就能起到沟通的作用。我们的网络协议就是规定大家都使用"普通话"进行沟通,定制一种有效的通信方式。
由于协议是一种约定,因此协议也要被管理起来、因此协议最终在操作系统上会以一种结构体的形式呈现。所以传输过程中的内容,比实际要传输的数据内容要多的,多出来的就是协议。而 协议 + 要传输的数据 就会形成 数据报、数据段、数据帧、数据包(根据不同的协议,叫法也不相同)。
2.2. 网络协议簇
网络之中不止一个协议,而是有很多个协议,我们将这些协议称之为网络簇。
2.3. 体系结构
体系结构规定了网络的分层,以及每一个分层需要完成的功能,以及每一个分层拥有的协议,还规定了每一个分层与自己上下层的关系。
2.4. 协议分层
网络协议分层最大的好处在于 “封装”,实现了解耦,使每一层彼此之间互相独立,互不影响,便于维护。上层只需调用下层的接口,即可实现上下层数据的交互。
2.5. 不同协议对应的分层
2.5.1. OSI七层模型
OSI是最开始提出先网络分层,分别有:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
但是对于现在的物联网企业来说分层太细(工业上面并不常用,企业一般选择TCP/IP),不利于开发,于是乎提出了TCP/IP参考模型。
2.5.2. TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,统称为TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
通常一般不讨论物理层、因此很多时候也可以称为TCP/IP四层模型:
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。应用层在用户层实现,并不是在内核层实现,因为用户的需求是多样化的。应用层协议比下三层协议多得多。
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
与OSI分层相比,TCP/IP分层将应用层、表示层、会话层压缩成了应用层:
一般而言
对于一台主机而言
它的操作系统内核:实现传输层、网络层
它的驱动:实现链路层
它的网卡:实现物理层
对于路由器而言:
实现了从网络层 到 物理层
对于交换机而言:
从数据链路层 到 物理层
对于集线器:
只实现了物理层
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
三、网络传输基本流程
数据自顶向下传输时,每一层都需要添加对应的协议报头,接收后又需要自底向上去掉报头,这种情况叫做数据包封装和分用。
3.1. 数据包封装和分用
-
不同协议层对数据包有不同的称谓,传输层叫做段、网络层叫做数据报、链路层叫做帧。
-
应用层数据通过协议栈发送到网络上时,每层协议都要加上一个数据首部,称谓封装。
-
首部信息中包含了一些类似于首部有多长、载荷有多长,上层协议是什么信息。
-
数据封装成在帧后发到传输介质上,到达目的主机后每层协议再剥掉相对应的首部,根据首部的上层协议字段,将数据交给对应的上层协议处理。这个过程叫做分用。
3.2. 局域网 TCP/IP通讯过程
网络数据的转发需要先经历自己的网络协议栈添加报头,然后将数据转化为光电信号,传输到对端机器;对端机器收到数据之后,需要经历自己的机器网络协议栈的层层向上提交,在提交的过程中去掉对应的报头,一直将数据提交到应用层的应用程序当中。
因此传输过程中就会遇到以下问题:
-
数据包/数据段/数据帧 = 报头(就是协议) + 数据。
-
几乎所有的协议都要解决报头和有效载荷的分界问题(解包的时候、怎么分辨01序列)
通过协议来区分。首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息。 -
自底向上,要确认自己的有效载荷需要交给上层哪个协议?
几乎所有的协议,都要解决的第二个问题:确认分离之后,将自己的有效载荷交付给上层的那个协议,这个动作被称为分用。 -
局域网中所有的主机都可以直接通信,但局域网之中不止两台机器,如何确认发给哪一台主机,目标主机又如何确认数据是发给自己?
在数据链路层,有一个MAC地址,网卡硬件地址,或者序列号,是全球唯一的。每台主机都会去解包检测报头的MAC地址,如果MAC地址不是自己的则丢弃,否则就继续向上传输。 -
局域网通信原理:
1)在局域网之中,有多台主机直接通信,有可能会发生数据碰撞 (数据相互干扰了),导致彼此之间谁都没办法正常通信,整个局域网都可以称之为一个碰撞域。
2)碰撞完之后数据就是垃圾数据,垃圾数据需要被识别到即需要被检测到,这就是局域网的碰撞检测。
3)检测到碰撞后需要重新发送数据 ,但是有可能再次碰撞,因此需要碰撞避免算法(比如等一会再发,在等待的期间不断检测是否有人在发送信息,这样再次发生碰撞的几率大大降低了)。
4)局域网之中的单对单通信,只需要将MAC地址设置为目标主机即可,所有的主机都可以看到,拿到后都会进行分析,不是自己的则丢弃掉。
5)局域网中,主机越多,发生碰撞的几率越大。
6)交换机可以划分碰撞域,解决碰撞问题。 -
局域网之中的广播:
所有人都收到,所有人都认为是发给自己的,所有人都做数据分析(约定好一个地址,对所有主机生效,这个广播地址就是0xFFFFFFFF)。
3.4. 广域网 TCP/IP跨网络通讯过程
- 从发送主机网卡发出的电信号通过网线到达交换机,交换机将电信号转换成二进制数据送往交换机的数据链路层。交换机根据数据帧头部的MAC地址将数据智能转发到对应的路由器设备,在转发前要重新将二进制数据转换成物理的电信号。
- 路由器接收到数据后,会拆掉数据链路层的MAC头部信息,将数据包送往网络层,路由器将检测数据包头部的目标IP地址信息,并根据该信息进行路由转发,将数据报文转发到下一路由器上,在转发前要根据路由表重新封装新的MAC头部信息,并将数据转换成二进制,最后转化成电信号重新发出。
- 对应的交换机接收到路由器发出的电信号,根据MAC地址传送到接收主机的网卡中。
- 在跨网络传输过程中,源MAC地址和目的MAC地址一直在变化,因此以太网帧结构的内容在不断变化。源ip和目的ip不会发生变化。源ip和目的ip相当于整个过程的起始位置和结束位置,而源MAC和目的MAC相当于全过程中每一跳的起始位置和结束位置。
四、网络传输中的五元组信息
源ip、源端口、目的ip、目的端口、协议,称为网络传输中的五元组信息。
网络传输当中的每一条信息都必须包含五元组信息、缺一不可,比如缺少目的ip就无法将信息传输过去。
ip地址:在网络之中唯一标识一台主机。
port:一个端口在一台机器当中唯一标识一个进程,一个进程可以占用多个端口。
4.1. IP
IP地址:(IPV4)
- 本质上是一个无符号32位的整数(uint32_t),范围是0~2^32-1
- 通常表示ip的是,是用点分十进制的方式来表示的(192.168.1.1)
以"."分割,每个数字都占用1个字节,(0~255) . (0~255) . (0~255) . (0~255)
比如 258.121.12.12不是ip地址,因为每个字节表示的最大无符号整数为255 - ipv4版本的ip地址面临枯竭
从第1点可以知道,我们的IP地址也就42亿多,全球那么多电脑和手机等等通信设备,需要大量的ip地址,那么怎么解决呢?
DHCP协议:动态主机分配协议(谁上网给谁分配协议,比如电脑不联网就将ip收回来)
一定程度可以缓解,IP地址枯竭的问题。
NAT协议:地址转化协议,才可以彻底解决。网络地址转换协议NAT功能详解及NAT基础知识介绍
IP地址:(IPV6)
IPV6地址本质上是一个无符号的128位整数,范围是0~2^128-1。
虽然它解决了ipv4地址面临枯竭的问题,但是它也有一个问题:ipv6和ipv4是不兼容的,因为以前程序都是用的ipv4,ipv4占4个字节,ipv6占16个字节。
4.2. mac地址
- MAC地址用来识别数据链路层中相连的节点
- 长度为48位,6个字节,一般用16进制数字加上冒号的形式来表示(比如:03:22:52:02:fa:32)
- MAC地址在网卡出厂使就确定了,不能修改,MAC地址通常是唯一的。
4.3. 端口号
-
端口号是一个2字节16位的整数
-
端口号用来标识一个进程,告诉操作系统(硬件最先收到数据,因此这个数据要贯穿OS,最后由OS交给某个进程),当前的这个数据要要给哪一个进程来进行处理
-
ip地址+端口号能够标识网络上的某一台主机的某一个进程
-
一个端口号只能被一个进程占用,一个进程可以有多个端口号
端口号和pid的关系:
进程pid:每一个进程都有。
端口号:网络进程才有端口号、网络进程之中的表示。
所以进程一定有pid标识这个进程,但是不一定有端口号,因为网络之中的进程才会被分配端口号。
端口号+ip表示全网之中的唯一进程。
端口号和pid一样都是进程的表示,所以一个端口号只能对应一个进程,而一个进程可以有多个端口号。
0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的。
1021-65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的。
比较常用的端口号有:
- ssh服务器,22端口
- ftp服务器,21端口
- telnet服务器,23端口
- http服务器,80端口
- https服务器,443端口(https是由ssl加密经过再经过传输协议传输的)
五、一些网络命令操作
-
查看本机相关ip、mac地址和网络信息ifconfig
-
查看当前主板之中挂接的硬件设备lspci
-
查看网络进程信息