一.协议
协议是一种约定。
为了让不同的计算机厂商生产出来的计算机能够相互顺畅的通讯,提出一个需要大家共同遵守的约定,即网络协议。
1.协议分层
网络通信协议的设计非常复杂,因此需要进行协议分层 ,使其具有模块化。
协议分层可以实现解耦合,让软件维护的成本更低。
2.OSI七层模型
OSI七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范 。它采用框架性 的设计方法,将网络从逻辑上分为七层,每一层都有相关的,相对应的物理设备,主要作用是帮助不同类型的主机实现数据传输。
七层模型自顶向下分别为:
- 应用层:针对特定应用的协议。
- 表示层:设备固有数据格式和网络标准数据格式的转换。
- 会话层:通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层及以下。
- 传输层:管理两个节点之间的数据传输。负责可靠传输(确保数据可靠的传送到目的地址)。
- 网络层:地址管理与路由选择。
- 数据链路层:互联设备之间传送和识别数据帧。
- 物理层:以"0","1"代表电压的高低,灯光的闪灭。界定连接器和网线的规格。
但是它既复杂又不实用。
实际操作过程中,会话层和表示层 是不可能接入到操作系统中的,所以在工程实践中,最终落地的是5层协议。
3TCP\IP五层模型
TCP\IP通讯协议采用了5层的层级结构,每一层都要呼叫它的下一层所提供的网络来完成自己的需求。分别为:
- 物理层:负责光、电信号的传递方式。
- 数据链路层:负责设备之间的数据帧的传送和识别。
- 网络层:负责地址管理和路由选择。
- 传输层:负责两台主机之间的数据传输。
- 应用层:负责应用程序间沟通。
为什么制定TCP\IP协议?本质是相互通信的两台主机之间的距离变远了 ,为了解决其所产生的一系列问题。
因此,TCP\IP协议的本质是一种解决方案 ,其能分层,前提是因为问题们本身能分层。
发送数据不是目的,只是手段,使用数据才是目的。
朴素的理解协议:所谓协议,就是通信双方都认识的结构化的数据类型。
二.网络传输基本流程
局域网能直接通信,每台主机(局域网),都要有唯一性的标识:Mac地址。
Mac地址
Mac地址用来标识数据链路层中相连的节点。
长度为48位,即6个字节,一般用16进制数字加冒号的形式来表示。
Mac地址在网卡出厂时就确定了,不能修改,通常是唯一的。
以太网中,任何时刻,只允许一台机器向网络中发送数据 ,如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞 。所以发送数据的主机要进行碰撞检测和碰撞避免。
因此在局域网通信中,主机对收到的报文确认是否是发给自己的,是通过目标Mac地址判定的。
所谓报文,即协议报头+有效载荷(数据)。
如下图为两台主机在同一个局域网之间的通信过程:
从图中可知,数据在网络中发送的时候,一定最终要在硬件上跑。
网络协议的共性:
- 报头和有效载荷分离的问题------解包。
- 除了应用层,每一层协议,自己的有效载荷,应该交给上层的哪一种协议------分用。
三.跨网络传输流程
IP地址
IP 协议有两个版本, IPv4 和 IPv6。 其中IPv4是最常用的 IP 协议 , 没有特殊说明的, 默认都是指 IPv4:
- IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址;
- 对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数;
- 我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
跨网段的主机的数据传输, 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示:
网络层(即IP层)及其向上的所有层所看到的所有的报文都是一样的,都至少是IP报文。
IP可以屏蔽底层网络的差异,所有的网络都是IP网络。
IP 在网络中,用来标识主机的唯一性。
四.端口号
端口号 (port) 是传输层协议的内容:
- 端口号是一个 2 字节 16 位的整数;
- 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
- IP 地址 + 端口号能够标识网络上的某一台主机的某一个进程;
- 一个端口号只能被一个进程占用
由此可知,网络通信的本质就是进程间的通信。
我们将基于IP地址+端口号的进程间通信,称为socket通信。
端口号范围划分:
- 0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的.
- 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的.