目录
[1. 网络基础概念](#1. 网络基础概念)
[1.1 计算机网络背景](#1.1 计算机网络背景)
[1.2 初识协议](#1.2 初识协议)
[1.2.1 协议分层](#1.2.1 协议分层)
[1.2.2 OSI七层模型(参考模型)](#1.2.2 OSI七层模型(参考模型))
[1.2.3 TCP/IP五层(或四层)模型](#1.2.3 TCP/IP五层(或四层)模型)
[1.3 再识协议](#1.3 再识协议)
[1.3.1 为什么要有TCP/IP协议](#1.3.1 为什么要有TCP/IP协议)
[1.3.2 什么是TCP/IP协议](#1.3.2 什么是TCP/IP协议)
[1.3.3 TCP/IP协议与操作系统的关系(宏观上,怎么实现的)](#1.3.3 TCP/IP协议与操作系统的关系(宏观上,怎么实现的))
[1.3.4 所以究竟什么是协议?](#1.3.4 所以究竟什么是协议?)
[1.4 网络传输的基本流程](#1.4 网络传输的基本流程)
[1.4.1 局域网网络传输的基本流程](#1.4.1 局域网网络传输的基本流程)
[1.4.1.1 局域网通信原理](#1.4.1.1 局域网通信原理)
[1.4.1.2 认识MAC地址](#1.4.1.2 认识MAC地址)
[1.4.1.3 深刻理解碰撞检测和碰撞避免:](#1.4.1.3 深刻理解碰撞检测和碰撞避免:)
[1.4.1.4 数据包的封装和分用](#1.4.1.4 数据包的封装和分用)
[1.4.1.5 重谈局域网通信原理](#1.4.1.5 重谈局域网通信原理)
[1.4.2 跨网络传输流程图](#1.4.2 跨网络传输流程图)
[1.4.2.1 网络中的地址管理 - 认识IP地址](#1.4.2.1 网络中的地址管理 - 认识IP地址)
1. 网络基础概念
1.1 计算机网络背景
网络发展
独立模式:计算机之间相互独立。但是现实世界,人之间是要协作的,那么计算机是完成人的工作的,注定计算机直接也是要协作的。所以人类产生计算机网络技术,是必然的!!!
阿帕网是互联网的前生。
⽹络互联: 多台计算机连接在⼀起, 完成数据共享;

局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在⼀起;

局域网和局域网之间也要通信,所以就有了路由器这样的设备的诞生。在计算机发展,网络发展的同时,设备厂商也是在发展的。任何一个新行业的诞生,不是某一种的技术突破,而是成体系的全方位的突破。
⼴域⽹WAN: 将远隔千⾥的计算机都连在⼀起;

先是有局域网,之后局域网不断地串联起来、发酵,才会形成广域网的。
局域网:一个/单个子网。广域网:接入的主机更多,有不同的子网构成,有很多子网。
所谓 "局域网" 和 "⼴域网" 只是⼀个相对的概念。比如, 我们有 "天朝特⾊" 的⼴域⽹, 也可以看做⼀个⽐较⼤的局域网,因为上不了外网。
1.2 初识协议
- "协议"是一种约定。没有约定,即便是两台计算机能够互相联通,对方也理解不了。
- 摩斯密码的手册的约定

计算机之间的传输媒介是光信号和电信号。 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息.。要想传递各种不同的信息, 就需要约定好双⽅的数据格式
思考: 只要通信的两台主机, 约定好协议就可以了吗?
- 定好协议,但是你⽤频率表⽰01,我⽤强弱表⽰01,就好⽐我⽤中国话,你⽤葡萄⽛语⼀样,虽然⼤家可能遵守的⼀套通信规则,但是语⾔不同,即是订好了基本的协议,也是⽆法正常通信的
所以,完善的协议,需要更多更细致的规定,并让参与的⼈都要遵守。
- 计算机⽣产⼚商有很多;
- 计算机操作系统, 也有很多;
- 计算机⽹络硬件设备, 还是有很多;
- 如何让这些不同⼚商之间⽣产的计算机能够相互顺畅的通信? 就需要有⼈站出来, 约定⼀个共同的标准, ⼤家都来遵守, 这就是网络协议;
⼀般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司,下面是deepseek⽣成的标准制定组织,⼤家看⼀下就可以:
问:能定制协议标准的组织或者公司
一、全球性权威标准组织
这些组织通常由各国政府或国家成员体组成,制定的标准具有最高的国际权威性,常被称为"国标"或"正式标准"。
- **国际标准化组织(ISO):**它是一个由各国国家标准机构组成的全球性联盟。ISO的标准覆盖几乎所有技术领域(电工电子除外)。在计算机网络领域,它最著名的贡献是提出了 OSI七层模型,这套模型虽然未被实际协议完全采纳,但为理解网络架构提供了理论基石。ISO的标准编号通常以"ISO/IEC"开头(与IEC联合发布)。
- **国际电工委员会(IEC):**专注于电子电工、电磁兼容、信息技术设备安全等领域。在网络上,它常与ISO联合发布标准,例如涉及物联网、人工智能、网络安全等方面的基础性标准。
- **国际电信联盟(ITU):**这是一个联合国下属的专门机构,负责全球电信和信息通信技术(ICT)事务。ITU的标准被称为"建议书"(Recommendations)。我们所熟知的电话网络(PSTN)、xDSL宽带、以及4G/5G移动通信的核心规范,都由ITU主导制定。它下设的ITU-T(电信标准化部门)是网络协议标准的重要产出地。
二、技术与行业组织
这类组织通常由行业内的企业、科研机构和专业人士自发组成,比官方机构更灵活、反应更快,是互联网和现代通信标准的核心推动者。它们产出的标准虽非"国际标准",但实效上几乎是全球通用的。
- **互联网工程任务组(IETF):**这是互联网最核心的标准制定组织。它没有会员,完全开放,任何人都可以参与。IETF的产出是"请求意见稿"(RFC, Request for Comments),几乎所有互联网赖以运行的基础协议都是RFC文档,包括 TCP/IP协议族(IP、TCP、UDP)、HTTP(网页传输)、SMTP(电子邮件)、DNS(域名系统)、IPv6等。可以说,IETF定义了我们所理解的"互联网"。
- **电气与电子工程师协会(IEEE):**它是全球最大的专业技术组织。在计算机网络领域,IEEE的贡献极为突出,特别是 IEEE 802 委员会,它制定了所有关于局域网和城域网的标准。我们日常使用的以太网(802.3标准) 和 Wi-Fi(802.11标准) 都来自IEEE。此外,蓝牙、令牌环等协议也由其标准化。
- **第三代合作伙伴计划(3GPP):**这是全球移动通信领域的标准制定巨人。它由多个电信标准组织(如欧洲ETSI、中国CCSA、日本ARIB等)联合成立。从2G(GSM)、3G(UMTS)、4G(LTE)到现在的5G,所有的技术规范均由3GPP制定。可以说,你的手机能打电话、能高速上网,背后是3GPP的功劳。
- **世界 Wide Web 联盟(W3C):**它专门负责万维网相关技术的标准化。你上网时遇到的一切基础技术,如 HTML(网页结构)、CSS(网页样式)、XML(数据格式),以及一些网页API(应用程序编程接口),都由W3C定义。没有W3C,浏览器看到的网页将千奇百怪,互不相通。
其他重要组织:
- **对象管理组织(OMG):**以制定CORBA(公共对象请求代理架构) 分布式计算标准而闻名,也负责UML(统一建模语言) 等建模标准。
- **存储网络行业协会(SNIA):**专注于存储网络标准,如光纤通道(Fibre Channel)、iSCSI等。
- **结构化信息标准促进组织(OASIS):**专注于Web服务、安全、物联网等领域的标准,如SOAP(简单对象访问协议)、SAML(安全断言标记语言)等。
三、国家标准机构
许多国家都有自己的标准制定机构,它们一方面将国际标准转化为本国标准,另一方面也根据本国国情制定独特的标准。中国的主要机构有:
- **中国通信标准化协会(CCSA):**这是国内通信领域标准制定的归口单位。它组织国内企业、高校和科研机构,制定中国的通信行业标准(YD/T标准),并参与ITU、3GPP等国际组织的活动。例如,中国的3G标准TD-SCDMA和4G标准TD-LTE,就是在CCSA框架下形成的。
- **全国信息技术标准化技术委员会(TC28):**负责信息技术领域(包括编程语言、数据库、网络协议、信息安全等)的国家标准(GB/T标准)制定。
- **国家标准化管理委员会(SAC):**是中国国家层面的标准管理机构,代表中国参与ISO和IEC。
四、成为事实标准的公司
严格来说,没有任何一家公司可以单独发布国际通用的协议标准。标准是公开、开放的,需要经过多方协商。但是,一些拥有巨大市场影响力的公司,其专有技术或产品规格会凭借极高的市场占有率,被其他公司模仿或兼容,从而成为"事实标准"。
- **思科(Cisco):**作为网络设备市场的长期领导者,思科的许多专有协议(如早期的 IGRP/EIGRP 路由协议、HDLC 封装协议)被广泛部署,成为了事实上的行业标准。掌握思科的命令行和协议,曾是网络工程师的必备技能。
- **微软(Microsoft):**其SMB(服务器消息块)协议(用于Windows文件和打印机共享)在网络文件系统中占据主导地位。很多非微软系统(如Linux、macOS)都要实现兼容版SMB来接入Windows网络。
- **IBM:**IBM的 PC架构 成为了兼容机的标准。此外,其令牌环网(Token Ring) 协议在早期曾与以太网竞争,也影响了后续的IEEE标准。
- **Sun Microsystems:**该公司开发的 NFS(网络文件系统) 成为Unix/Linux环境中网络文件共享的事实标准。其RPC(远程过程调用) 架构也影响深远。
- **其他公司:**Adobe 的 PDF格式 和 PostScript(用于打印),虽然不是网络传输协议,但作为数据格式标准,在网络应用中无处不在。谷歌的 gRPC(高性能RPC框架)和 QUIC协议(正被IETF标准化),也体现了公司推动标准的强大能力。
1.2.1 协议分层
- 协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的
软件分层的好处

- 在这个例⼦中, 我们的"协议"只有两层:语⾔层、通信设备层。
- 但是实际的⽹络通信协议,设计的会更加复杂, 需要分更多的层
- 但是通过上⾯的简单例⼦,我们是能理解,分层可以实现解耦合,让软件维护的成本更低
1.2.2 OSI七层模型(参考模型)
组织定制好标准,不做落地实现,具体由OS厂商来落地。
落地没有办法写成7层是因为,应用层的原因:应用层没有办法写到内核中,所以只有五层(算上物理层)
- OSI(Open System Interconnection,开放系统互连)七层⽹络模型称为开放式系统互联参考模型,是⼀个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层.。每⼀层都有相关、相对应的物理设备,⽐如路由器,交换机;
- OSI 七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最⼤优点是将服务、接⼝和协议这三个概念明确地区分开来,概念清楚,理论也⽐较完整.通过七个层次化的结构模型使不同的系统不同的⽹络之间实现可靠的通讯;
- 但是, 它既复杂⼜不实⽤(实际上做的挺好的!!!); 所以我们按照TCP/IP四层模型来讲解.


- 其实在网络⽹络⻆度,OSI定的协议7层模型其实⾮常完善,但是在实际操作的过程中,会话层、表⽰层是不可能接⼊到操作系统中的,所以在⼯程实践中,最终落地的是5层协议。
1.2.3 TCP/IP五层(或四层)模型
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的网络来完成自己的需求
- **物理层:**负责光/电信号的传递⽅式。⽐如现在以太⽹通⽤的⽹线(双绞 线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线网使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等. 集线器(Hub)⼯作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作. 有以太⽹、令牌环⽹, ⽆线LAN等标准。 **交换机(Switch)⼯作在数据链路层。**数据链路层解决局域网之间的通信的问题,舍友在同一个宿舍中,同一栋楼中。
- 网络层: 负责地址(IP地址) 管理和路由选择. 例如在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由).路由器(Router)工作在网络层。电脑没上公网/外网,之前有IP地址吗?电脑如果没有连无限或者有线的时候是没有对应的IP地址的,一旦连上网络主机就有IP地址了,连接路由器时,路由器给的。
- **传输层:**负责两台主机之间的数据传输。如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到⽬标主机。
- 应⽤层: 负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等. 我们的⽹络编程主要就是针对应⽤层。

1.3 再识协议
1.3.1 为什么要有TCP/IP协议



1.3.2 什么是TCP/IP协议
朴素性的认识:
1. 协议本质是一种约定(计算机OS内如何设定约定的?)
2. OS一般用什么语言来写的??C语言,协议可是很多的!!OS是要管理这些协议的!!先描述,再组织(暂时不谈)!!
3. 协议本质就是结构体!!!C语言定义的!这个结构体的定义是在协议栈内部的!所以对应的Windows和Linux定义的字段和认知是一样的,此时就建立了对于特定数据结构的约定和共识!!

1.3.3 TCP/IP协议与操作系统的关系(宏观上,怎么实现的)
1.3.4 所以究竟什么是协议?
1.4 网络传输的基本流程
1.4.1 局域网网络传输的基本流程
1.4.1.1 局域网通信原理
- 两台主机在同⼀个局域网,是能够直接通信的!(舍友的电脑之间直接拿一根网线连接,也是可以做到通信的),局域网之间,是如何做到通信的??
- 原理类似上课: 老师清点作业,说:"张三,你的作业为什么没有交?"此时,这句话教师中的所有同学是都听到了!所以旁观者收到了信息,但是将这条消息丢弃掉了,因为自己不是张三。张三站起来说:"老师,我的作业交了,只是您没看到罢了。"同时,周围的同学也会听到的。此时在公共的场合教室老师认为和张完成了一次一对一的通话,同时,张三也会认为和老师完成了一次一对一的通话。周围的同学也是可以收到这些消息,只不过周边的人不处理罢了。此场景就是**局域网通信原理!!!**老师、张三以及同学各自是一台主机,宏观上是多台主机在局域网中通信,本质是在一个公共资源里进行通信,所有主机其实都能收到。只不过所有主机判断,你发出来的消息,要去的目标地址不是我,所以将其丢弃。
- 每台主机在局域网上,要有唯⼀的标识来保证主机的唯⼀性:mac地址
1.4.1.2 认识MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- ⻓度为 48 比特位, 即 6 个字节。⼀般⽤ 16 进制数字加上冒号的形式来表⽰(例如:08:00:27:03:fb:19)
- 在⽹卡出⼚时就确定了, 不能修改。 mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址)。
- windows -> ipconfig /all
- Linux -> ifconfig

后⾯我们详细谈论数据链路层的时候,会谈 mac 帧协议,此处我们做⼀个了解即可。

- 平时在宿舍中,只有一个人时,网速特别快,但是当寝室里面舍友全部回来了,网速就会变得卡了,为什么:因为人一多,碰撞概率就会增加,碰撞概率增加,你利用以太网资源就要和别人共享了,一旦共享,网就会变差。
- 还有就是你在操场上,拿手机上网,手机上是无线LAN(当手机通过Wi-Fi上网时:是无线LAN)手机在和基站连接和以太网的通信原理是类似的,只有一个人时,上网会很快,但是在运动会的这样的场景时,网就会变得特别慢,因为信息在学校附近的基站里,你的信息和其它的信息在做互相干扰。所以就一直在做碰撞避免和碰撞检测。
在以上所有的例子中得到:局域网通信在做碰撞检测和碰撞避免。
1.4.1.3 深刻理解碰撞检测和碰撞避免:
- 所有主机都能向以太网中发送消息, 一旦发生碰撞就不能发了,站在主机的角度:你能写,我也能写。以太网的本质:在系统视角,不就是共享资源嘛!!
- 所谓的数据发生碰撞,不就是多主机向共享资源写数据,造成了数据不一致的问题!!!碰撞检测和碰撞避免的潜台词就是:**任何时刻,只允许一台主机,使用以太网,向目标主机发送数据!!所以以太网通信的这种策略不就是相当于变相的完成了 "锁" 功能!!对以太网的访问必须就是临界区式的访问。**以太网就是一个临界资源,所有主机,通过发送数据,一旦碰撞丢弃这个数据,碰撞避免,让其他人发,任何时刻只允许一台主机发送消息,所以以太网在我看来就是临界资源!!!
- 局域网中还有令牌环网,令牌环网的原理是多个主机必须持有对应的令牌,持有的才能发送消息,没有令牌的主机就不能发送消息,基于令牌式的在局域网中通信的叫做令牌环网,这里的令牌就是之前说过中的在互斥锁中的 "1",就是那个锁!
为什么局域网会存在这么多种技术??以太网、令牌环网、无线LAN
先有的局域网技术,后面才有的广域网。在刚开始局域网的时候就会存在存在多种技术。在之后的发展中,有些局域网技术就直接被淘汰了,留下来的就是现在的以太网和令牌环网,在设计广域网的时候,局域网已经被做出来了,所以TCP/IP就对局域网技术做了虚拟化的处理,就保留了这两种不同的局域网技术。
初步明⽩了局域网通信原理,再来看同⼀个网段内的两台主机进⾏发送消息的过程。

两台主机在通信,本质是,两个用户之间触发的。局域网网络通信时,本质是双方用户触发这个消息,然后去完成自顶向下的数据交付,到达数据链路层,在经过局域网通信,再通过自底向上交付到,本质是两个人在通信,就引起链路层通信。
而其中每层都有协议,所以当我进行上述传输流程的时候,要进行封装和解包

上面封装的过程有点像我们日常网购,寄过来的商品都是有盒子包装好的。


- 报头部分,就是对应协议层的结构体字段,我们⼀般叫做报头
- 除了报头,剩下的叫做有效载荷
- 故,报⽂ = 报头 + 有效载荷
然后,我们在明确⼀下不同层的完整报⽂的叫法
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame)。
- 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation)。
- ⾸部信息中包含了⼀些类似于⾸部有多⻓, 载荷(payload)有多⻓, 上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部, 根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理
如何封装的??

添加报头的本质就是拷贝!!真实情况根本就不需要拷贝,真实情况,定义一块空间,用一个指针指向,写入你好之后,向前移动,将该指针强转为对应的结构体对象,直接向里面写就可以了。封装的过程就是在一段缓冲区中按顺序一次添加结构体变量的过程。
补充两个细节:

1.4.1.4 数据包的封装和分用
封装的过程

分用的过程

1.4.1.5 重谈局域网通信原理

1.4.2 跨网络传输流程图
1.4.2.1 网络中的地址管理 - 认识IP地址
IP 协议有两个版本, IPv4 和 IPv6 . 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指 IPv4
- IP 地址是在 IP 协议中, ⽤来标识网络中不同主机的地址;
- 对于 IPv4 来说, IP 地址是⼀个 4 字节, 32 位的整数;
- 我们通常也使⽤ "点分⼗进制" 的字符串表⽰ IP 地址, 例如 192.168.0.1 ; ⽤点分割的每⼀个数字表⽰⼀个字节, 范围是 0 - 255 ;
跨网段的主机的数据传输. 数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器.

在以太网中,主机A是一台主机,路由器也是一台主机,两个主机支持跨网络通信,就得支持路由器横跨两个网络,在以太网中,路由器和主机A是一伙的,在令牌环网中,路由器和主机B是在同一个局域网的,可以认为路由器至少有两个网卡。有可能主机A和主机B相隔千里。
**主机A标识主机B的唯一性:IP地址!!**在一个子网内用Mac地址来标识,但是跨网络了,就不能用Mac地址,为什么??文章后面会提到
看一看IP地址:(准确来说是内网IP)

之前不是说主机使用Mac地址来标识唯一性的嘛???现在怎么又说是IP地址呢??一个例子来说明情况:
例子:唐僧西天取经

如何进行跨网络通信??



提炼IP⽹络的意义和⽹络通信的宏观流程

真正一个报文是把自己放在物理线路上去进行传递!!!!