目录
一、IP地址
1、定义
2、格式
(1)、A类地址
(2)、B类地址
(3)、C类地址
(4)、特殊地址
二、端口号
三、协议
四、协议分层
1、定义
2、分类
(1)、OSI七层网络模型
(2)、TCP/IP五层网络模型(当下广泛使用的网络模型)
五、封装和分用
1、封装
(1)、应用层封装数据
(2)、传输层处理应用层的数据
(3)、网络层处理传输层的数据
(4)、数据链路层处理网络层的数据
(5)、物理层处理数据链路层的数据
2、分用
(1)、物理层收到二进制数据
(2)、数据链路层接收物理层数据
(3)、网络层接收数据链路层数据
(4)、传输层接收网络层数据
(5)、应用层接收传输层数据
3、交换机和路由器
(1)、交换机
(2)、路由器
六、主机之间的网络通信流程
1、客户端
(1)、定义
(2)、核心工作
2、服务器
(1)、定义
(2)、核心工作
3、请求
4、响应
5、网络通信流程
IP地址是描述的一个主机在互联网的具体位置,互联网上的每一台主机和网络都被分配了一个IP地址。
IP地址是一个32位的二进制数,通常是4个8位二进制数即4字节。
IP地址通常表示成a.b.c.d的形式,其中每一位可以表示0-255的十进制整数。
每个IP地址又可分为两部分即网络号部分和主机号部分:网络号表示其所属的网络段编号,主机号则表示该网段中该主机的地址编号。根据网络规模大小还可以分成A,B,C,D,E五类。
在IP地址的四段编码中,第一段编码为网络编码,后三段编码为主机编码。用二进制表示A类IP地址由1字节的网络地址和3字节主机地址组成。A类IP地址中网络的标识长度为8位,主机标识的长度为24位。
A类网络地址数量较少,可以用于大型网络,地址范围从1.0.0.0到126.255.255.255,子网掩码为255.0.0.0。
在IP地址的四段编码中,前两段编码为网络编码,后两段编码为主机编码。用二进制表示B类IP地址由2字节的网络地址和2字节主机地址组成。B类IP地址中网络的标识长度为16位,主机标识的长度为16位。
B类网络地址适用于中等规模的网络,地址范围从128.0.0.0到191.255.255.255,子网掩码为255.255.0.0。
在IP地址的四段编码中,前三段编码为网络编码,最后一段编码为主机编码。用二进制表示C类IP地址就由3字节的网络地址和1字节主机地址组成。C类IP地址中网络的标识长度为24位,主机标识的长度为8位。
C类网络地址数量较多,适用于小规模的局域网络,地址范围从192.0.0.0到223.255.255.255其子网掩码为255.255.255.0。
- 地址0.0.0.0对应当前主机。
- 地址127.0.0.1到127.255.255.255是用于回路测试
服务器有很多应用程序,每个应用程序都对应一个端口号。只有通过端口号客户端才能访问服务器。端口号常用来区分一个主机上的应用程序,我们可以通过端口号去寻找应用程序,并且每台电脑的端口号不能重复。
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
协议是通信双方遵守的同一组约定,发送方约定了一个发送数据的格式,接收方也得理解这个格式,双方相互匹配才能够进行正确的通信。
例:
网络传输本质上都是通过网线等进行传输信息,传输的是一系列高低电平表示0和1的二进制位数,因此在传输前就需要让发送发和接收方约定好每组0和1的意思,这就是协议.
在网络通信中面对复杂的环境需要约定的协议也非常复杂,但是一个协议太复杂不利于管理和使用,因此可以将其拆分为多个协议。
因为协议是可以拆分的,所以存在有些小的协议作用或者定位是类似的。对此我们可以针对这些小协议进行分类,同时针对这些不同的类别进行分层。
分层相当于是约定了层级与层级之间的调用关系:要求上层协议调用下层协议,下层协议给上层协议提供支持,不能跨层调用。
优点:
- 分层后层次间耦合程度低,上层协议不必了解下层的细节,下层也不必了解上层的细节
- 方便后续对某一层的协议进行替换
例: 类似于公司的管理机制,上层管理下层,下层为上层服务,但不能跨级调用
注:仅仅存在于教科书
网络通信的下四层不关心传输的数据是做什么的,只有应用层才真正关心数据的用途。
应用层对应的是程序员写的应用程序,下四层则是操作系统内部已经封装好的,因此我们写代码进行网络编程主要工作还是围绕应用层展开的。
- 封装:发送方发送数据,要把数据从上往下,依次交给对应的层次的协议进行封装
- 分用:接收方收到数据,要把数据从下往上,依次交给对应的层次的协议进行解析
例:A向B发送QQ信息
拿到用户数据进行封装,封装成应用层数据包(本质上就是字符串拼接)
传输层拿到上述数据后,应用层要调用传输层提供的API来处理这个数据。传输层有很多协议,最典型的是TCP和UDP。此处以UDP为例,UDP针对上述数据包再进行封装。
一个典型的数据报都是通过报头+载荷的方式构成的,本质上还是字符串拼接。
将整个应用层数据包作为UDP数据包的数据部分(载荷),UDP协议给应用层数据报加上一个UDP报头,就是为了再贴一层标签,从而在标签上填写必要的属性。
UDP数据报已经有了,接下来就要把这个数据报交给网络层的协议。网络层最常见的协议就是IP协议。上述的UDP数据报道道网络层还需要进一步的封装,添加上IP协议报头。
源IP和目的IP就描述了这次传输中,最初的起点和最终的终点。
加上一个IP协议的报头,整个UDP数据报作为IP的载荷
数据链路层最典型的协议叫做以太网,是最常见的网络,平时使用网线上网就是用以太网。
mac地址也叫做物理地址,是描述一个主机在网络上的位置。
它的功能和IP地址很相似但是当下把这两个地址分别作用于不同的用途:
- IP用来进行网络层的路径规划
- mac用来描述数据链路层中两个即将进行传输的相邻节点。
mac是和网卡绑定的,理论上每个设备都会有一个自己的唯一的mac地址,但是IP则不是。
数据链路层就要把上述以太网数据帧交给物理层,物理层要把上述的二进制数据转换成光信号、电信号等进行传输。
接受数据过程和上述封装过程相反,发送方从上到下依次封装新增报头,接受方从下到上依次分用去掉报头。
物理层收到二进制数据后就会对其进行解析,还原成二进制序列。
此时把上述二进制序列数据当作一个以太网数据帧,此处从以太网收到的数据就是要交给以太网协议来处理了。
把帧头和帧尾去掉,取出中间的载荷,再往上交给网络层。
以太网数据帧帧头中有一个消息类型,根据这个类型就可以知道网络层是IP协议。
此时就由网络层的IP协议进行解析数据报,也是去掉IP报头。最重要的还是取出载荷,交给更上层的传输层IP数据报。
报头也有一个字段,标识当前传输层用的是哪个协议。
此处是由UDP来解析处理,去掉报头取出载荷,把数据交给应用层。借助端口号来区分具体的应用程序,每个要接受网络数据的程序都需要关联上一个端口号。
由QQ这个程序进行解析应用层数据报,取出下列字段放到程序界面中。
真实的网络环境中,数据的传输中间可能要经历很多节点进行转发。
交换机会进行分用,从物理层分用到数据链路层,直到当前这个数据报的目的mac不对就行了。
交换机针对这个数据重新封装,从数据链路层封装到物理层,把数据继续转发。
中间的交换机只需要封装分用到数据链路层(只需要重新封装源mac和目的mac)
路由器收到的数据,会从物理层分用到网络层。根据当前得到的目的IP进行下一阶段的寻路操作。IP协议是在一边传输的过程,一边规划路径。
中间的路由器则需要封装分用到网络层(需要重新封装mac地址,同时还需要根据目的IP进行下一阶段的路径规划)
客户端是指与服务器相对应的、为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,客户端一般安装在普通的客户机上,需要与服务端互相配合运行。
客户端为用户提供服务。
- 读取用户输入
- 构造请求,并发送
- 客户端读取服务器的响应
- 客户端把响应转成字符串,并显示出来
服务器端是向网络上的其他机器提供某些服务的计算机系统。接收并储存客户端发送过来的数据或请求,并且对请求进行响应,发送数据给客户端。
- 读取请求并解析
- 根据请求计算响应
- 把响应返回客户端
请求是指向服务器发送要求来获取数据进行相关操作。
响应是指向服务器申请相关操作,服务器在进行处理之后返回相关内容或者返回请求失败的一个回应。