网络Ⅰ
- 零、概述
- 0. 网络协议
- 1. 网络协议分层
- OSI 七层模型
- TCP/IP 五层模型
- 2. 协议报头
- 3. 通信过程
- 一、应用层
- 1.1 🔗HTTP 协议
- 1.2 🔗HTTPS 协议
- 二、传输层
- 2.1 端口号
- 2.2 netstat - - 查询网络状态
- 2.3 pidof - - 查看服务器的进程 id
- 2.4 🔗UDP 协议
- 2.5 🔗TCP 协议
- 三、网络层
查询计算机 ip 地址命令:iifconfig
inet:IP地址
ether:以太网(16 进制)
零、概述
0. 网络协议
协议是一种“约定”。
现有的这些许多不同厂商之间生产的计算机能够相互顺畅的通信,正是因为他们共同接受并遵守着同一套由权威定制的标准。这就是 网络协议。
1. 网络协议分层
OSI 七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
应用程序中:
- 应用层
- 表示层
- 会话层
操作系统中:
- 传输层
- 网络层
设备驱动程序与网络接口中:
- 数据链路层
- 物理层
TCP/IP 五层模型
OSI 七层模型的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。但是, 它既复杂又不实用,所以我们按照 TCP/IP 五层模型来讲解
-
应用层: 负责 应用程序间沟通。
如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。 -
传输层: 负责 两台主机之间的数据传输。
如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机 -
网络层: 负责 地址管理和路由选择。
例如在 IP 协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。 -
数据链路层: 负责 设备之间的 数据帧 的传送和识别。
例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线 LAN 等标准。交换机(Switch)工作在数据链路层。 -
物理层: 负责 光 / 电信号的传递方式。
比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
网络协议的五层模型的位置关系
2. 协议报头
用户使用网络互相交互时,从应用层开始,每层向下传输时都会加上本层协议的报头。传到局域网或以太网后,再由底向上进行解析,后将属于本层的报头解开,剩余的数据传给上层。
-
每一层,都会把上层交付给自己的数据,作为自己的 有效载荷
-
每一层,都有自己的协议报头
-
对应的层,报头+有效载荷 = 自己要发送的报文(这就是 封装)
-
在逻辑上,网络协议,都认为自己在和对方同层协议在通信
-
同层协议都能互相认识对方的报头,即都能做到:
-
- a. 将报头进行有效载荷进行分离
-
- b. 将有效载荷交付给上层的那一个具体协议
3. 通信过程
两个主机通信的本质,是两个主机的 OS 与网络协议栈在通信。
任何人要通信,需要有唯一的一个标识符。对于机器也是如此,对于计算机,每台计算机都配有网卡,网卡在出厂的时候,就在网卡内部写入了网卡的 sn 号,MAC 地址, 全球唯一。
路由器 是连接两个子网下通信的桥梁,实际上也是一个 主机,或者叫 节点。其有三层结构:
- 网络层
- 链路层
- 物理层(此处不做讨论)
网络层的报头:为报文定制最终目标,路上根据该地址进行路径选择(IP 地址)
链路层的报头:根据路径选择的结果,来选择下一跳主机(MAC 地址)。
IP 协议及其以上的协议于任何网络方面是没有差异的,即 IP 地址屏蔽了底层子网机制的差异。
IP协议向下,网络可以具有明显的差异。
数据的封装和分用:
-
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
-
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为 封装 (Encapsulation)。首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
-
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段“将数据交给对应的上层协议处理,称为 分用。
一、应用层
一端发送时构造的数据,在另一端能够正确的进行解析,这种约定,就是 应用层协议 。
程序员自然可以自行定制协议,但有如下非常好的协议设计是可以直接拿来使用的。
1.1 🔗HTTP 协议
👉HTTP 协议介绍
1.2 🔗HTTPS 协议
👉HTTPS 协议介绍
二、传输层
传输层用作提供传输策略,负责数据能够从发送端传输至接收端。
2.1 端口号
端口号(Port)标识了一个主机上进行通信的不同的应用程序。
通过 源 IP 地址、目标 IP 地址、协议号、源端口号、目标端口号 这五个数字可以识别一个通信。
端口号范围划分:
-
0 - 1023:知名端口号。
HTTP、FTP、SSH 等这些广为使用的应用层协议,他们的端口号都是固定的。ssh 服务器,使用 22 端口 ftp 服务器,使用 21 端口 telnet 服务器,使用 23 端口 http 服务器,使用 80 端口 https 服务器,使用 443 端口
-
1024 - 65535:操作系统动态分配的端口号。
客户端程序的端口号,就是由操作系统从这个范围分配的。其中也不乏有数据库或一些特殊的服务在其中,比如: mysql,使用 3306 端口
2.2 netstat - - 查询网络状态
netstat -naup
:
-n:拒绝显示别名,能显示数字的全部转化成数字
-a:(all)显示所有选项
-u:(udp)仅显示 udp 相关选项
-p:显示建立相关链接的程序名
netstat -nltp
:
-n:拒绝显示别名,能显示数字的全部转化成数字
-l:仅列出有在 Listen (监听) 的服务状态
-t:(tcp)仅显示tcp相关选项
-p:显示建立相关链接的程序名
2.3 pidof - - 查看服务器的进程 id
pidof [进程名]
:通过进程名查看进程 id
2.4 🔗UDP 协议
👉UDP 协议介绍
2.5 🔗TCP 协议
👉TCP 协议介绍
TCP 和 UDP 的对比:
TCP 和 UDP 之间的优点和缺点,不能简单,绝对的进行比较。
-
TCP 用于可靠传输的情况,应用于文件传输,重要状态更新等场景。
-
UDP 用于对高速传输和实时性要求较高的通信领域,
例如,早期的 QQ,视频传输...等,另外 UDP 可以用于广播。
归根结底,TCP 和 UDP 都是程序员的工具,什么时机用,具体怎么用,还是要根据具体的需求场景去判定。