目录
一.预备知识
1.1网络背景
1.2协议
二.网络协议
2.1协议分层
2.2OSI 7层
2.3TCP/IP五层(或四层)
三.网络传输基本流程
3.1局域网通信
3.2 跨网络通信
3.3IP地址与MAC地址
一.预备知识
1.1网络背景
独立模式:计算机之间相互独立
网络互联: 计算机之间可以链接在一起,完成数据共享,计算机之间还可以进行相互通信
局域网(LAN): 一片区域内的计算机通过路由器和交换机连接在一起,可以用来相互通信的计算机数量增多
广域网(WAN): 多个局域网通过路由器连接起来,构成一个广域网,也可以说是一个更大的局域网
1.2协议
而我们在用手机App时,这些App都是在应用层的。在应用层下达的指令,最后会到操作系统。操作系统除了文件管理,进程管理等,还有一个内嵌的软件协议栈,协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络当中,数据在网络内部经过各种路由转发,最终将数据传送到了目标服务器。而目标服务器也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层,后再将数据以相同的方式返回,就形成了网络数据的传递。
既然双方要进行通信都要遵守协议栈,那么协议栈就是统一的。可能客户端和服务端使用的是不同种类的操作系统,但每个操作系统实现网络协议栈的方法以及各种细节是一样的。
网络协议栈是一种层状结构,其贯穿整个体系结构。
二.网络协议
2.1协议分层
分层的优点:每一层做不同的工作,层与层之间通过特定接口通信,网络协议栈设计成层状结构,其目的就是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性。
通过分层, 在网络协议栈中我们可以认为通信双方在相同的层之间进行通信,例如数据直接在双方应用层直接传输,在传输层直接传输的效果。
2.2OSI 7层
介绍:
OSI(Open System Interconnection,开放系统互联)七层网络模型称为开方式系统互联参考模型,是一个逻辑上的定义和规范。
OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
7层模型:
2.3TCP/IP五层(或四层)
OSI七层模型既复杂又不实用,后面改进后有了TCP/IP四层协议。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub,加强信号,让数据传的更远)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
二者的对应关系:
总结:
- 应用层解决的传输数据的目的,根据特定的通信目的,进行数据分析与处理,达到某种业务性的目的
- 传输层和网络层处理数据传输遇到的问题,保证数据的可靠性
- 数据链路层和物理层负责数据真正发送的过程,完成以太网和局域网的通信
- 下三成处理的是
通信细节
,应用层处理的是业务细节
三.网络传输基本流程
3.1局域网通信
当同局域网的两台主机进行通信时,数据要通过网络协议栈进行封装。
发送数据时,首先在应用层,数据向下交付,如:
文件数据先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据交给传输层。
传输层收到数据后,添加上传输层协议的报头信息,并将数据继续向下进行交付给网络层。
网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层。
链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕。
数据封装完毕后,就可以通过局域网将信息发送给另一台主机。当对端机器收到数据后,数据便从下往上交付,直至应用层,交付的过程中同样遵守网络协议栈,向上进行解包分用。
数据包装与分用:
不同协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
解释:
每一协议层的数据包 = 报头+有效载荷
数据的封装、解包、分用:
数据封装,实际就是不断给数据加上各种对应的报头,这些报头里面填充的就是对应的各种协议细节。
数据解包,将数据包中的报头和有效载荷分离。
数据分用:自底向上,确认自己的有效载荷交付给上层的协议
例如
数据封装:
数据分用:
3.2 跨网络通信
跨网络通信就是分别处于不同局域网的两台主机之间进行通信,两个不同局域网之间是通过路由器进行通信的。
路由器其实是通过IP地址来确定数据的转发方向的,因特网上的每台计算机都有一个唯一的IP地址,当路由器需要将一个局域网的数据转发到另一个局域网时,在路由器的链路层会先将数据的在当前局域网对应的底层报头去掉,然后将剩下的数据向上交付给网络层,此时在网络层就可以获取到该数据对应的目的IP地址,然后路由器就可以根据该IP地址在路由表当中进行查找,最终就能够确认该数据应该发送到哪一个局域网。
通过IP地址屏蔽了底层协议的差异,不需要关心底层使用的是哪种通信协议,只要有源IP地址和目的IP地址才可以将数据转发出去。
3.3IP地址与MAC地址
IP地址:
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 199.166.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
- IPv6用128个比特位来标识IP地址。
MAC地址:
MAC地址用来识别数据链路层中相连的节点。
长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)。
在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)。
区别:
后者用来识别同一链路中的不同计算机,前者用来识别计算机网路中互连的主机和路由器
MAC地址工作于局域网,局域网之间的互连一般通过现有的公用网或专用线路,需要进行网间协议转换。可以在Ethernet上传送IP信息,此时IP地址只是Ethernet信息包数据域的一部分,Ethernet交换机或处理器看不见IP地址,只是将其作为普通数据处理,网络上层软件才会处理IP地址。