一、IP地址
描述了网络上的一个主机的位置
IP地址本质上是一个32位的整数,由于32位的整数不方便人来读和记忆,所以常见的操作是将这个32位的整数,按照每个字节(一个字节8位)分成四个部分,中间使用.分割。点分十进制
例如:123.139.170.255 代表的32位整数如下:
01111011 10001011 10101010 11111111
二、端口号
描述了一个主机上的某个应用程序.
端口号本质上是一个2个字节(16位)的无符号整数
范围是0-65535
三、协议
要想进行有效的通信,前提就是能够明确通信协议~~
本质上就是约定,发出来的数据是什么样的格式,接收方按照对应的格式来进行解析~~
四、协议分层
网络通信这个过程,其实很复杂,里面有很多很多细节。如果只是通过一个协议来约定所有的协议,这个协议就会非常庞大,复杂~~因此更好的办法就是把一个大的复杂的协议,拆成多个小的,更简单的协议,每个协议负责一部分工作~~
协议分层的好处:
以下图为例来解释分层协议的好处~~
观察图可以看出在语言方面存在两种协议,即汉语和英语,在通信设备上也有两种协议,即无线电通信方式和连线电话方式。
好处一:每层协议不需要理解其它层协议的细节(更好的做到了封装)
打电话的人并不需要理解电话的工作原理,只需要协调两个人的语言;而通信设备并不需要听得懂两个人的语言,只需要协调双方使用的是同种设备进行通话~~
好处二:把对应层的协议替换成其他协议(更好的解耦合)
打电话的人,可以不使用有线电话,可以使用无线电话
打电话的人,也可以使用英语,不使用汉语~~
五、封装
举个栗子进行解释:
用户A在键盘上,输入了一个“hello”,想要将这个信息发送给B,按下发送键~~
应用层(QQ应用程序)
根据用户输入的内容,把数据构造成一个应用层的协议报文
例如下面这种格式的报文:
应用层协议就调用操作系统提供的API(称为Socket API),把应用层的数据,交给传输层(此时就已经进入操作系统内核了)
传输层(操作系统内核)
根据传过来的数据,基于当前使用的传输层协议来构造一个传输层的协议报文,传输层最典型的协议,UDP,TCP,此处以TCP为例
进行上述处理后,接下来就会把这个传输层的数据报,交给网络层
网络层(操作系统内核)
拿到了完整的传输层数据报,就会再根据当前使用的网络层协议(例如IP),再次进行封装~~把TCP数据报构造成IP数据报。还是添加上一个协议报头
紧接着,当前的网络层协议,就会把这个IP数据报,交给数据链路层
数据链路层(驱动程序)
在刚才的IP数据报基础上,根据当前使用的数据链路层的协议,给构造成一个数据链路层的数据报.典型的数据链路层的协议,叫做“以太网”,就会构造成一个“以太网数据帧”
此处比拟的总路径为:西安-》长春-》白城-》安广,代表着从西安去安广镇的路径,数据链路层里写的地址是相邻点之间的地址。
物理层(硬件设备)
物理层的任务,就是根据上述的以太网数据帧(其实就是一组0 1)把这里的0 1 变成高低电平,通过网线传输出去。或者把这里的0 1 变成高频/低频的电磁波,通过光纤/无线的方式传播出去~~
通过以上步骤,可以视为将发送信息的一方所需要的操作进行逐个封装,进而发送出去~~
而B方收到信息后的一系列处理,将进行逐级的分用传达给B~~
六、分用
物理层(硬件设备,网卡)
B的主机的网卡感知到了一组高低电平~~然后就会把这些电平翻译成0 1 的一串数据~~
这一串 0 1 就是一个完整的以太网数据帧.
物理层就会把这个数据交给数据链路层进行处理~
数据链路层(驱动)
数据链路层负责对这个以太网数据帧进行解析,去掉帧头和帧尾,取出里面的IP数据报,然后交给网络层协议
网络层(操作系统)
网络层协议(IP协议)又会对这个IP数据报进行解析,去掉IP协议报头,取出里面的TCP数据报再交给传输层
传输层(操作系统内核)
传输层协议(TCP)又会对这个TCP数据报进行解析,去掉TCP报头,取出里面的数据报,交给应用层~~
应用层(应用程序,QQ)
应用层就会调用Socket API 从内核中读取到这个应用层数据报~·再按照应用层协议进行解析~~
最后根据解析结果给显示到窗口中。
上述过程即是分用的过程。
分用就是封装的逆过程,封装是从上往下,数据依次被加上了协议报头(包快递);分用是从下往上,数据依次被去掉协议报头(拆快递)。