文章目录
- 前言
- 网络通信基础
- 一.IP地址
- 概念
- 格式
- 特殊IP
- 二.端口号
- 概念
- 注意事项
- 三.协议
- 概念
- 知名协议的默认端口
- 五元组
- 协议分层
- OSI七层模型
- TCP/IP五层模型
- 四.封装和分用
前言
本章来介绍一下网络中的一些基本概念, 例如 : IP地址, 端口号, 协议, 协议分层, 封装, 分用等等.
网络通信基础
网络互联的目的是进行网络通信, 即进行网络数据传输, 更具体一点, 是网络主机的不同进程间, 基于网络传输数据.
那么在组建的网络中是如何判断从哪台主机, 将数据传输到哪一台主机呢? 这就需要用 IP地址 来标识.
一.IP地址
概念
IP地址是分配给连接到使用Internet Protocol进行通信的计算机网络上的每个设备的数字标签. 他有两个主要功能: 主机或网络接口的标识和位置寻址.
格式
IP地址是一个32位的二进制数, 通常用点分十进制来表示. 如: 192.147.1.1
特殊IP
127.*的IP地址用于环回(loop back)测试, 通常是127.0.0.1
本机环回主要用于本机到本机的网络通信 (系统内部为了性能, 不会走网络的方式传输), 对于开发网络通信的程序 (即网络编程) 而言, 常见的开发方式都是本机到本机的网络通信.
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进
程来接收这个数据呢?这就需要端口号来标识
二.端口号
概念
端口号是一个16位无符号整数, 范围从0到65535. 它用于定位主机上的进程. 可以标识主机中, 发送数据, 接收数据的进程.
注意事项
两个不同的进程不能绑用同一个端口号, 但是一个进程可以绑定多个端口号.
有了IP和端口号, 可以定位到网路中的唯一一个进程, 但还存在一个问题, 网络通信是基于二进制0/1传输, 而网络传输的数据类型可能有很多种: 图片, 视频, 文字等等, 同一类型的数据格式也可能不同, 那么如何告诉对方发送的数据是什么样的, 该用什么方法或者格式来解析数据呢? 就要使用协议来规定双方的数据格式.
三.协议
概念
网络协议的简称, 是指网络通信经过的网络设备都必须共同遵从同样的一组约定, 规则. 如怎样建立连接, 怎样互相识别等等.
基于网络数据传输, 需要使用协议来规定双方的数据格式.通常由三要素组成:
-
语法: 即数据与控制信息的结构或格式
例如打电话时, 双方都使用相同的语言: 普通话
-
语义: 即需要发出何种控制信息, 完成何种动作以及做出何种相应
主要用来说明通信双方应该怎么做, 用于协调与差错处理的控制信息
- 时序: 即事件实现顺序的详细说明
同步传输还是异步传输
协议最终体现为在网络上传输数据包的格式.
知名协议的默认端口
系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使
用的应用层协议,如:
21端口:预留给FTP服务器绑定FTP协议
22端口:预留给SSH服务器绑定SSH协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议
五元组
协议用五元组来表示一个网络通信:
- 源IP: 标识源主机
- 源端口号: 标识主机中此次通信发送数据的进程
- 目的IP: 标识目的主机
- 目的端口号: 标识目的主机中此次通信接受数据的进程
- 协议号: 标识发送和接受双方约定的数据格式
可以在cmd中,输入 netstat -ano
查看网络数据传输中的五元组信息:
如果需要过滤 (一般是通过端口号或者进程PID过滤) , 可以用 netstat -ano | findstr 过滤字符串
协议分层
协议分层最大的好处, 类似于面向接口编程: 定义好两层之间的接口规范, 双方遵循这个规范这个规范来对接.
在代码中, 类似于定义好一个接口, 一方为接口的实现类 (提供方, 提供服务) , 一方为接口的使用类 (使用方,使用服务) :
- 对于使用方来说, 并不关心提供方是如何实现的, 只需要使用接口即可
- 对于提供方来说, 利用封装的特性, 隐藏实现的细节, 只需要开放接口即可
OSI七层模型
OSI七层模型划分为以下七层:
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层模型来
实现。
TCP/IP五层模型
TCP/IP是一组协议的代名词, 他还包括很多协议, 组成了TCP/IP协议簇.
采用了五层层级模型:
- 应用层: 负责应用程序间沟通, 如简单电子邮件传输协议 (SMTP) ,文件传输协议 (FTP) , 网络远程访问协议 (Telent) 等.
- 传输层: 负责两台主机之间的数据数据传输. 如传输控制协议 (TCP) ,能够确保数据可靠的从源主机发送到目标主机.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输线路 (也就是路由) . 路由器 (Rounter) 工作在网络层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动, 帧同步 (就是从网线上检测到什么信号算作新帧的开始), 冲突检测 (如果监测到冲突就自动重发) , 数据差错校验等工作. 有以太网, 令牌环网, 无线LAN等标准. 交换机 (Switch) 工作在数据链路层.
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线 (双绞线, 线) , 早期以太网采用的同轴电缆 (现在主要用于有线电视) , 光纤, 现在的wifi无线网使用的电磁波等都属于物理层的概念. 物理层的能力决定了最大传输速率, 传输距离, 抗干扰性等. 集线器 (Hub) 工作在物理层.
四.封装和分用
不同的协议层对数据包有不同的称谓, 在传输层叫做段 (segment) , 在网络层叫做数据报 (datagram) , 在链路层叫做帧 (frame).
应用层数据通过协议栈发送到网络上时, 每层协议都要加上一个数据首部 (header) , 称为封装 (Encapsulation).
首部信息中包含了一些类似于首部多长, 载荷 (payload) 多长, 上层协议是什么等信息.
数据封装成帧后发送到传输介质上, 到达目的主机后每层协议再剥掉响应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
下图为数据封装的过程:
160942306.png&pos_id=img-xfgS2Eah-1705828659849)
下图为分用的过程: