1.计算机网络背景
1.1网络发展
计算机体系结构本质也可以被看做是一个小型网络。计算机与计算机之间也是用“线”连接起来的。与其说两台计算机通信,本质上其实也是通过“线”链接起来。不过是“线”长了一点(网线,无限LAN)。
- 独立模式:计算机之间相互独立;
- 网络互联:多台计算机连接在一起,完成数据共享;
那么我们一般一台计算机内,把外设和内存之间的“线”称作IO总线。CPU和内存之间的“线”称作系统总线,我们常见的有32位/64位。
那么我们此时需要面对一个问题,在主机内,“线”比较短;跨主机,“线”比较长。而当“线”比较短时,数据之间会发生信号干扰;而“线”比较长时,数据的可靠性就降低了,以及效率变低,以及存在寻找对方的问题。
局域网和广域网
计算机网络,根据其规模可分为WAN(Wide Area Network,广域网)和LAN(Local Area Network,局域网)。
局域网LAN:计算机数量更多了,通过交换机和路由器链接在一起。(一栋楼或大学校园中有限的,狭小的,区域内网络)
广域网WAN:将远隔千里的计算机都连在一起;
1.2 协议
“协议” 是一种约定。这种约定使那些由不同厂商的设备、不同的CPU以及不同的操作系统组成的计算机之间,只要遵循相同的协议就能够实现通信。两台计算机必须能够支持相同的协议,并遵循相同协议进行处理,这样才能实现相互通信。
思考:只要通信的两台主机,约定好协议就可以了么?
- 计算机生产厂商有很多
- 计算机操作系统也有很多
- 计算机网络硬件设备还是有很多
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?就需要有人站出来约定一个共同的标准,大家都来遵守,这就是网络协议
2.网络协议初识
2.1协议分层
通信协议设计指标的OSI参考模型。这一模型将通信协议中必要的功能分成了7层。通过这些分层,使得那些比较复杂的网络协议更加简单化。
2.2OSI七层模型
- OSI(Open System Interconnection,开放系统互连) 七层网络模型称为开放式系统互联参考模型是一个逻辑上的定义和规范;
- 把网络从逻辑上分为7层,每一层都有相关,相对应的物理设备,比如路由器,交换机;
- OSI七层模型上是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输
- 他的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次的结构模型使不同的系统不同的网络之间实现可靠的通讯。
但是由于OSI七层模型既复杂又不实用,因此我们经常使用TCP/IP四层模型
2.3 TCP/IP 五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层:负责光/电信号的传递方式比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wififi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。
由于物理层我们考虑的比较少,因此很多时候也可以称为TCP/IP四层模型。
一般而言:
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容
- 对于一台路由器,它实现了从网络层到物理层
- 对于一台交换机,它实现了从数据链路层到物理层
- 对于集线器,它只实现了物理层。
但是并不绝对,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)
网络和操作系统之间的关系
TCP/IP协议和操作系统的关系是:操作系统内部,有一个模块,就叫做TCP/IP协议,网络协议栈是隶属于OS的!
那么两台主机之间进行通信的时候,同层协议都认为自己在和对方直接通信!
2.4重谈协议 -- 计算机的视角,如何看待协议?
举个例子,我们在网上购买一个鼠标。你和卖家沟通好,买了一个鼠标,实际上快递员给你的是一个包裹,里面有鼠标。
实际上,快递员多给了我们一些东西!快递单。这个快递单上填的一些数据。这些数据不是给你用的,是给快递公司用的。快递单多出来的这些数据是快递公司和快递点和快递小哥之间的协议!
为了维护协议,一定要在被传输的数据上新增其他数据。这个新增的其他数据我们叫做协议数据。
2.5 网络传输基本流程
网络传输流程图
同一个网段内的两天主机进行文件传输。
我们把每一层要交付给下一层的数据,给他添加上本层“多出来的协议数据”拼接在原始数据的开头叫做报头.
跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称谓封装
- 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥夺相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理
下图为数据封装的过程
下图为数据分用的过程
3.网络中的地址管理
3.1认识IP地址
IP协议有两个版本,IPv4和IPv6,我们凡是提到IP协议,如果特殊说明的,默认都是值IPv4
- IP地址是在IP协议中,用来标识网络中不同主机的地址;
- 对于IPv4来说,IP地址是一个4字节,32位的整数
- 我们通常也是用“点分十进制”的字符串表示IP地址,例如:192.168.0.1;用点来分割每一个数字表示一个字节,范围是0-255;
3.2认识MAC地址
每一台主机都要有唯一的标识,就是该主机对应的MAC地址!
任何一台主机,在任何时刻都可以随时发消息。我们把这种局域网的情况叫做 碰撞域 -- 无法准确的听到对应的消息 -- 每一台主机也能识别发生了碰撞(碰撞检测) -- 碰撞避免 -- 如果没人说话我再说话
- MAC地址是用来识别数据链路层中相连的节点;
- 长度为48位,即6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置mac地址)
在云服务器下查看MAC地址
ifconfig 可以查看MAC地址
ether:以太
其中“从哪儿来” -> "到哪里去" -- 对应IP 地址 ;"上一站从哪儿来"-- "下一站到哪儿去" 对应的是MAC地址。
MAC地址用来在局域网中标定主机的唯一性
IP地址在广域网中(公网),标定主机的唯一性。
结论:
- 一般而言,任何报头属性里面一定要存在的一些字段要支持进行封装和解包
- 一般而言,任何报头属性里面一定要存在的一些字段支持,我们要进行分用
(本篇完)
版权归原作者 小白又菜 所有, 如有侵权,请联系我们删除。