目录
计算机网络背景
网络发展
独立模式: 计算机之间相互独立;
网络互联: 多台计算机连接在一起, 完成数据共享;
局域网 LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
广域网 WAN: 将远隔千里的计算机都连在一起;
所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网 ;
初识协议
"协议" 是一种约定. 例如:打电话约定电话铃响的次数的约定(响几声代表什么事件)
例如:计算机传输
计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.
思考: 只要通信的两台主机, 约定好协议就可以了么?
定好协议,但是你用频率表示 01,我用强弱表示 01,就好比我用中国话,你用葡萄牙语一样,虽然大家可能遵守的一套通信规则,但是语言不同,即是订好了基本的协议,也是无法正常通信的;
所以,完善的协议,需要更多更细致的规定,并让参与的人都要遵守。
计算机生产厂商有很多;
计算机操作系统, 也有很多;
计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是网络协议;
一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地 位的组织或者公司,但是定标准不一定由我来实现;
协议分层
协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的
软件分层的好处
大部分的软件(几乎都是)都是层状结构;
在这个例子中, 我们的"协议"只有两层:语言层、通信设备层
OSI 七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;(协议是我定好的,具体实现可以由其他不同的人来实现)
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,它为网络通信提供了标准化的结构和分层概念,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚, 理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照 TCP/IP 四层模型来讲解.
定好OSI标准后,由一些大佬来实现。
在 Windows、Linux 和 iOS 等操作系统中,研发团队会根据OSI模型的标准,将协议栈分层实现,并遵循相应的协议规范。这样,不同操作系统上的设备可以通过标准化的协议进行通信。
但是真正实现的没有那么多,因为有些无法实现或者实现效果不好;
虽然 OSI 7层模型 提供了一个非常完备的框架,但在实际工程实践中,很多操作系统和网络协议栈并没有明确区分会话层和表示层,这些层通常被合并或忽略,最终落地的是 5层协议模型。(会话层和表示层通常是合并到应用层处理)
TCP/IP 五层(或四层)模型
TCP是传输层的协议,IP是网络层的协议。TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇.TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
五层:物理层、数据链路层、网络层、传输层、应用层
四层:网络接口层,网络层,传输层,应用层
应用层、表示层、会话层三个层次提供的服务相差不是很大,所以在TCP/IP协议中,它们被合并为应用层一个层次。
由于传输层和网络层在网络协议中的地位十分重要,所以在TCP/IP协议中它们被作为独立的两个层次。
因为数据链路层和物理层的内容相差不多,所以在TCP/IP协议中它们被归并在网络接口层一个层次里。只有四层体系结构的TCP/IP协议,与有七层体系结构的OSI相比要简单了不少,也正是这样,TCP/IP协议在实际的应用中效率更高,成本更低。
一般而言 :
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器, 它实现了从网络层到物理层;
对于一台交换机, 它实现了从数据链路层到物理层;
对于集线器, 它只实现了物理层;
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
再识协议
为什么要有 TCP/IP 协议?
首先,即便是单机,你的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如: SATA,IDE,SCSI 等。只不过我们感知不到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少(因为距离近)。
其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议。所以,为什么要有 TCP/IP 协议?本质就是通信主机距离变远了(是一种解决方案)
TCP/IP 协议与操作系统的关系(宏观上,怎么实现的)
执行相同的网络协议栈(通常指 TCP/IP 协议栈)导致不同设备/系统能进行网络通信。
所以究竟什么是协议?
OS 源代码一般都是用 C/C++语言写的。
问题:主机 B 能识别 data,并且准确提取 a=10,b=20,c=30 吗?回答:答案是肯定的!因为双方都有同样的结构体类型 struct protocol。也就是说, 用同样的代码实现协议,用同样的自定义数据类型,天然就具有”共识“,能够识别对方发来的数据,这不就是约定吗?
关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型(你认识,我也认识)因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。
协议和代码有着密切的关系,但协议本身是描述通信的规则,而代码是用来实现这些规则的程序。
就像填写快递单子,寄件和收件需要遵守快递公司的约定(快递单子格式)。
用C代码实现快递单子不就是struct xxx{} ,而未来我们不仅收到快递单子还有需要收到的东西。
网络传输基本流程
局域网(以太网为例)通信原理
首先回答,两台主机在同一个局域网,是否能够直接通信?是的。原理类似上课。
什么是局域网呢?
在家里,我连接的是我家的wifi(当你连接到你家里的 Wi-Fi 时,你的设备和路由器之间形成了一个局域网。所有通过这个 Wi-Fi 网络连接的设备(如手机、电脑、平板等)都在同一个局域网内,能够互相通信和共享资源。)
邻居连接的是他的wifi,那么就是两个不同的局域网。开热点也是类似的。
每台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac 地址
认识 MAC 地址
MAC 地址用来识别数据链路层中相连的节点;
长度为 48 位 即 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改因为在网卡内部就设置好了. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址).
注意:双方通信是网络协议栈在通信,不是简单的电脑图在通信,不要被图片干扰;
以太网中,任何时刻,只允许一台机器向网络中发送数据;
如果有多台同时发送(在上述线上产生干扰了),会发生数据干扰,我们称之为数据碰撞;
所有发送数据的主机要进行碰撞检测和碰撞避免;
没有交换机的情况下,一个以太网就是一个碰撞域;
局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标 mac 地址判定;
看同一个网段内的两台主机进行发送消息的过程
而其中每层都有协议,所以当我进行进行上述传输流程的时候,要进行封装和解包
下面我们明确一下概念
不同的协议层对数据包有不同的称谓(在家里叫小名,学校叫外号,在外面叫名字),在传输层叫做段,在网络层叫做数据报,在链路层叫做帧;
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部 ,称为封装;
首部信息中包含了一些类似于首部有多长, 载荷有多长, 上层协议是什么等信息;
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理;
在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交 付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进 行向上交付
数据包封装和分用
封装
分用
跨网络传输
那么如果不在同一个局域网呢?
网络中的地址管理 - 认识 IP 地址
IP 协议有两个版本, IPv4 和 IPv6. 凡是提到 IP 协议, 没有特殊说明的, 默认都是指 IPv4;
IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址;
对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数;
对于 IPv6 来说, IP 地址是一个 16 字节, 128位的整数;
我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.

IP 地址和 Mac 地址的区别
1. IP 地址在整个路由过程中,一直不变(目前,我们只能这样说明,后面在修正)
2. Mac 地址一直在变
3. 目的 IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依据,mac 地址是局域网转发的重要依据
虽然MAC地址是全球唯一的,但是大部分情况下MAC地址还是表示自己在局域网中的唯一性,因为mac地址不会透过局域网的。IP地址可以跨网络的
网络传输通信大概图
IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽 最底层网络的差异