目录
3.OSI七层模型
一丶网络发展
早期计算机并没有网络,每个计算机直接相互独立。都是独立工作~计算机网络由此诞生~
网络互联:有人想出将多个计算机连接在一起完成多人之间的数据交换和处理~
1.局域网
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。多个局域网之间可以由路由器连接在一起从而实现跨局域网通信,形成一个更大的局域网。在局域网中有一种设备叫做交换机,交换机主要完成局域网内数据的转发工作,也就是在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器连接起来,路由器主要完成数据的路由转发工作。
2.广域网
将千里之外的计算机都连接在一起,广域网是局域网的相对概念。只是一个更大的局域网
二丶网络协议概念
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。所谓光电信号就是从网线中过来~
1.网络协议
网络是存在哪里的呢?磁盘还是cpu?
网络也是软件,软件都是层状结构,网络协议栈也是分层的。它是贯穿于计算机体系结构的一个软件,尤其是TCP/IP协议栈,是属于操作系统的一部分。
2.协议分层
我们想要两个计算机之间进行通信就需要先让他们双方约定好一个协议。但不像我们人类说话,彼此知道对方在说什么。计算机之间就使用它们之间的协议~
3.OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解
4.TCP/IP四层模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层:
负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wififi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
数据链路层:
负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。
网络层:
负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
传输层:
负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
应用层:
负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。
三丶网络传输流程
通过UDP/TCP理解网络传输流程~
1.局域网通信
当用户要将文件传输给另一台主机前,该文件数据需要先通过网络协议栈进行封装:
- 文件数据先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层。
- 传输层收到数据后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付。
- 网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层。
- 链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕。
数据封装完毕后就可以通过以太网将其发送给对端主机了,而当对端主机收到数据后,对应也需要通过网络协议栈对该数据进行解包与分用:
- 链路层收到数据后,先将数据中对应链路层协议的报头信息提取出来,然后将剩下的数据交给网络层。
- 网络层收到该数据后,再将数据中对应网络层协议的报头信息提取出来,然后将剩下的数据继续向上进行交付。
- 传输层收到该数据后,再将数据中对应传输层协议的报头信息提取出来,然后将剩下的数据再交付给应用层。
- 应用层收到数据后,最后将数据中对应应用层协议的报头信息提取出来,至此便完成了数据的解包与分用。
主机A给主机B发送数据之前。正文部分都要自顶向下贯穿协议栈来完成封装。在此过程中每一层协议栈都会添加上相应的报头信息,而主机B接收到数据后,都要子底向上对数据进行解包分用。在此过程中每一层协议都会将对应的报头信息提取出来~
1.报头的理解
我们可以将报头理解为你买的快递,快递物品你要使用的东西就是有效载荷。快递上面的快递单号就可以理解为报头信息~
在计算机系统中,报文由两部分组成~报头和有效载荷;只有当前层的报头被认为是报头,之后的都是有效载荷~
报头的组成就是c语言中的位段~
//(假设)报头结构 struct my_hdr { unsigned int src:16; unsigned int dst:16; unsigned int type:8; unsigned int len:24; } struct my_hdr my = { 0x1, 0x2, 0x3, 0x9 };
2.数据包的封装与分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
2.广域网通信
- 数据已经封装好了,准备进行发送,如果对方和自己不在同一个局域网内就要进行路由器的转发,如下图。
- 有两个局域网,中间的路由器可以作为左边局域网的主机也可以作为右边局域网内的主机。路由器接受到左侧发送过来的数据后,进行解包,发现MAC地址不在本局域网内,然后去除之前的以太网首部,通过查询路由表确定新的MAC地址,再次添加以太网首部,然后发送到另一个局域网内。
四丶网络中的地址管理
1.认识IP地址
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
2.MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

在linux中可以通过ifconfig查看MAC地址。