一、网络通信基础
1.IP地址
IP地址描述了一个设备在网络上的位置.主要用于标识网络主机,其他网络设备的网络地址.简单来说IP地址用于定位主机的网络地址.
IP地址是一个32位的二进制数,为了方便表示往往把IP地址表示成"点分十进制",用三个 . 把4个字节分为4个部分,每个部分一个字节.范围位0 - 255.比如"192.168.2.101"
2.端口号
描述了一个主机上的哪个应用程序.有了IP我们可以确定发送数据到哪台主机,但是一个主机上有很多程序在使用网络,主机收到数据之后就要区分要交给哪个程序.
每个程序在进行通信的过程中都需要一个端口号,这个端口号可以是系统自动分配,也可以是用户手动指定.同一个主机上的不同程序之间使用的端口号不能相同.
端口号是0 - 65535范围的数字,在网络通信中,进程可以绑定端口号来接收和发送网络数据.但是有一些端口号是不能随意指定的,这点需要牢记.
一个端口号是否可以被多个进程绑定?
一个端口号不能被多个进程绑定,因为端口号的作用就是唯一标识一个进程,如果绑定一个已经被绑定的端口号,就会出现绑定失败的问题.
一个进程是否可以绑定多个端口号?
一个进程可以绑定多个端口号,这与"端口号必须唯一标识一个进程"是不冲突的,只不过现在这多个端口号唯一标识是同一个进程.
3.协议
协议指的是网络协议,也就是网络通信的规则.是经过所有网络设备都需要共同遵循的统一约定.计算机有很多,操作系统也有很多,计算机网络硬件设备也有很多.有了协议就算是不同厂家生产出来的设备彼此之间也能进行通信.
常见的协议有TCP协议和UDP协议
二、协议
1.协议分层
协议分层的初心就是为了把一个复杂的协议分成几个更简单的协议.
这样做能更加方便学习和使用,上层协议直接调用下层协议即可,不需要了解下层协议的细节.相当于把下层协议的细节封装好了.而且如果某一层协议进行了替换也对其他层协议没有影响.
2.OSI七层协议
OSI七层协议是一个逻辑上的定义和规范,它把通信网络划分为七个不同的层级,但实际上这个协议并没有被广泛的采取使用,而主要使用的网络协议是TCP/IP协议.所以这里我们只是简单的提一下OSI协议
OSI七层协议把网络协议分为了: 应用层, 表示层, 会话层, 传输层, 网络层, 数据链路层, 物理层
3.TCP/IP协议
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫下一层提供的网络来完成自己的需求.
各层级的作用:
应用层:负责应用程序之间的沟通.一般就是应用程序数据之间的处理和发送.如简单的电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等.
传输层: 负责两台主机之间的数据传输.负责关注网络数据包的起点和终点.
网络层: 负责地址管理和路由选择.也就是数据包从起点到终点要走哪条线路.
数据链路层: 主要负责两个相邻节点之间数据的传输.
物理层: 负责光电信号的传递方式,也就是通信过程中的基础设施.
4.网络设备所在分层
对于一台主机它的操作系统内核实现了从传输层到物理层的内容,也就是TCP/IP五层模型的下四层.
对于路由器,它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层.
对于交换机,它实现了从数据链路层到物理层,也就是TCP/IP五层模型的下两层.
这里我们说的交换机和路由器是传统意义上的交换机和路由器,而现在发展的路由器和交换机实现了更多层次的协议,有更强大的功能.
三、封装和分用
在协议分层的背景下,数据会根据封装, 分用来来进行网络传输.
封装:发送方发送数据会从应用层依次往下,把数据进行封装,交给对应层次的协议,进行封装.
分用:接收方接收数据会从物理层一次向上,把数据进行分用,交给对应层次的协议,进行解析.
不同协议层对数据包有不同的称呼,在传输层叫段(segment),在网络层叫数据报(datagram),在数据链路层叫帧(frame).
封装:应用层数据通过协议栈发到网络上时,每层协议都需要加上一个首部长度(header).首部信息中包含了一些类似于首部多长,载荷(payload)有多长,上层协议是什么等信息.
分用:数据封装成帧后发到传输介质上,到达目的主机后每层协议在剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理.
下面以QQ发送信息的案例来讲解一下封装和分用(忽略数据在中间路由器和交换机之间的传输)
封装:
1.应用层:QQ拿到你要发的信息,按照应用层协议包装成应用层数据包,然后交给传输层.
2.传输层:传输层会把应用层传输过来的数据包当作一个整体.在构造一个传输层的数据包.应用层涉及到的最主要的协议就是UDP和TCP协议.假定此处是使用UDP协议来进行通信,就会加上一个UDP数据报头
拼好传输层数据包之后,就要把数据包进一步交给下层,网络继续进行封装.
3.网络层:这里就这涉及到IP协议,网络层IP协议,把传输层传过来的数据包当成一个整体,在拼上一个IP协议的报头构造成一个IP数据包
这里IP协议就是把整个UDP数据包视为一个整体,构造完完整的IP数据包之后,IP协议继续调用数据链路层api,把数据包交给数据链路层这里的协议处理.
4.数据链路层:数据链路层这里涉及到的核心协议就是以太网.这里也是把IP数据包视为一个整体,在这基础上添加帧头和帧尾,形成以太网数据帧.
然后交给物理层
5.物理层
把上述这样的以太网数据帧,二进制结构(一串0 1结构的数据),转换成光信号/电信号/电磁波然后进行发送.
分用:
不考虑中间过程,假定数据包已经到达接收方的网卡,B处理的过程就称为分用.
1.接收方收到光信号/电信号/电磁波,就会把这些物理信号转换成数字信号(二进制的0 1)的到一个以太网数据帧,然后进一步把这个数据帧交给数据链路层.
2.数据链路层会按照以太网数据帧的格式来解析,取出其中的载荷,交给上层协议.
3.网络层会按照IP协议的格式进行解析,取出其中的载荷,在交给上层协议.
4.传输层会按照UDP协议格式来进行解析,取出其中的载荷,在交给上层协议.
5.应用层会按照QQ应用程序内部的应用层协议格式来解析数据.
然后QQ拿到这些信息之后就会在窗口弹出提示,把信息显示在聊天窗口.
分用就是封装的逆过程.