一、 网络通信基础
网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
1.1 IP地址
IP地址用于定位主机的网络地址
(就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。)
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。
1.2 端口号
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
注意:两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
1.3 协议
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。
协议(protocol)最终体现为在网络上传输的数据包的格式。
1.4 五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
1. 源IP:标识源主机
2. 源端口号:标识源主机中该次通信发送数据的进程
3. 目的IP:标识目的主机
4. 目的端口号:标识目的主机中该次通信接收数据的进程
5. 协议号:标识发送进程和接收进程双方约定的数据格式
1.5 协议分层
协议分层类似于打电话时,定义不同的层次的协议:
1.6 TCP/IP五层模型(important)
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层:不关注中间路径,只关心起点和终点(负责两台主机之间的数据传输)
网络层:两个遥远节点之间的路径规划(负责地址管理和路由选择)
数据链路层:关注两个相邻结点的传输(设备之间的数据帧的传送和识别)
物理层:网络通信的基础设施。网线、光纤、网络接口等。(负责光/电信号的传递方式)
1.7 封装和分用
发送方发送数据,要把数据从上到下,交给依次对应的层次的协议,进行封装
接收方接收数据,要把数据从下到上,交给依次对应的层次的协议,进行解析
下面以QQ发消息为例说明封装和分用的过程:
我作为发送方,在编辑框输入一个消息:“吃饭了吗”。发给姐姐。
则会有如下过程:
(1)应用层(qq)拿到上述用户数据进行封装,封装成应用层数据包(本质就是字符串拼接)
(2)传输层拿到上述数据:
应用层调用传输层的api来处理这个数据
传输层有很多协议,其中最典型的就是TCP和UDP
此处以UDP为例:
UDP针对上述数据包在进行封装:
就是给上述应用层数据包加了“报头”变成数据报,一个典型的数据报结构就是:“报头”+”载荷“。这里应用层数据包作为UDP数据报的”载荷“
(3)传输层到网络层:
此时是一个UDP数据报,接下来把他交给网络层的协议
网络层最常见的协议就是IP协议
加上一个IP协议的报头,整个UDP数据报作为载荷
源IP和目的IP就描述了这次传输最初的起点和最终的终点
(4)网络层交给数据链路层
最典型的协议:以太网(数据链路层和物理层)
给上述的IP数据报加上以太网帧头和帧尾变成以太网数据帧
其中mac地址也叫物理地址,也是描述一个设备在网络上的位置,和IP很相似
(5)数据链路层把上述以太网数据帧交给物理层
物理层把上述二进制数据转换成光信号/电信号/电磁信号,进行传输
以上的操作咱们的操作系统都已经封装好了
而接受的过程和上述刚好相反:从下到上,依次分用:
(1)物理层收到高低电平二进制数据
会对这些信号解析,变成二进制序列
(2)从物理层到数据链路层
把上述二进制序列当成一个以太网数据帧,去掉帧头和帧尾交给网络层:
(3)网络层
此时由网络层的IP协议进行解析数据报,去掉IP报头和其他工作
(4)传输层:
由UDP进行解析,将载荷交给应用层
(5)由qq程序解析应用层数据报并取出下列字段放在程序的界面中
真实的网络传输可能还会经过多个节点: