网络基础知识
介绍网络基础知识,譬如网络通信概述、OSI 七层模型、IP 地址、TCP/IP 协议族、TCP 和 UDP 协议等等,
旨在以引导入门、了解为主,其中并不会深入、详细地介绍这些内容;
Linux网络编程入门移步:【Linux网络编程入门】Day5_socket编程基础
网络基础知识
1.1 网络通信概述
1.2 网络互连模型:OSI七层模型
1.2.1 TCP/IP四层/五层模型
1.2.2 数据的封装与拆封1.3 lP地址
1.3.1IP地址的编址方式
1.3.2 IP地址的分类
1.3.3 特殊的IP地址
1.3.4 如何判断2个IP地址是否在同一个网段内1.4 TCP/IP协议
1.5 TCP协议
1.5.1 TCP协议的特性
1.5.2 TCP报文格式
1.5.3 建立TCP连接:三次握手
1.5.4 关闭TCP连接:四次挥手
1.5.5 TCP状态说明
1.5.6 UDP协议1.6 端口号的概念
1.1 网络通信概述
网络通信本质上是一种进程间通信,是位于网络中不同主机上的进程之间的通信,属于 IPC 的一种,通常称为 socket IPC。可以分为三个层次,如下所示:
(1)、硬件层:网卡设备,收发网络数据
(2)、驱动层:网卡驱动(Linux 内核网卡驱动代码)
(3)、应用层:上层应用程序(调用 socket 接口或更高级别接口实现网络相关应用程序)
1.2 网络互连模型:OSI七层模型
1.2.1 TCP/IP四层/五层模型
事实上,TCP/IP 模型是 OSI 模型的简化版本,OSI 七层模型和 TCP/IP 五层模型之间的对应的关系:
还有 TCP/IP 四层模型,与五层模型唯一不同的就是将数据链路层和物理层合并为网络接口层
1.2.2 数据的封装与拆封
数据的封装与拆封:
网络通信中,数据从上层到下层交付时,要进行封装;
同理,当目标主机接收到数据时,数据由下层传递给上层时需要进行拆封。
1.3 IP 地址
Internet 依靠 TCP/IP 协议,在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的主机之间的互联。
在 Internet 上,每一个节点都依靠唯一的 IP 地址相互区分和相互联系,IP 地址用于标识互联网中的每台主机的身份,设计人员为每个接入网络中的主机都分配一个 IP 地址(Internet Protocol Address),只有合法的 IP 地址才能接入互联网中并且与其他主机进行网络通信,IP 地址是软件地址,不是硬件地址,硬件 MAC 地址是存储在网卡中的,应用于局域网中寻找目标主机。
1.3.1IP地址的编址方式
IP 地址中的 32 位实际上包含 2 部分,分别为网络地址和主机地址,可通过子网掩码来确定网络地址和主机地址分别占用多少位
IPv4 地址: 一个 32 位二进制数的地址,由 4 个 8 位字段组成;
IPv6 地址: 采用 128 位地址长度,由8 个 16 位字段组成
网络通信数据包中: IP 地址以 32 位二进制的形式表示;
人机交互中: 通常使用点分十进制方式表示,譬如 192.168.1.1,这就是点分十进制的表示方式
1.3.2 IP地址的分类
根据 IP 地址中网络地址和主机地址两部分分别占多少位的不同,将 IP 地址划分为 5 类,分别为 A、B、C、D、E 五类
1.3.3 特殊的IP地址
这些 IP 地址不能分配给任何一个网络的主机使用
直接广播地址
1.3.4 判2个IP地址是否在同一个网段内
2 个 IP 地址的**网络标识**相同,那么它们就处于同一网络。
网络标识 = IP 地址 & 子网掩码
譬如 192.168.1.50 和 192.168.1.100,这 2 个都是 C 类地址,对应的子网掩码为255.255.255.0
1.4 TCP/IP协议
TCP/IP 协议它其实是一个协议族,包含了众多的协议,譬如应用层协议 HTTP、FTP、MQTT…以及传输层协议 TCP、UDP 等这些都属于 TCP/IP 协议;
对于应用开发来说,可能使用更多的是应用层协议,譬如 HTTP、FTP、SMTP等。
1.5 TCP协议
TCP(Transmission Control Protocol,传输控制协议)是面向连接、可靠、基于 IP 的传输协议。
① TCP 协议工作在传输层,对上服务 socket 接口,对下调用 IP 层;
② TCP 是面向连接的传输协议,通信前必须通过三次握手与客户端建立连接关系后才可通信;
③ TCP 协议提供可靠传输,不怕丢包、乱序。
TCP 协议如何保证可靠传输?
① TCP 协议采用发送应答机制,即发送端发送的每个 TCP 报文段都必须得到接收方的应答,才能认为这个 TCP 报文段传输成功。
② TCP 协议采用超时重传机制,发送端在发送出一个 TCP 报文段之后启动定时器,如果在定时时间内未收到应答,它将重新发送该报文段。
③ 由于 TCP 报文段最终是以 IP 数据报发送的,而 IP 数据报到达接收端可能乱序、重复、所以 TCP协议还会将接收到的 TCP 报文段重排、整理、再交付给应用层。
1.5.1 TCP协议的特性
1.5.2 TCP报文格式
TCP 报文(或 TCP 报文段):当数据由上层发送到传输层时,数据会被封装为 TCP 数据段;
TCP 报文 = TCP 首部+数据区域
一般 TCP 首部通常为 20 个字节大小:
1.5.3 建立TCP连接:三次握手
TCP连接步骤
首先建立连接的过程是由客户端发起,而服务器会时刻监听、等待着客户端的连接;
为什么需要三次握手?
确认接收端和服务的都有收发信息的能力,如果不进行确认,那么发送信息,对方不一定能收到所以,TCP 的三次握手是通过三个包的收发保证传输的安全、可靠。
举例:
1> 塔台塔台,我是8683; (发送能力)
2> 塔台收到,8683收到请回答; (收发能力)
3> 8683收到..... (接收能力)
进行通信......
1.5.4 关闭TCP连接:四次挥手
客户端和服务端总共发送 4 个包以确认连接的断开:
当一方完成数据发送任务后,发送一个 FIN 来终止这一方向的连接,收到一个 FIN 只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个 TCP 连接上仍然能够发送数据,直到这一方向也发送了 FIN。
首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
在 socket 编程中,这一过程由客户端或服务端任一方执行 close 来触发;
TCP 关闭连接步骤
1.5.5 TCP状态说明
1.5.6 UDP协议
UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是一种无连接、不可靠的协议,同样它也是工作在传输层。
它只是简单地实现从一端主机到另一端主机的数据传输功能,这些数据通过 IP 层发送,在网络中传输,到达目标主机的顺序是无法预知的,因此需要应用程序对这些数据进行排序处理,UDP 协议更没有流量控制、拥塞控制等功能
在发送端:
UDP 只是把上层应用的数据封装到 UDP 报文中,在差错检测方面,仅仅是对数据进行了简单的校验,然后将其封装到 IP 数据报中发送出去。
在接收端:
无论是否收到数据,它都不会产生一个应答发送给源主机,并且如果接收到数据发送校验错误,那么接收端就会丢弃该UDP 报文,也不会告诉源主机,这样子传输的数据是无法保障其准确性的,如果想要其准确性,那么就需要应用程序来保障了。
UDP 协议的特点
①、无连接、不可靠;
②、尽可能提供交付数据服务,出现差错直接丢弃,无反馈;
③、面向报文,发送方的 UDP 拿到上层数据直接添加个 UDP 首部,然后进行校验后就递交给 IP 层,而接收的一方在接收到 UDP 报文后简单进行校验,然后直接去除数据递交给上层应用;
④、速度快,因为 UDP 协议没有 TCP 协议的握手、确认、窗口、重传、拥塞控制等机制,UDP 是一个无状态的传输协议,所以它在传递数据时非常快,即使在网络拥塞的时候 UDP 也不会降低发送的数据。
1.6 端口号的概念
作用:主机接收到网络数据之后,通过端口号确定该数据是哪个进程对应的接收数据;
通过“IP 地址+端口号”来区分主机不同的进程。
本质:一个数字编号,用来在主机中唯一标识一个能上网(能网络通信)的进程,取值范围0~65535。
一台主机通常只有一个 IP 地址,但是可能有多个端口号,每个端口号表示一个能上网的进程。一台拥有 IP 地址的主机可以提供许多服务,比如 Web 服务、FTP 服务、SMTP 服务等,这些服务都是能够进行网络通信的进程,IP 地址只能区分网络中不同的主机,并不能区分主机中的这些进程,显然不能只靠 IP 地址,因此才有了端口号。