独立模式与网络互联
独立模式: 计算机之间相互独立。
网络互联:多台计算机连接在一起,完成数据共享。
注意:无论是主机内还是主机外,都是通过线来进行连接的,主机内线(线比较短)的连接主要考虑的是电磁干扰的问题,主机外线(线比较长)的连接主要考虑有三方面问题:可靠性,效率,寻找到对方三方面问题。
局域网/广域网的概念
局域网
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起(一般局域网内部没有路由器,但是一般会由一个路由器将多个计算机连接起来)
广域网
广域网WAN: 将远隔千里的计算机都连在一起(由无数路由器连接起来的)
所谓的局域网和广域网只是一个相对的概念,比如我们国内的广域网,也可以看作是一个比较大的局域网。
认识协议
“协议” 是一种约定.
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.
问:是不是只要通信的两台主机约定好协议就能够进行通信了?
答:不是的,计算机之间的通信还涉及到信号的解释等等,比如一段相同的信号,不同计算机对信号的解释方式不同,最终得到的信息也是不同的。
网络协议初识
协议分层
为什么要分层 ?
- 软件在分层的同时,也把问题归类了
- 分层的本质:软件上解耦
- 便于工程师进行软件维护
而网络本身的代码,就是层状结构。
注意:网络协议分层的最根本的原因是由计算机的体系结构决定的,即这是由硬件本身所决定的,体系结构决定,数据包要想在主机内进行流动,一定是自底向上或者自顶向下,以前的数据IO也都是这样进行的。
OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型, 是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来进行学习.
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
物理层
:负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层(集线器的作用就是信号放大).数据链路层
: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.网络层
: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.传输层
: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机.应用层
: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层.
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.
一般而言
- 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
注意:光猫的作用就是进行数字信号和模拟信号之间的转换,前者便于在局域网之间进行通信,后者便于长距离之间的通信。
网络传输基本流程
网络传输流程图
同一个网段内的两台主机进行文件传输.
上面的这种体系结构决定了:数据包在主机内进行流动的时候,一定是要进行自顶向下或者自底向上进行流动的。
两台计算机通过TCP/IP协议通讯的过程如下所示:
TCP/IP通讯过程
同层协议都认为自己在和对方直接通信,不关注底层协议的细节。
局域网通信的原理:
首先,在局域网当中,两台主机是可以直接通信的,下面就是局域网通信的原理:
- 每一台主机都要有唯一的标识符:即该主机对应的MAC地址(网卡地址,可以在局域网当中标定主机的唯一性)
- 任何一台主机,在任何时刻,都可以随时向局域网当中发消息 ---- 碰撞域(发送的信息会互相干扰),所以主机无法准确的收到并辨别对应的消息。解决方法:主机是可以识别到是否发生碰撞的(碰撞检测),当检测到碰撞发生的时候,要避免碰撞(碰撞避免),也就是过一会再发。
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
注意:所有的IP层向上的协议,发送和接收主机看到的数据是一模一样的。
在数据进行流动的时候,IP层向下的层,接收到的数据的源MAC地址和目的MAC地址都是不一样的,但是源IP地址和目的IP地址始终都是不变的。
注意:MAC地址是在网络层下面的数据链路层进行封装的,每个节点都有自己独特的MAC地址。
数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议 字段” 将数据交给对应的上层协议处理.
抽象图示:
数据封装的过程:
数据分用的过程:
分用描述:决定将自己的有效载荷交给上层的哪个协议,这个过程叫作分用。
问:解包的时候,系统是如何知道我们封装的哪一种协议?
答:数据包在添加报头的时候,也要考虑未来解包的时候,将自己的有效载荷交付给上层的哪一个协议。所以在进行封装报头的时候,一定会存在一些字段来支持我们进行封装和解包,也就是报头的长度,方便我们进行解包。同样的报头属性中,也会存在一些字段支持我们进行分用,也就是我们封装的报头的协议的类型。
网络中的地址管理
认识IP地址
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个 字节, 范围是 0 - 255;
认识MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).
在Linux中查看MAC地址:
区分IP/MAC地址
-
IP地址:从哪里来,到哪里去(IP地址:源IP地址,目的IP地址)
作用:公网中主机唯一的标识符
-
MAC地址:上一站从哪来,下一站到哪去
作用:局域网中主机一的标识符
简单图示: