网络基础
此小节介绍网络基础概念
首先要明确的是 网络是层状结构!分层->OP->解耦
网络发展:最早的时候,每台计算机之间是相互独立的。后续发展到网络互联,就是将多台计算机连接在一起,完成数据共享。
协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎样建立连接、怎样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
网络协议–协议分层
在实际生活中,有很多不同的计算机生产厂商,不同的计算机操作系统,不同的计算机网络硬件设备,想让这些不同厂商之间生产的计算机能够相互顺畅地通信的方法==>遵守相同的网络协议。网络协议是软件协议。
操作系统要对协议进行管理,同样的道理,也得先描述再组织。
网络协议本质是软件,而软件是可以被分层的(面向对象的思想,每一层看作是一个对象)。
划分为层状结构的原因:a.网络通信场景复杂(比如距离越远通信越复杂);b.功能解耦(每一层解决不同的问题,便于维护)。通信复杂是协议栈要解决的问题。
在网络中,为了完成通信,必须使用多层上的多种协议,这些协议按照层次顺序组合在一起,构成了协议栈(Protocol Stack),也称为协议族(Protocol Suite)。
从TCP/IP协议(传输层协议TCP+网络层协议IP)的角度来看以下应用场景
国际标准化组织(ISO)为了规范协议层次的划分制定了开发系统互联(OSI,Open Systems Interconnection)模型,即ISO/OSI参考模型。此模型根据网络功能制定出7层网络协议结构,由低到高分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
OSI | OSI各层对应的功能 | 系统 | TCP/IP |
---|---|---|---|
应用层 | 为计算机用户提供针对特定应用的接口和服务(如电子邮件协议、远程登陆协议、文件传输协议等) | lib,shell,应用软件等 | 应用层 |
表示层 | 数据处理(不同类型的数据按照网络标准格式进行编码解码、加密解密等) | lib,shell,应用软件等 | 应用层 |
会话层 | 管理(建立、维护、重连)通信会话(比如何时建立连接、断开连接以及保持连接的时间) | lib,shell,应用软件等 | 应用层 |
传输层 | 管理端到端的通信连接 | 操作系统–system call | 传输层 |
网络层 | 数据路由(决定数据在网络的路径) | 操作系统 | 互连网络层 |
数据链路层 | 管理相邻节点之间的数据通信(互联设备之间传送和识别数据帧) | 驱动 | 网络接口层 |
物理层 | 数据通信的光电物理特性(0/1比特流与高频/低频电子信号之间的切换) | 硬件 | 物理层 |
该模型比较复杂,但是很规范!但是简单起见,我们按照TCP/IP四层模型来介绍。
TCP/IP四层(或五层)模型
核心协议是传输层协议TCP+网络层协议IP。五层与四层之间差着个物理层。因为物理层不属于软件层面,故我们了解4层模型。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
TCP/IP | 功能 | 在该层工作的设备 |
---|---|---|
应用层 | 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。 | 应用程序 |
传输层 | 负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。 | |
网络层 | 负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。 | 路由器(Router) |
数据链路层(网络接口层) | 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作,有以太网、令牌环网、无线LAN等标准 | 局域网中的交换机(Switch) |
物理层 | 负责光/电信号的传递方式。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层 | 集线器、调制解调器(即Modem猫,用于模拟信号和数字信号的转换工作) |
注意:局域网的标准有可能是不一样的(以太网、令牌环网、无线LAN等标准)。
一般来说
- 对于一台主机,它的操作系统内核实现了从传输层到网路层的内容;
- 对于一台路由器,它实现了从网络层到物理层 或者 从传输层到物理层;
- 对于一台交换机,它实现了从数据链路层到物理层 或者 从网络层到物理层;
- 对于集线器,它只实现了物理层;
但是并不绝对,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)。
网络传输基本流程
两台主机在同一个局域网下,是可以进行数据传输的。
从逻辑层面来说,我们就当作应用层之间可以相互传递数据。但是在物理层面来说,数据必须先由A主机的应用层自顶向下传到物理层,在此进行数据交互,然后由B主机的物理层自底向上传给应用层。
每层都有自己的协议制定方案,所以每层协议都要有自己的协议报头。
自顶向下交付数据时,要添加每层特定的报头;自底向上交付数据时,要删除每层特定的报头。【我们可以这样理解:越上层的报头越靠数据内侧,自顶向下添加报头就是在压栈,自底向上删除报头就是在出栈。】在逻辑上看作可以同层通讯,实际得自顶向下再自底向上。
每一层封装的本质是添加报头,解包/分用是去掉报头并展开分析报头。
局域网通信,即在整个局域网发消息,每一台主机都会收到,只不过发的消息是包含目的主机MAC地址(MAC地址是主机的唯一的标识)【IP地址(公网IP)也标定了主机的唯一性】,只有指定主机能收到该消息,其余主机收到该条消息会直接丢弃。如果局域网内同时有很多主机在发消息,会导致局域网内的消息碰撞,无法正确递达消息,所以局域网内会有避免消息碰撞的机制。
查MAC地址 ifconfig
[yyq@VM-8-13-centos ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.8.13 netmask 255.255.252.0 broadcast 10.0.11.255
inet6 fe80::5054:ff:fef3:9e66 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:f3:9e:66 txqueuelen 1000 (Ethernet)
RX packets 83502872 bytes 18443326066 (17.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 78996573 bytes 13513298487 (12.5 GiB)
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 5372787 bytes 1070906369 (1021.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5372787 bytes 1070906369 (1021.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0表示是云服务器的网络接口,ether 52:54:00:f3:9e:66
,ether叫做以太,跟着的是16进制的数字,以:做分隔,8个比特位=1字节,6*8=48个比特位,6字节,就是以太网地址(MAC地址)。
inet 10.0.8.13
inet即ipnet,是云服务器的主机地址,也叫做内网ip。
IP地址
IP地址是在IP协议中,用来标识网络中不同主机的地址。IPv6和IPv4是不兼容的。
对于IPv4来说, IP地址是一个4字节, 32位的整数,IPv6是用128位整数来标识。
我们通常也使用 “点分十进制” 的字符串表示IP地址,例如 192.168.0.1;用点分割的每一个数字表示一个
字节,范围是 0 - 255。
MAC地址
路由器的每一个端口,都有独立的 MAC 地址。路由决定了源IP和目标IP途径哪些MAC地址(下一跳的问题)。
MAC地址用来识别数据链路层中相连的节点。
长度为48位,即6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突; 也有些网卡支持用户配置mac地址)
两者的区别
1、对于网络中的一些设备,路由器或者是PC及而言,IP地址的设计是出于拓扑设计出来的,只要在不重复IP地址的情况下,它是可以随意更改的;而MAC地址是根据生产厂商烧录好的,它一般不能改动的,一般来说,当一台PC机的网卡坏了之后,更换了网卡之后MAC地址就会变了。
2、在前面的介绍里面,它们最明显的区别就是长度不同,IP地址的长度为32位,而MAC地址为48位。
3、它们的寻址协议层不同。IP地址应用于OSI模型的网络层,而MAC地址应用在OSI模型的数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。
4、分配依据不同。IP地址的分配是基于我们自身定义的网络拓扑,MAC地址的分配是基于制造商。一个是主观的,而另一种是可观的。
报文是要被封装的,那就要按照规定来封装,方便后续解包。每一个协议都要解决的2个问题:1、决定报文的封装和解包;2、如何将有效载荷交付给上层有效协议。
附:更详细的讲解可以看一篇文章如果让你来设计网络 (qq.com)
IP地址和MAC地址改变与否的情况分析
首先要划分三种情况。
第一种:数据帧仅在交换机之间转发
交换机是在链路层的。可以设想一种情况,即在以太网中两台主机进行数据交换,直接通过交换机进行交换即可。
这种情况,数据帧在交换机之间转发不更改源MAC地址和目标MAC地址。
主机A和主机B通过若干个交换机相连(并没有路由器在中间),源MAC地址自然是主机A的网卡所对应的MAC地址,目标MAC地址则是主机B的网卡所对应的MAC地址,这种情况下转发数据帧是不会改变MAC地址的。
第二种:数据帧在路由器之间转发
这种情况下,源IP地址和目标IP地址一定不改变,但是MAC地址一定会改变。
IP数据报的首部写有源IP地址和目标IP地址两个字段,同时还会检验和字段检验首部是否出错,在正常情况下这两个字段是不会改变的。MAC帧中写了源MAC地址和目的MAC地址这两个字段,MAC地址改变的原因是,采用了ARP协议将IP地址转化为下一跳的MAC地址,原来的MAC地址被通过ARP协议获取的行的MAC地址覆盖了,所以MAC地址才会改变。
当然,在特殊情况下,IP地址也会改变。
第三种:数据帧在主机之间转发
3.1 两个主机在同一个子网(网段)
在同一个网段,此时就不需要经过路由器转发。那么源IP和目的IP、源MAC地址和目的MAC地址都不会发生改变。
3.2 两个主机在不同的子网(网段)
不在同一个网段,需要经过路由器转发。经过路由器R1时,使用NAT将内部IP地址转换为外部公用IP地址,即NAT将源IP地址转换为网关的IP地址。主机A–>路由器R1,源IP地址是A,目的IP地址是B;经过路由器R1之后,源IP地址就会变成R1。
看一下这道题,加深理解