网络互连
网络互连: 将多台计算机连接在一起, 完成数据共享
数据共享的本质是网络数据传输, 即计算机之间通过网络来传输数, 也叫做网络通信
根据网络互连的规模不同, 将网络划分为局域网和广域网
注意: 局域网和广域网是相对的概念
局域网LAN
又称内网, 局域网和局域网之间在没有连接的情况下, 无法通信
局域网组建网络 (组网) 的方式有多种:
- 基于网线直连
- 基于集线器组建
- 基于交换机组建
- 基于交换机和路由器组建 (二层交换机,三层路由)
广域网WAN
通过路由器, 将多个局域网连接起来, 就形成了广域网
如果属于全球化的公共型广域网, 则称为互联网
IP, 端口号
IP 和 端口号用于定位在网络世界(局域网/广域网)中的位置
IP 用于标识网络主机, 网络设备的地址, 即一台设备的网络地址
- IP 地址是一个32位的二进制数
eg: 01100100.00000100.00000101.00000001
通常以点分十进制的形式表示:
eg: 100.4.5.1端口号用于定位一台主机上的某个进程
- 端口号范围: 0~65535 (2^16 个)
- 其中有个概念叫知名端口号: 0~1023
他们被一些常用软件: QQ, 微信, 浏览器 … 占用
所以如果你要指定某个端口的使用, 最好设定在 1024~65535 的范围内
注意:
一个端口号只能绑定一个进程(一个端口号不能同时被多个进程使用)
但是一个进程可以绑定多个端口号
(比如开一个"QQ游戏软件", 里面有一堆游戏: 妈祖,象棋 …
“QQ游戏软件” 是一个进程,里面的每个单独的游戏占用一个端口
么一个进程就绑定了多个端口)
网络协议
网络协议: 网络通信警告的所有网络设备都必须共同遵守的一组约定, 规则.
通常由三要素组成:
- 语法: 数据和控制信息的结构或格式
- 语义: 请求和响应的格式
- 时序: 事件实现顺序的详细说明
协议最终体现为网络上的数据包的格式
网络协议的作用:
由于存在无数种数据格式: 二进制, 文本, 光信号, 电信号 …
网络协议用来规定通信过程中, 使用什么类型的数据, 用什么方式请求, 用什么类型响应 等等
所以协议就是一组约定,规则, 即大家共同遵守的秩序
五元组
在 TCP/IP 之中, 使用五元组来标识一个网络通信:
- 源IP: 标识源主机
- 目的IP: 标识目的主机
- 源端口: 标识通信中源主机中的发送数据的进程
- 目的端口: 标识通信中目的主机中接收数据的进程
- 协议号: 标识通信双发约定好的 数据格式 (你发二进制的内容, 我接受二进制的内容, 别你发了二进制形式内容, 我以字符格式接收)
协议分层
将网络协议分成几个部分, 每个部分专门处理某些内容
协议分层的作用:
- 对于使用者来说, 不必关注提供方是如何实现的, 只需要使用接口即可
- 对于提供方来说, 利用封装的特性, 隐藏实现细节, 只需要开放接口即可
不同分层之间, 上层应用调用下层接口, 下层接口实现上层应用
协议分层有两个常见划分模型: OSI 七层模型, TCP/IP 五层模型(或者有的地方也说是四层模型)
OSI 七层网络模型
这是只存在于教科书上的网络分层模型(没被真正实现, 只是提出了这样一种七层划分的概念)
应用层: 针对特定应用的协议 (微信, 网页, 邮件 …)
表示层: 设备固有数据格式和网络标准 数据格式的转换
会话层: 通信管理. 负责建立和断开通信连接
传输层: 管理两个节点之间的数据传输, 即 端到端的数据传输 (节点: 网络通信中所有的设备, 主机, 路由, 交换机 …)
网络层: 地址管理和路由选择 (路径选择)
数据链路层: 互连设备之间传送和识别数据帧, 点到点之间的数据传输
物理层: 比特流(0/1)和电子信号之间的转换, 负责光 / 电信号的转换及数据传输
挺抽象的, 了解就好, 重点是学习我们正在用的 TCP/IP 五层模型
TCP/IP 五层模型
有的时候也说是 TCP/IP 四层网络模型, 原因是有人认为物理层是硬件相关的操作, 和我们网络通信有什么关系
(不是), 所以把物理层删掉了, 这里不用太过在意, 知道是怎么回事就好.
这里有个便于记忆的点: TCP/IP 就是把 OSI 七层模型中的表示层和会话层合并到了应用层里 (有些大佬认为这仨层都是和应用相关, 没必要分的那么细 …) (考试的时候我死活记不住表示层和会话层 =^= )
应用层: 负责应用程序间的沟通, eg: HTTP, FTP, Telnet …
传输层: 负责两台主机之间的数据传输, eg: TCP, UDP, 保证数据可靠的从源主机发送到目的主机.
网络层: 负责地址管理和路由选择, eg: IP, ICMP, 在IP协议中, 通过 IP 地址标识主机, 并通过路由表来规划两台主机之间的数据传输路线.
数据链路层: 负责设备之间的数据帧的传送和识别. eg: 设备驱动程序及接口卡
物理层 : 负责光/电信号的转换及数据传输.
不好记吧, 总有些取巧的方式 …
先了解几个概念, 网络通信过程中会经过很多设备, 其中的每个设备称为 节点 , 数据从 源主机, 途径许多节点, 发送到目的主机
以微信聊天为例
应用层: 负责源主机和目的主机上的应用程序, 即微信和微信之间的匹配
传输层: 保证源主机和目的主机之间数据传输的可靠性
网络层: 源主机到目的主机之间, 有很多条线路可供网络通信选择, 网络层负责路径规划
数据链路层: 负责相邻节点之间的数据传输
物理层: 数据在设备之间通过光信号(电缆) 传输, 而在设备上以电信号(高低电平 =>01信号) 存储, 物理层负责光/电信号的转换
网络设备所在分层
主机的操作系统内核 实现了从传输层到物理层的内容
路由器 实现了网络层到物理层的内容 (三层路由)
交换机 实现了数据链路层到物理层的内容 (二层交换)
集线器 实现了物理层的内容
此处的路由器和交换机都是指传统意义上的路由器和交换机 (因为目前已经有 四层的路由器 和 三四层的交换机 了, 科技的发展是多么伟大 …)
封装和分用
不同协议层对数据包有不同的称呼, 在传输层叫做 段(segment), 在网络层叫做 数据报(datagram), 在链路层叫做 帧(frame)
应用层数据通过协议栈发送到网上时, 每层协议都要加上一个数据首部(header), 称为 封装(Encapsulation)
首部信息中包含一些类似于: 首部长度, 载荷长度, 数据类型, 上层使用协议 等等的信息
数据封装成帧后发送到传输介质上, 到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理, 这个过程叫做 分用
数据的封装过程
数据的分用过程