本章来介绍一下网络中的一些基本概念, 例如 : IP地址, 端口号, 协议, 协议分层, 封装, 分用等等.
网络互联的目的是进行网络通信, 即进行网络数据传输, 更具体一点, 是网络主机的不同进程间, 基于网络传输数据.
那么在组建的网络中是如何判断从哪台主机, 将数据传输到哪一台主机呢? 这就需要用 IP地址 来标识.
IP地址是分配给连接到使用Internet Protocol进行通信的计算机网络上的每个设备的数字标签. 他有两个主要功能: 主机或网络接口的标识和位置寻址.
IP地址是一个32位的二进制数, 通常用点分十进制来表示. 如: 192.147.1.1
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协议
协议用五元组来表示一个网络通信:
可以在cmd中,输入 netstat -ano
查看网络数据传输中的五元组信息:
如果需要过滤 (一般是通过端口号或者进程PID过滤) , 可以用 netstat -ano | findstr 过滤字符串
协议分层最大的好处, 类似于面向接口编程: 定义好两层之间的接口规范, 双方遵循这个规范这个规范来对接.
在代码中, 类似于定义好一个接口, 一方为接口的实现类 (提供方, 提供服务) , 一方为接口的使用类 (使用方,使用服务) :
OSI七层模型划分为以下七层:
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层模型来
实现。
TCP/IP是一组协议的代名词, 他还包括很多协议, 组成了TCP/IP协议簇.
采用了五层层级模型:
不同的协议层对数据包有不同的称谓, 在传输层叫做段 (segment) , 在网络层叫做数据报 (datagram) , 在链路层叫做帧 (frame).
应用层数据通过协议栈发送到网络上时, 每层协议都要加上一个数据首部 (header) , 称为封装 (Encapsulation).
首部信息中包含了一些类似于首部多长, 载荷 (payload) 多长, 上层协议是什么等信息.
数据封装成帧后发送到传输介质上, 到达目的主机后每层协议再剥掉响应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
下图为数据封装的过程:
160942306.png&pos_id=img-xfgS2Eah-1705828659849)
下图为分用的过程: