目录
网络的发展
重新看待计算机结构
大型存储平台
认识 "协议"
网络和OS之间的关系
初识网络协议
协议分层
OSI七层模型
TCP/IP五层(或四层)模型
网络传输基本流程
局域网通信的原理
如果进行跨网络传输
网络通信里面的基本轮廓
数据包封装和分用
下图为数据封装的过程
下图为数据分用的过程
网络中的地址管理
认识IP地址
认识MAC地址
C语言总结在这常见八大排序在这
作者和朋友建立的社区:非科班转码社区-CSDN社区云
期待hxd的支持哈
最后是打鸡血环节:想多了都是问题,做多了都是答案
最近作者和好友建立了一个公众号
公众号介绍:
专注于自学编程领域。由USTC、WHU、SDU等高校学生、ACM竞赛选手、CSDN万粉博主、双非上岸BAT学长原创。分享业内资讯、硬核原创资源、职业规划等,和大家一起努力、成长。(二维码在文章底部哈!)
独立模式 : 计算机之间相互独立 ;(网图)网络互联: 多台计算机连接在一起, 完成数据共享;
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
所谓 " 局域网 " 和 " 广域网 " 只是一个相对的概念 . 比如 , 我们有 " 天朝特色 " 的广域网 , 也可以看做一个比较大的局域网。路由器:局域网和局域网间进行数据包转发(路由器是来连接不同的网络(局域网)的)。
局域网:网络的内部没有路由器。
广域网:有多种路由器还要接入公网。
首先,计算机内部是怎么传输数据的?其实就是用线连接起来,那么网络怎么传输数据?一样也是用线连接起来,只不过线更长了,网络知识的本质,就是因为线变长了!
其实一台计算机内部就可以看成一个小型网络,各个设备之间也是通过线来传输数据的,不过就是短了些。
对于两台计算机之间,在体系结构上,与其说是两台计算机通信,倒不如暂时说是两台计算机的网卡之间通过网线连接起来了,不过就是线长了些。
PS:我们一般把外设和内存连接的总线称为IO总线,CPU和内存连接的线为系统总线(一般说的32位,64位)。
大型存储平台:就像一些大公司有各个集群,一个集群里面有多台主机。存储集群把任务放到缓冲集群,以任务队列的方式唐计算集群去运算,然后把结果返回到缓存集群,最后缓存集群再把结果写到存储集群,这就是使用多主机互相连通,实现宏观上的冯诺依曼体系结构
计算机之间的传输媒介是光信号和电信号 . 通过 " 频率 " 和 " 强弱 " 来表示 0 和 1 这样的信息 . 要想传递各种不同的信息, 就需要约定好双方的数据格式。比如计算机生产厂商有很多,计算机操作系统, 也有很多,计算机网络硬件设备, 还是有很多,如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是 网络协议。
所谓协议,就是一方和另一方的约定。
有协议也要有标准,不止是软件上的标准,硬件上也要有。(比如硬件上传递 0 1 信号的方式要一样,这样才能在传递和提取的时候保证不会出现问题)
在网络当中主机之间直接通信一定是由用户发起,使用应用层协议(可以自己写也可以用现成的),贯穿对应的协议栈,到我们的物理层,再经过网络路由转发到对方的物理层,然后提交到对方的数据链路层,依次向上提交,最后到对方的用户。
1. 体系结构决定,数据包在主机内进行流动的时候,一定是要自顶向下或者自底向上的进行流动的,所有的IO都是这样。(为什么要自顶向下或者自底向上交付原因就是体系结构决定的,要网络通信就要把数据从应用层交到底层,因为只有硬件能接发数据)
2. 同层协议都认为自己在和对方直接通信。
3. 为了维护协议,一定要在被传输的数据上,新增其他数据(比如你买快递上面会有快递单号,虽然你只要快递,但是如果没有单号你就无法被快递员正确送达你的快递),我们把每一层要交付给下一层的数据,给他添上本层的“多出来的数据”拼接在原始数据的开头。(这个多出来的数据就叫做 报头)((封装和解包就是数据自上而下必须要添加每一层的协议(添加报头),自下而上的时候解包再把报文再拆出来))
打电话为例(网图):
在这个例子中, 我们的协议只有两层; 但是实际的网络通信会更加复杂, 需要分更多的层次.
在打电话人的层面,都认为是和对方直接沟通的,在通信设备层也一样,他们也认为是和对面直接沟通的(每一层都认为自己那一层是在直接沟通的),所以在自己的那一层,改变了通信协议,是不影响下面或者上面的层的。
协议分层
然后为什么要分层?
我们知道软件是可以分成的,他的好处就是:
1. 软件在分层的同时,也把问题归类了。
2. 分层的本质:软件上的解耦。
3. 便于工程师进行软件维护。
--》网络本身的代码,就是层状结构。
每一层都认为自己那一层是在直接沟通的
分完层最大的好处就是上层只需要调用下层的接口/方法就可以了,不必关心底层实现(比如之前调用系统接口等)
OSI七层模型
OSI ( Open System Interconnection ,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;把网络从逻辑上分为了 7 层 . 每一层都有相关、相对应的物理设备,比如路由器,交换机 ;OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输 ;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整 . 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;但是 , 它既复杂又不实用 ; 实用的是 TCP/IP协议。OSI定的非常好,但是在实施的时候,发现有些层是不好处理的,所以实际制作的时候,做出来的是五层协议TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.操作系统内部,有一个模块,叫做tcp/ip协议,网络协议栈是隶属于操作系统的。TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求物理层 : 负责光 / 电信号的传递方式 . 比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同轴电缆 (现在主要用于有线电视 ) 、光纤 , 现在的 wififi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器 (Hub) 工作在物理层。数据链路层 : 负责设备之间的数据帧的传送和识别 . 例如网卡设备的驱动、帧同步 ( 就是说从网线上检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作 . 有以太网、令牌环网, 无线 LAN 等标准 . 交换机 (Switch) 工作在数据链路层。网络层 : 负责地址管理和路由选择 . 例如在 IP 协议中 , 通过 IP 地址来标识一台主机 , 并通过路由表的方式规划出两台主机之间的数据传输的线路( 路由 ). 路由器 (Router) 工作在网路层。传输层 : 负责两台主机之间的数据传输 . 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。应用层 : 负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议(Telnet )等 . 我们的网络编程主要就是针对应用层。PS:集线器:可以放大信号(肾上腺激素属于是)
调制解调器:在网络里传输和在家传输信号编码格式是不一样的。有一种是数字信号,有一种是模拟信号。主要是将数字转模拟或者反过来,一个是比较利于在局域网进行通信的,一个是利于长距离转发的。所以说从外网进来的数据是要经过锚转发到你的路由器然后被你所识别的。物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.
一般而言
对于一台主机 , 它的操作系统内核实现了从传输层到物理层的内容 ;对于一台路由器 , 它实现了从网络层到物理层 ;对于一台交换机 , 它实现了从数据链路层到物理层 ;对于集线器 , 它只实现了物理层 ;但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
局域网通信的原理
1. 每台主机都要有唯一标识:该主机的MAC地址
MAC地址实际上就是网卡地址,就是我们这个机器在出厂的时候配套得装有网卡,网卡上面已经内嵌了当网卡所对应的MAC地址,MAC地址主要工作在局域网,用来在局域网中标定主机的唯一性。
2. 任何一台主机,在任何时刻都可以发消息,这种局域网称为碰撞域的概念(就是局域网内的信息可能会互相干扰)。因为有碰撞域所以会导致我们无法准确的听到对应等待消息。所以每一台主机是能过识别局域网中发生了碰撞的(碰撞检车),然后执行碰撞避免,等到没有人发数据的时候再发。
以太网MAC地址
ifconfig 查看
PS:站在系统角度,我们就可以发现以太网就是一个临界资源。
PS: 为什么叫以太网
物理学界是任务任何事物的传播都是有介质的,那么光也一样,那太空是真空,他们就猜想太空中有我们没有发现的物质,他就称为以太,然后就有科学家去证明,然后发现几天就做不下去了,因为所有都指向他是不存在的。然后这个事情就变成了物理界的“笑话”(因为当时很多科学家持肯定态度,一定存在以太)。后来就在上个世纪5 60年代有一批网络工程师,开始通信,构建了一个局域网然后能过通信,他们就在想为这个能通信的局域网起一个名字,他们就想到了物理学界的这个事情,为了去致敬就把当时那种局域网通信的标准称为以太网。
如果进行跨网络传输
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
只要是路由器,只要能过在两个网络中进行跨网络传输数据的时候,那么他至少是有两个网络接口,甚至是两张网卡,分别连接不同的网络。我们可以把路由器分别当作两边网络中的一台主机。
对上补充
IP地址在局域网也是唯一的但是目前不考虑因为IP层及以上发送和接受主机看到的数据都是一样的,所以我们把网络也称为IP网络,屏蔽了局域网的网络差异(源MAC地址和目标MAC地址不同)。这样在IP层以上全网的主机就都可以使用同一份协议,这就是IP的意义。
上面是怎么做到的:就是他走到对应的局域网时,套上局域网的报头,经过路由器时会去掉报头,然后到下一个路由的时候重新封装MAC地址,所以在一个IP报文在不断流动的时候,他的目的IP一定是不变,但是他的源MAC地址和目标MAC地址一定是在变的。IP地址不变就相当于用IP层在网络内,将所有的主机设置了一层软件层,也叫做在IP协议往上,所有人在任何设备上看到的数据都是一样的。
网络通信里面的基本轮廓
所以网络数据转发的时候,数据自顶向下经过路由器,就是MAC地址一直经过路由器的选择一直在解包和封包再重新进行转发,经过路由器的选择,到达目标主机。
网络传输的本质就是数据在网络传输的过程中,不断的被封包和不断的被解包的过程,同时配合查找IP层对应的各种路由表进行路径选择。数据包封装和分用
1. 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。2. 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。3. 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息。4. 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。
认识IP地址
IP协议有两个版本, IPv4和IPv6. 我们没有特殊说明的, 默认都是指IPv4。
1. IP地址是在IP协议中, 用来标识网络中不同主机的地址。2. 对于IPv4来说, IP地址是一个4字节, 32位的整数。3. 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;认识MAC地址
1. MAC地址用来识别数据链路层中相连的节点。2. 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。3. 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。
最后的最后,创作不易,希望读者三连支持
赠人玫瑰,手有余香