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