一些基本概念认识
IP地址
概念:
IP地址用于定位主机的网络地址,标识了网络上设备所在的位置。也就是说主机在哪。
格式:
IP地址是一个32位的二进制数,通常被分割为4个字节。通常我们使用“点分十进制”的方式来表示主机的IP地址——>表示为a.b.c.d的形式,其中abcd都是取值在0~255的十进制整数。(0~255的原因是因为4个字节,每个字节是8位二进制数,而8位二进制数最大的数转化为10进制为255)。
如:
127.0.0.1——>01111111.00000000.00000000.00000001。
01111111对应的就是127.
端口号
概念:
端口号标识了一个具体的应用程序,用于定位主机中的进程。也就是说有了IP地址仅仅是定位了主机的位置,但是我们的程序在哪里运行还不确定,这时就需要端口号来帮助我们确定具体的应用程序。
格式:
端口号是0~65535范围内的数字。至于为什么是这个范围,可以看一下为什么端口号最大为65535? - 日行一善g - 博客园 这篇文章。
协议
概念:
协议简单来说就是约定。网络协议是网络通信经过的所有网络设备都必须要遵守的一组约定。只有遵守了这个约定,计算机和计算机之间才能相互交流。
协议通常由三要素组成:
语法:数据与控制信息的格式或者结构。如:在打电话时,电话双方要使用相同的语言。
语义:要做什么,完成何种动作以及做出哪种反应。
时序:事情实现顺序的详细说明。(何时进行通信,先讲什么后讲什么)
作用:
类似于:让不同厂商生产的计算机之间能够进行流畅的通信这样的作用。
协议分层
概念:
在网络通信需求场景复杂的情况下,实现的功能呢也会比较复杂,也就是说协议也会变得复杂。
这时,针对这个复杂的大协议,将之拆分成若干个相对简单的小协议,随着将协议拆分成小协议(每个协议负责一部分的功能),此时可以发现某些小协议之间,起到的作用和功能是类似的。针对这些小协议再进行“分类”(将功能才不多的协议放在同一层)。
作用:
降低了学习和维护的成本。
可以灵活的针对某一层的协议进行替换。
最重要的就是TCP/IP五层(四层)模型和OSI七层模型。但是OSI七层模型目前只存在于课本中,所以我们重点了解TCP/IP五层(四层)模型。
TCP/IP五层(四层)模型
物理层:约定了网络通信中的基础硬件设备是什么样的。
数据链路层:相邻两个节点之间如何去传输。
网络层:负责地址管理和路由管理。
传输层:端到端之间的传递。
应用层:负责应用程序间沟通。
客户端
就是发送方,发送指令到服务器。
服务器
就是接收方,接收客户端的指令对其进行响应。
当然,客户端和服务器都是相对而言的。
请求
类似于在浏览器的搜索栏输入想要搜索的内容,然后敲回车。
响应
类似于敲回车后,浏览器页面向用户反馈的内容。
两台主机之间的网络通信流程
以QQ为例,A给B发送一个hello。
发送方
1.应用层
用户在输入栏输入hello这个字符串,QQ这个应用程序将这个字符串给构造成一个应用层数据报。
所谓的“应用层数据报”本质上就是一个遵守了约定格式的字样。
但是这个约定的格式只有开发该程序的程序员知道,所以我们在这里假设一下,假设这个格式为:发送方QQ号;发送时间;接收方QQ号;消息内容。
程序要调用操作系统的api,把这个应用层数据报交给传输层。
2.传输层
在传输层中,要把上述应用层数据,构造成传输层数据报。
传输层使用到的协议,最出名的就是UDP和TCP协议,比如此处是使用UDP,就要构造UDP数据报(在应用层数据基础上,加上UDP报头)
这是另一个特定格式的字符串,此处就像字符串拼接一样,将报头和后面的数据拼接到一起。
所谓的报头就是一个标签,通过标签表示出当前要把这个消息怎么去进行传输。
传输层将上面这个UDP数据报交给网络层。
3.网络层
网络层最知名的协议是IP协议。
IP协议要基于上述数据打包成一个IP数据报。
这个也相当于是一个字符串,包含了另外一组的信息。
网络层数据报准备好,还需要进一步交给数据链路层。
4。数据链路层
数据链路层最知名的协议是“以太网”。
基于上述过程,还要打包成一个“以太网数据帧”。
接下来这个数据要继续往下层传递,交给物理层。
5.物理层
将上述二进制的数据转换成电信号/光信号。此时才是真正的将数据发送了出去。
封装
以上过程,从应用层到物理层,“层层加码”的这个过程称为“封装”。
接收方
1.物理层
网卡接收到的是光信号和电信号,是在物理层把这个信号转换成二进制数据的。
转换回的这个数据其实就是一个以太网数据帧。
将这个二进制数据传给数据链路层。
2.数据链路层
数据链路层需要去掉这个数据的帧头和帧尾,取出中间的载荷,交给更上层的网络层IP协议,以太网数据帧帧头里也会记录这个载荷是不是应该IP数据报。
3.网络层
IP协议对这个数据继续进行解析,解析出IP报头,取出IP协议的载荷,把这里得到的数据报再向上传递给上层传输层。
IP数据报里面记录,载荷是UDP还是TCP。
4.传输层
UDP再进行解析,取出报头,取出载荷,交给对应的应用程序。
UDP报头里面有一个重要的字段“目的端口”。目的端口是和一个具体的应用程序关联在一起的,因此可以根据这个端口来把数据交给应用程序。
5.应用层
qq应用程序会根据这个应用层协议对这个数据进行解析,显示到页面上。
至此,A向B传输一个hello这个过程完毕。
分用
上述过程中,从下到上层层解析,这个过程称为“分用”。