目录
[1.网络基础 --- 宏观概念,相关的逻辑线](#1.网络基础 --- 宏观概念,相关的逻辑线)
[1.初识协议 减少通信的成本,用于快速形成共识](#1.初识协议 减少通信的成本,用于快速形成共识)
1.网络基础 --- 宏观概念,相关的逻辑线
网络:计算机是人类的工具,人之间,是需要协作的,就注定了计算机之间要进行协作。---网络的产生,是必须的!
--具体怎么产生的?--先局部产生的!--从局部到整体的!
规律
网络的历史!
阿帕网--保密--90年代左右公开了---美国人组建自己的互联网--92 93 --97 98---
互联网公司
运营商---大量的基础设施建设
做通信工具的公司
网络发展
独立模式:计算机之间相互独立;
网络互联:多台计算机连接在⼀起,完成数据共享
局域网LAN:计算机数量更多了,通过交换机和路由器连接在⼀起
⼴域网WAN:将远隔千里的计算机都连在⼀起
所谓"局域网"和"广域网"只是⼀个相对的概念.
计算机是人的工具,人要协同工作,注定了网络的产生是必然的.
ifconfig
2.初识协议
1.初识协议 减少通信的成本,用于快速形成共识
v1
协议,本质是一种约定!
计算机之间如何约定呢?--OSI--只生产标准,不写代码实现!
计算机之间的传输媒介是光信号和电信号.通过"频率"和"强弱"来表⽰0和1这样的信息.要想传递各种不同的信息,就需要约定好双方的数据格式.
思考:只要通信的两台主机,约定好协议就可以了么?
• 定好协议,但是你用频率表示01,我用强弱表示01,就好比我用中国话,你用葡萄牙语一样,虽 然大家可能遵守的一套通信规则,但是语言不同,即是订好了基本的协议,也是无法正常通信的
所以,完善的协议,需要更多更细致的规定,并让参与的人都要遵守。
• 计算机生产厂商有很多;
• 计算机操作系统, 也有很多;
• 计算机网络硬件设备, 还是有很多;
• 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的 标准, 大家都来遵守, 这就是网络协议;
⼀般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司
问:能定制协议标准的组织或者公司
答:能定制协议标准的组织或公司主要有以下几类:
- 国际标准化组织:
◦ IEEE(电气和电子工程师协会):这是一个由计算机和工程领域专家组成的庞大技术组织,在 通信协议领域贡献突出。IEEE制定了全世界电子、电气和计算机科学领域30%左右的标准,包 括IEEE 802系列标准,这些标准涵盖了从局域网(LAN)到广域网(WAN)等多种网络技术。
◦ ISO(国际标准化组织):ISO是由多个国家的标准化团体组成的国际组织,它在开放系统互连 (OSI)模型方面的工作尤为著名。OSI模型定义了网络通信的七层协议结构,尽管在实际应用 中,TCP/IP协议族更为普遍,但OSI模型仍然在学术和理论研究中占有重要地位。
◦ ITU(国际电信联盟):ITU是联合国下属的专门机构,负责制定电信领域的国际标准。ITU-T 制定的标准涵盖了电话和网络通信,与ISO合作确保了通信技术的全球兼容性和互操作性。
- 区域标准化组织:
◦ ETSI(欧洲电信标准学会):由欧洲共同体各国政府资助,是一个由电信行业的厂商与研究机 构参加并从事研究开发到标准制定的组织。
◦ ASTAP(亚洲与泛太平洋电信标准化协会):1998年由日本与韩国发起成立的标准化组织,旨 在加强亚洲与太平洋地区各国信息通信基础设施及其相互连接的标准化工作的协作。
- 公司:
◦ 某些公司,如泰凌微,也自研各种标准的软件协议栈,包括低功耗蓝牙、zigbee、thread及 Matter等,并可进行定制化改动,这是其核心竞争力之一。泰凌微还计划重点发展智能电子价 签、智能遥控、智能家居等市场。
- 民间国际团体:
◦ IETF(互联网工程师任务组):这是一个负责开发和推广互联网协议(特别是构成TCP/IP协议 族的协议)的志愿组织,通过RFC发布新的或者取代老的协议标准。
- 官方机构:
◦ FCC(联邦通信委员会):美国对通信技术的管理的官方机构,主要职责是通过对无线电、电 视和有线通信的管理来保护公众利益。也对包括标准化在内的通信产品技术特性进行审查和监 督。
以上这些组织或公司都能在一定程度上定制协议标准,以满足特定需求或推动技术发展。
2.协议分层
• 协议本质也是软件,在设计上为了更好的进⾏模块化,解耦合,也是被设计成为层状结构的
所有的软件都是层状的,模块化的
软件分层的好处

• 在这个例子中, 我们的"协议"只有两层:语言层、通信设备层。
• 但是实际的网络通信协议,设计的会更加复杂, 需要分更多的层
• 但是通过上面的简单例子,我们是能理解,分层可以实现解耦合,让软件维护的成本更低
结论1:两种视角,普通用户的视角,工程师的视角
结论2:同层之间,在"直接"通信
结论3:分层之后,可以无障碍替换任意一层---分成->解耦
网络协议栈,就是分层的!
具体分层
OSI七层模型
• OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考 模型,是一个逻辑上的定义和规范;
• 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
• OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传 输;
• 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
• 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.


• 其实在网络角度,OSI定的协议7层模型其实非常完善,但是在实际操作的过程中,会话层、表示层 是不可能接入到操作系统中的,所以在工程实践中,最终落地的是5层协议。
• 但是要理解上面的话,需要我们学习完网络才可以理解,这里就知道就可以。
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求. • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
• 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
• 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
• 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送 到目标主机.
• 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远 程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.
物理层我们考虑的比较少,我们只考虑软件相关的内容. 因此很多时候我们直接称为 TCP/IP四层模型. 一般而言
• 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
• 对于一台路由器, 它实现了从网络层到物理层;
• 对于一台交换机, 它实现了从数据链路层到物理层;
• 对于集线器, 它只实现了物理层;
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
3.再识协议
计算机要遵守的?计算机角度,OS角度,如何理解协议呢?
上面的内容,我们只是懂了⼀些基本概念,还是达不到我们的目标,下面我们再次重新理解协议和协议分层。
为什么要有TCP/IP协议?
本地通信vs网络通信
所有的设备是通过"线"连接起来的!
---所以,计算器内部,冯诺依曼,本身就是一个网络结构!
多台主机,通过网络通信,本质也是设备到设备!
其中唯一的一个区别:单纯的距离变长了!
---引发新的问题!
如何处理数据?---应用层
数据丢了怎么办?---传输层
怎么定位目标主机的问题?---互联网层
怎么解决当下立即要去哪里的问题?---网卡层
有问题,就一定要有解决问题的方案!
---TCP/IP协议:本质:是一种网络长距离通信的解决方案!
单纯的因为:计算机通信的距离变长了!
• 首先,即便是单机,你的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA,IDE,SCSI等。只不过我们感知不到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少。
• 其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,⼀定会带来新的问题,有问题就得解决问题,所以需要新的协议咯。

• 所以,为什么要有TCP/IP协议?本质就是通信主机距离变远了
什么是TCP/IP协议?
• TCP/IP协议的本质是⼀种解决方案
• TCP/IP协议能分层,前提是因为问题们本⾝能分层
TCP/IP协议与操作系统的关系(宏观上,怎么实现的)

网络层和传输层是在本身的OS内实现的
传输层典型的协议 TCP,网络层典型的协议IP
为了让上层应用层用它的功能在两个中间增添一个系统调用
最终整个操作系统栈也是整体在我们的体系结构内部的
网络协议栈,注定了是层状的结构!
网络是OS的一部分!

网络是操作系统的一部分
OSI->OSI7层协议->5层协议 标准
Linux和Windows网络部分一定是一样的

所以究竟什么是协议?
• 截止到目前,我们还没接触过任何协议,但是如何朴素的理解协议,我们已经可以试试了。
• OS源代码一般都是用C/C++语言写的。
协议本质:就是约定好的结构体!

所谓协议,就是通信双方都认识的结构化的数据类型

问题:主机B能识别data,并且准确提取a=10,b=20,c=30吗?
回答:答案是肯定的!因为双方都有同样的结构体类型struct protocol。也就是说,用同样 的代码实现协议,用同样的自定义数据类型,天然就具有"共识",能够识别对方发来的数 据,这不就是约定吗?
关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型
因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。
快递单子,用c表示:struct
快递单子,就是收发双方的协议
多种局域网通信标准+一种广域网通信标准
属于广域网通信的底层技术
4.网络传输基本流程
局域网网络传输
局域网网络传输流程图
局部到整体 IP地址,一切皆IP
|
各种各样局域网通信的标准
以太网
令牌环网
无线LAN
mac地址
局域网(以太网为例)通信原理
• 首先回答,两台主机在同一个局域网,是否能够直接通信?
• 原理类似上课
• 每台主机在局域网上,要有唯一的标识来保证主机的唯一性 :mac地址
轻量云服务器下从查看
root@iZ5waahoxw3q2bZ:~/linux-learning/linux# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.26.47.134 netmask 255.255.192.0 broadcast 172.26.63.255
inet6 fe80::216:3eff:fe59:9c94 prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:59:9c:94 txqueuelen 1000 (Ethernet)
RX packets 8465826 bytes 4537872757 (4.5 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5995766 bytes 1735788697 (1.7 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2444060 bytes 936560402 (936.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2444060 bytes 936560402 (936.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0是我这台轻量云服务器对应的网络接口
可以看到有一行ether,00:16:3e:59:9c:94这个是我的mac地址,标识网卡唯一值的数字
Windows下查看
ipconfig /all
认识MAC地址
• MAC地址用来识别数据链路层中相连的节点;
• 长度为 48 比特位, 即 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:00:16:3e:59:9c:94)
• 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的 (虚拟机中的mac地址不是真实的mac地 址, 可能会冲突; 也有些网卡支持用户配置mac地址).
• windows>ipconfig /all

src作为源mac地址,dst为目的mac地址,data为要发送的数据。这个整个不就是一个struct吗
主机A由此把对应的消息发送到网络里,其他主机就都能收到这个报文。但是不知道这个报文是不是发给自己的,就会提取报文的前两个字段,比如主机B发现dst mac地址不是自己的,那就丢掉。其他主机同理,E收到以同样方式给予返回。
• 以太网中,任何时刻,只允许一台机器向网络中发送数据
• 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞
• 所有发送数据的主机要进行碰撞检测和碰撞避免 碰撞避免算法
• 没有交换机的情况下,一个以太网就是一个碰撞域
• 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac地址判定
• 这里可以试着从系统角度来理解局域网通信原理
以太网本质就是共享的资源---临界资源吗?
初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程

主机之间通信:我们必须认识到,本质是两个协议栈在通信!
数据发送的原始动力:是人(90%情况)
网络协议栈,每一层都有协议!


我们需要把我们第一层的协议信息添加到原始报文的前面,把前面添加报文的原始信息叫做协议抱头
应用层抱头--协议抱头 你好--有效载荷 在应用层
传输层抱头--协议抱头 应用层抱头+你好--有效载荷 在传输层
依次类推
自顶向下,报文封装的过程
为什么要自顶向下封装啊?
必须贯穿操作系统,贯穿协议栈
OS是硬件(网卡)的管理者
前面讲的传输只考虑了数据链路层
对端同层,要先解包:报头和有效载荷进行分离
同层之间,在直接通信,因为我收到的,就是你发送的!
上一层(应用层):你的数据("你好")和 HTTP、FTP 等应用层抱头。
这一层(传输层) :TCP 或 UDP 在这里"出手"。它们会给上一层传下来的整块数据,加上自己的"抱头"(TCP报头 或 UDP报头)。
下一层(网络层):IP 协议接着给它们加 IP 抱头。
TCP(好比打电话) :它的"抱头"里写了端口号 、序号 和确认号。它要确保对方百分百收到,收不到就重传(可靠)。
UDP(好比寄信) :它的"抱头"里只写了端口号和校验码。它把数据扔出去就不管了,不管对方收没收到(不可靠,但速度快)。
细节1:不考虑应用层,任何协议
a.抱头必须要能做到,和有效载荷进行分离的能力
b.抱头中必须包含 ,如何将自己的有效载荷,交付给上层的哪一个具体协议
细节2:底层收到报文,但是该报文不是发送给我的,数据链路层直接丢弃
细节3:协议栈
自顶向下-入栈过程,自底向上-出栈过程

请求与应答
数据段
数据段
数据帧
网卡有一种混杂模式 ,网卡收到对应数据帧,不对其做判断,无脑地把数据直接向上交付 ---抓包工具的原理
报头部分,就是对应协议层的结构体字段,我们⼀般叫做报头
• 除了报头,剩下的叫做有效载荷
• 故,报文=报头+有效载荷
然后,我们在明确⼀下不同层的完整报文的叫法
• 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报
(datagram),在链路层叫做帧(frame).
• 应用层数据通过协议栈发到网络上时,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation).
• 首部信息中包含了⼀些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息.
• 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,根据⾸部中的"上层
协议字段"将数据交给对应的上层协议处理.

在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交付给下层协议, 最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进行向上交付,下面是一张示意图。
数据包封装和分用
下图为数据封装的过程

从今天开始,我们学习任何协议,都要先宏观上建立这样的认识:
-
要学习的协议,是如何做到解包的?只有明确了解包,封包也就能理解
-
要学习的协议,是如何做到将自己的有效载荷,交付给上层协议的?
跨网络传输
网络中的地址管理-认识IP地址
IP地址,用来标识,全球范围内,主机的唯一性(公网IP)
MAC,也是这么说的
root@iZ5waahoxw3q2bZ:~/linux-learning/linux# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.26.47.134 netmask 255.255.192.0 broadcast 172.26.63.255
inet6 fe80::216:3eff:fe59:9c94 prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:59:9c:94 txqueuelen 1000 (Ethernet)
RX packets 8468809 bytes 4538130974 (4.5 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5998258 bytes 1736083481 (1.7 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2444066 bytes 936560980 (936.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2444066 bytes 936560980 (936.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0,inet 网络地址当前IP 127.0.0.1
IP协议有两个版本,IPv4和IPv6 .之后凡是提到IP协议,没有特殊说明的,默认都是指IPV4
IP地址是在IP协议中,用来标识网络中不同主机的地址;
对于IPv4来说,IP地址是一个4字节,32位的整数,可以表示2的32次方个IP;
所以其实已经有点不够用了,就提出了IPv6。但是原来IPv4也不能不要。
有人就又提出了NAT(网络地址转换),允许把网络分两块,一个公网IP、一个内网IP(内网IP可以重复)
我们通常也使用"点分十进制"的字符串表示IP地址,例如192.168.0.1;
用点分割的每一个数字表示一个字节,范围是 0- 255
跨网段的主机的数据传输,数据从一台计算机到另一台计算机几传输过程中要经过一个或多个路由器

跨网络通信的时候,IP地址和MAC地址哪个先有?mac肯定先有毕竟一开始是局域网内
从哪里来,到哪里去---源IP,目标IP地址 ---路由的参考依据
上一站从哪里来,下一站去哪里--源MAC,目标MAC地址
电脑、路由器--->主机
首先理解⼀下IP地址的意义
• 为什么要去目标主机,先要走路由器?
• 目的IP的意义

同一个子网\局域网前面IP地址是一样的
只要有网络层,就会有路由功能!
主机A不知道172主机在哪里,
但是主机A一定能确定,报文绝对不是发给本地网络的主机的
有了目的IP,可以判定,要将报文发给路由器
同一个局域网里,主机之间可以通信
路由过程中,IP地址不变,mac地址一直在变
对比IP地址和Mac地址的区别
• IP地址在整个路由过程中,一直不变(目前,我们只能这样说明,后面在修正)
• Mac地址一直在变
• 目的IP是一种长远目标,Mac是下一阶段目标,目的IP是路径选择的重要依据,mac地址是局域网转发的重要依据
只要IP地址?---只要IP,从技术上也能实现
但为什么没有呢?没有必要
转发的重要依据
提炼IP网络的意义和网络通信的宏观流程

• IP网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异
网络层+IP的本质意义:给网络提供了一层虚拟化层,让世界上所有的网络,都叫做IP网络
长远目标,决定路径选择
感谢你的观看,期待我们下次再见!
