目录
一、IP地址
1、概念
IP地址主要用于标识网络主机、其他网络设备的网络地址。
简单理解就是,IP地址用来定位主机在网络中的位置~
IP地址类似于现实生活中,一个人的家庭住址~
2、格式
IP地址是一个32位的二进制数,通常用“.”把它分割为4部分,即a.b.c.d的形式~
其中,每个部分都是一个8位的二进制数(a,b,c,d都是0~255之间的十进制整数)~
3、特殊IP
127.*的IP地址用于本机环回测试(即本机到本机的网络通信),通常是127.0.0.1。
通过IP地址,我们就可以确定数据是从哪一台主机传输到另一台主机,但是把数据传输到目标主机后,如何确定由哪个进程来接收数据呢?因此就有了端口号的概念~
二、端口号
1、概念
端口号可以标识主机中发送数据、接收数据的进程~
简单理解就是,端口号用来定位主机中的进程~
例如,我们在寄快递时,不光要写清楚收件人的地址(IP地址),还要写清楚收件人的姓名(端口号)~
2、格式
端口号是0~65535范围的数字,进程可以通过绑定一个端口号,来发送和接收数据。
(一个进程启动后,系统会随机分配一个端口)
注意:一个进程可以绑定多个端口号,但是两个不同的进程不能绑定同一个端口号~
有了IP地址和端口号,就可以定位到网络中的唯一一个进程,但是网络通信是基于二进制0/1数据来传输,那么如何确定发送或接收的数据是什么类型呢?图片、视频、文本、其他?因此就需要使用网络协议来规定双方的数据格式。
三、协议
1、概念
协议,全称是网络协议,是网络通信经过的所有网络设备都必须共同遵守的一组约定、规则,只有遵守这个协议,计算机之间才能相互通信。
2、五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
(1) 源IP:标识源主机;
(2) 源端口号:标识源主机中,本次通信时,发送数据的进程;
(3) 目的IP:标识目的主机;
(4) 目的端口号:标识目的主机中,本次通信时,接收数据的进程;
(5) 协议号:标识发送进程和接收进程双方约定的数据格式。
3、协议分层
由于实际中的网络通信非常复杂,需要约定的协议也非常复杂,因此大佬们通过协议的不同功能将协议进行了分层,并且约定:
(1) 上层协议调用相邻的下层协议(不能隔层调用);
(2) 下层协议给上层协议提供服务。
3.1 分层的好处
(1) 对协议进行封装,降低学习协议的成本,我们只学习需要的协议,而不必全部都学习;
(2) 方便维护,尤其是可以针对某层协议进行替换。
3.2 OSI七层模型
OSI七层模型既复杂又不实用,所以实际组建网络时,并不使用OSI七层模型。
3.3 TCP/IP五层(四层)模型
TCP/IP模型就是把OSI七层模型中的上面三层合成为一个应用层,下面四层都一样,只是换了个说法~
每一层的作用:
应用层:负责应用程序间沟通,我们的网络编程主要就是针对应用层。
传输层:端到端的传输,负责两台主机的传输。
网络层:点到点的传输,负责规划传输数据的路线。
数据链路层:相邻节点之间的传输方式。
物理层:底层基础设施,负责光/电信号的传递方式。
举个栗子:
张三在淘宝上下单一件商品后,商家就需要关心发件人信息和收件人信息(传输层)
快递公司就需要规划处一条合理的送货路线(网络层)
快递在每个中转站之间的运输方式可能也各不相同,可能是飞机运输、卡车运输……(数据链路层)
各种运输方式所需要的基础设施,如公路、铁路、航线……(物理层)
由于物理层是硬件方面的,其他四层是软件方面的,所以有些资料也称为TCP/IP四层模型~
四、封装和分用
封装和分用描述了一次网络通信过程中是如何传输和接收数据的。
1、封装
假设我们通过主机A向主机B发生一条QQ消息:“Hello~”
主机A的发送过程:
应用层:
①QQ应用程序内部自己约定好一个应用层协议(具体内容我们无法知晓),当用户输入信息后,应用程序会把用户输入的字符串构造成约定好的应用层协议的报文。
假设QQ生成的报文是这样的:
②接下来,QQ应用程序就会把生成的报文交给传输层协议处理。
传输层是操作系统内核实现的,应用程序通过代码调用操作系统提供的API,就可以把应用层的数据交给传输层~
传输层:
传输层中有很多协议,其中最典型的是TCP协议,以TCP协议为例:
①TCP协议会在应用层传输过来的数据前面加上一个TCP的协议报头~
报头中包含很多信息,最关键的信息是源端口号和目的端口号~
②传输层再把当前TCP数据报交给网络层进行处理。
网络层:
网络层中最典型的协议就是IP协议~
(这应该就是TCP/IP五层模型的名字由来吧,以两个典型的局部代指整体)
①IP协议会把TCP传来的数据报视为一个整体,作为载荷部分,然后在前面再加上一个IP协议报头~
IP协议报头中也包含很多信息,其中最关键的信息是源IP和目的IP~
②网络层再把当前IP数据包交给数据链路层处理。
数据链路层:
数据链路层中最典型的协议是“以太网”~
我们电脑上插的以太网线也是遵守“以太网”这个协议的,因此,以太网协议既管数据链路层,又管物理层。
①数据链路层拿到IP数据包后,会在其前面加一个以太网数据帧的帧头,后面加一个帧尾。
②数据链路层再把当前数据交给物理层进行处理。
物理层:
此时,数据已经组织好了,物理层就通过一些硬件设备(网卡)把这些数据的二进制bit流转换成光信号/电信号进行传输。
注意:不同的协议层对数据包有不同的叫法,在传输层叫做数据段,在网络层叫做数据报,在数据链路层叫做数据帧(可以不必特意区分)~
上述数据从上到下,层层添加信息的过程,就称为——封装
2、分用
分用就是封装的逆过程:把接收到的数据,从下到上,层层去掉信息的过程,就称为——分用
如果说封装是在进行“包装快递”的操作,那么分用就是“拆快递”的操作~
经过物理层、数据链路层、网络层、传输层的去信息处理之后,主机B的QQ应用程序最终就会收到主机A发来的QQ信息~
五、网络编程相关概念
1、发送端:在一次网络数据传输时,数据的发送方进程,称为发送端。发送端主机即网络通信中的源主机。
2、接收端:在一次网络数据传输时,数据的接收方进程,称为接收端。接收端主机即网络通信中的目的主机。
3、收发端:发送端和接收端两端,简称为收发端。
4、请求和响应:
一般来说,获取一个网络资源,涉及到两次网络数据传输:
第一次:请求数据的发送;
第二次:响应数据的发送。
5、服务器:在常见的网络数据传输场景下,把提供服务的一方进程,称为服务器,可以对外提供服务。
6、客户端:获取服务的一方进程,称为客户端。
7、常见的服务器客户端模型:
常见的场景下,客户端是指给用户使用的程序,服务端是提供用户服务的程序。
(1) 客户端向服务器发送请求;
(2) 服务器读取请求并解析,执行相应的业务处理;
(3) 服务器返回相应:发送业务处理结果;
(4) 客户端根据响应数据,展示处理结果。