一、网络通信基础
1.IP地址
2.端口号
我们知道一台主机上可能会有多个程序来同时使用网络,端口号就是用来区分一台主机上的多个程序的。简单来说:端口号就是用来定位主机上的进程的。
二、认识协议
网络协议就是通信双方用于发送/接受数据格式的约定。
协议最终体现在网络中传输数据包的格式。(值得注意的是在网络通信中 协议是非常关键的)
1.五元组
在TCP/IP协议中,用五元组来表示一个网络通信:
1.源IP:标识源主机
2.源端口:标识源主机中该次通信发送数据的进程
3.目的IP:标识目的主机
4.目的端口:标识源主机中接收该次通信数据的进程
5.协议类型 :标识发送和接收进程双方约定的数据包格式
2.协议分层
由于网络通信这个过程非常复杂,如果我们设计一个协议,完成网络通信中方方面面的问题,势必会使这个协议非常复杂,非常庞大。
所以我们选择拆分这种做法,把一个大的协议拆成若干个小的,功能单一协议,这么做又会导致拆完后的协议太多了,甚至会有几十上百个。所以我们将这些小的协议归类,引入分层这个概念。
协议分层:只有相邻两层的协议可以进行交互。上层协议可以调用下层协议。下层协议可以给上层提供服务。(协议之间的交互不能跨层进行)
这样做的好处在于:
1.上层协议不需要了解下层协议的细节
2.分层之后,灵活的替换其中的某一层,对于整体的工作过程影响很小。
1.OSI七层网络模型
但是这一套分层的体系过于复杂,实际真实的网络分层方式是更简化的。
2.TCP/IP五层(四层)协议模型
应用层 | 应用程序之间的沟通 |
传输层 | 两个任意设备之间的通信(不考虑中间过程,只考虑起点和终点) |
网络层 | 两个任意设备直接如何进行通信(这两个设备之间可能隔着很多的交换机和路由器) |
数据链路层 | 完成两个相邻的设备之间如何进行通信的(通过网线把电脑连到交换机|路由器上) |
物理层 | 规定了网络通信的一些硬件设施符合的要求 |
有些资料把物理层和数据链路层看作一个整体。
主机: 工作过程涉及到 从物理层-->应用层
路由器 : 工作过程涉及到 从物理层--.>网络层
交换机: 工作过程涉及到 从物理层-->数据链路层
三、网络数据通信的基本流程
网络传输的数据,本质上都是“字符串”或者“二进制的bit流”
例如我们通过 qq 发送hello给对方
1.应用程序获取到用户输入,构造一个应用层的数据包。这个应用层数据包就会遵守应用层协议(往往是开发这个程序的程序员自己定义的(此处假设这样的协议格式:发送者的qq,消息的时间,消息正文))。
2.应用程序调用 传输层提供的接口(API),把数据交给传输层,传输层拿到数据之后,构造出“传输层数据包”。传输层的协议主要是:TCP UDP
3.传输层构造好数据后,继续调用网络层的API,把传输层的数据包交给网络层,网络层继续进行处理。 网络层最主要的协议:IP协议
4.IP协议继续调用数据链路层的API,把IP数据包交给数据链路层。
数据链路层中核心协议: “以太网”
5.以太网会继续把这样的数据交给硬件设备(网卡)网卡会把上述二进制数据,最终以 光信号/电信号/电磁波信号传播出去。
从上层到下层,数据都要进一步加工(添加报头)这个过程就叫做封装。
分用,数据到达接收方主机,逐层进行解析:
1.数据到达接收方网卡,光电信号,网卡把光电信号还原成二进制0101,把二进制数据交给上层数据链路层。
2.数据链路层按照以太网协议解析,把报头和报尾取出来,剩下的载荷往上传递给网络层。
3.网络层拿到这个数据之后按照IP协议的格式解析,再把载荷数据交给传输层。
4.传输层拿到数据后按照TCP协议来解析,取出载荷,交给应用层。
5.qq应用程序,解析应用层数据,拿到关键信息展示到页面上。