1.网络发展与常见概念
1.1 网络发展
起初,计算机常常单独进行工作,随着计算机的不断发展,逐渐实现了计算机之间的相互通信,完成数据共享,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连规模的不同,可以划分为局域网LAN和广域网WAN。
在一定的区域内通过利用网线、交换器、路由器等设备进行互相连接就组成一个局域网;
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。
1.2 IP地址
网络互连的目的就是进行网络通信,也就是通过网络完成数据传输,那怎么判断到底是从哪台主机,将数据传输到哪台主机呢?这就需要用IP地址来进行标识。
IP地址用于标识一个主机在网络上的位置信息,就像我们发快递一样,需要知道对方的收货地址,快递员才能将包裹送达目的地。
在计算机中,用一个32位整数来表示这个IP地址,通常用“点分十进制”的方式来表示这个32位整数,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如127.0.0.1
1.3 端口号
通过IP地址,只是确定了一台主机,但这台主机上还有很多的程序,端口号用于定位主机中的进程。类似发送快递的时候,不仅需要收货地址(IP地址),还需要指定收货人(端口号)。
格式:
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意事项:
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
2.协议
有了IP地址和端口号后,我们可以定位到网络中唯一的一个进程,但是网络通信是基于二进制来进行数据传输的,而网络通信传输的数据类型可能有很多中,如图片、视频、文本等;即使是同类型的数据,格式也有可能不同,所以我们就需要使用协议来规定双方的数据格式完成数据传输。
2.1 认识协议
协议即为约定,即所有的网络设备都必须遵从的一组约定、规则。
通常由三要素组成:
1.语法:即数据与控制信息的结构或格式
2.语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。
3.时序:即事件实现顺序的详细说明。
协议最终体现为在网络上传输的数据包的格式。
2.2 五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
1.源IP:标识源主机
2.源端口号:标识源主机中该次通信发送数据的进程
3.目的IP:标识目的主机
4.目的端口号:标识目的主机中该次通信接收数据的进程
5.协议号:标识发送进程和接收进程双方约定的数据格式
五元组在网络通信中的作用,类似于发送快递:
2.3 协议分层
在网络中的协议比较复杂,无法通过一个协议,来把所有的功能都涵盖进去,就需要拆分出多个协议。
为了更好的组织这么多的协议,就按照这些协议的定位进行分类,于是就有了“协议分层”。
协议分层类似于打电话时,定义不同的层次的协议:
上述例子分成两层实现了两方面的好处:
1.达到了封装的效果(此处的封装类似于Java类的封装)。把实现细节隐藏起来,降低人们的使用成本。
打电话的人不需要理解具体的电话工作原理
造电话的人也不需要懂各种方言
2.可以很方便的对其中某层/某些协议进行灵活的替换
如果要针对网络协议中的某个细节进行改进升级,只需要替换对应层的协议即可,不需要对其他层次的协议进行影响
2.3.1 OSI七层模型
在教科书上的协议分层模型,OSI七层模型,从硬件到软件分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
2.3.2 TCP/IP五层(或四层)模型
OSI七层模型只是存在于教科书上,并不是在真实世界中存在的,真实世界中的网络模型更简单一些,就是常说的TCP/IP五层模型(或者说是四层模型,因为往往会忽略物理层这一偏向于硬件的层)
各层作用:
应用层:具体的应用程序
传输层:只关注起点和终点,不必关注具体的通信细节
网络层:针对网络上的任意两台主机,完成一个通信路径的规划,以及具体传输
数据链路层:实现了两个相邻设备之间的数据通信
物理层:硬件设备;网络通信的基础设施(例如网线)
这里举一个网购的栗子,来更好的理解TCP/IP五层模型
我在淘宝上买一件衣服,就需要填写我的收货人地址和电话,卖家发货也需要填写发货人地址和电话,我和卖家只用关心起点和终点,我们相当于传输层。卖家要把货交给快递公司,快递公司就需要规划一个具体的运货路线,快递公司相当于网络层;在快递公司将包裹运到目的地范围后,快递小哥来进行送货,该环节就是数据链路层;公路,铁路,航道…等基础设施就是物理层
2.3.3 网络设备所在分层
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也就是TCP/IP五层模型的下四层
对于一台路由器,它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层
对于一台交换机,它实现了从数据链路层到物理层,也就是TCP/IP五层模型的下两层
对于集线器,它只实现了物理层
真实情况并不是这样,目前路由器和交换机的概念以及比较模糊,例如一些比较好的路由器、交换机,也往往会实现一些传输层及应用层的内容(例如舆情分析中,路由器、交换机可能会解析数据包,来提取用户所发送的信息是什么)
3.封装和分用
我们以在qq上发送信息为例,来了解数据在各个层的传输过程
假设用户A给B在2022.8.29 15:30发送了一条“Hello”的消息
1.应用层——qq软件会将这些内容打包成一个应用层数据包,然后将这个数据包传给操作系统的传输层
2.在传输层中就会把刚才的数据包打包成一个传输层数据包(假设此处使用UDP协议),传输层将这个数据报传输给网络层
3.网络层也会把这个数据报打包成一个网络层数据报(例如此处使用IP协议),网络层会把这个数据报交给数据链路层
4.数据链路层将该数据报封装成数据链路层数据报(例如使用“以太网”协议,将数据按照以太网数据帧的格式进行组织),数据链路层将这个数据交给物理层
5.物理层会把这个数据以二进制的方式,转换成0/1这样的光电信号,并通过网线/光纤/无线网络等方式进行传输
6.光电信号到达接收端主机,先到达接收端的物理层,转换成0/1二进制序列,也就得到了一个以太网数据帧,把这个数据帧交给数据链路层
7.数据链路层对这个以太网数据帧进行分析,去掉帧头和帧尾,获取到中间负载交给上层协议(网络层)
8.网络层通过IP协议格式解析数据,去掉IP报头然后将获取到的负载交给上层传输层
9.传输层的UDP协议再解析这个数据,去掉UDP报头交给应用层
10.应用程序在这里按照应用层的协议再解析,取出其中的关键信息,然后将内容显示再屏幕上。
上面从应用层到物理层数据的层层包装的转变过程称为封装,当接收方收到数据时会将已经封装好的数据进行层层拆分,这个过程叫做分用。