【网络知识】协议篇

2016-11-14  本文已影响57人  24c41111e47b

用多了网络请求框架中的GET和POST等既有API,回头发现对网络的请求过程是怎么实现的,网络请求API又是怎么封装起来的完全懵逼状态,所以就到处查找资料,疯狂的学习,在这里将其中的核心知识点加以总结,方便以后查阅,也方便大家共享学习。


一个完整的网络,不仅要能高效率传输网络数据,还要具备好的网络体系结构和容错能力,这里我们不讨论网络的体系结构方面的知识,如果你对网络体系搭建感兴趣,请查阅思科的CCNA系列教程。

本文计划以HTTP的网络请求为例,从网络层来讲解一个网络请求是如何产生的,网络数据是以什么样的方式,怎样在网络中传输。基础篇中不涉及任何API的封装实现。

首先我们来回顾一下OSI七层网络模型TCP/IP四层网络参考模型,如下图所示,TCP/IP将OSI七层网络模型压缩成了四层,但是网络模型只是通信过程的参考,它并不是实际存在的。

OSI和TCP/IP模型.png

应用层负责产生数据,然后将数据提交给传输层,由传输层协议进行必要的传输控制操作(如:传输校验,数据段分割,编址端口号等),再交给网络IP层,由网络IP层对数据段进行包装(如:加入IP路由信息,进行路由寻址等),最后通过网络接口层进行数据输出来完成传送。

应用层

应用层位于整个网络模型的最上层,负责直接访问用于网络通信的底层进程,当我们使用应用程序产生了消息后,特定的应用层服务为我们定义了网络通信接口,特定的协议为我们提供了数据处理的规则和格式,进一步将数据传入到下一层操作。

以HTTP协议为例,客户端使用应用程序(浏览器)操作以后,同时用到的服务和协议包含但不限于:

经过各种服务和协议调用以后,即产生了一个二进制流的通信数据对象,进入下一层协议。

如果是数据接收过程,则是相反的过程,调用各种数据解析服务和协议。

传输层

传输层位于应用层之下,为应用层提供可靠的数据传输,存在于终端用户之间。在给定的链路上通过流量控、分段/重组和差错控制来保证数据传输的可靠性。也就是说传输层可以跟踪分段数据传输,并且重传那些传送失败的分段。

传输层的主要功能:

综上所述,传输层主要功能就是管理主机会话(分段数据)过程中的传输数据,但是由于不同的应用程序对数据的传送有不同的要求,所以开发了不同的传输层协议来满足这些要求。最长见的就是我们的TCP协议和UDP协议:

TCP协议

TCP是网络层协议,能确保数据可靠传输,可以跟踪已发送数据;确认已发送数据;重新传送已发送数据。实现方式是将收发主机之间的控制数据放入到分段数据报头中进行交换,而不是直接交换控制数据,这样避免了交换控制数据所造成的流量占用。

根据RFC 793文档,TCP是一种面向连接的协议,为了实现额外的功能,会有额外的开销,TCP描述的其他功能包括原序处理、可靠传输和流量控制。每个TCP数据段在切割封装数据段的报头中都有一个20字节的开销,而每个UDP数据段只需要8字节的开销。TCP的数据片段称为分段,UDP的片段数据称为数据报。使用TCP协议的应用有:

TCP数据报格式.png

如图所示,是TCP的报头信息:

TCP标准实施流程:主机传输数据段->并将数据段的副本列入重新发送队列->然后启动计时器->当接收到数据确认信息时,主机将从队列中删除对应数据段;如果计时器超时还没有收到确认信息,将重新传输数据段。

UDP协议

根据RFC 768文档,UDP是一种简单的无连接协议。该协议不关心数据是否可靠传输(成功传输),所以它可以提供低开销的数据传输。使用UDP协议的应用一般需要快速传输,不关心是否传送成功,如:

�UDP数据报格式.png

UDP不对数据排序,按照先来后到的顺序排列,所以如果对数据的顺序有要求,那么需要应用程序自己标识数据的顺序;

网络IP层

传输层将数据段交给IP层,IP层负责封装IP报头并路由数据包,下面时IP报头格式:

IP报头.png

如果省略掉传输层,使用IP层直接传输数据也是可以的,只不过这种传输类似于UDP,是不可靠的,其实有某些协议就是基于IP层直接传输的,有兴趣的可以自己研究!

网络接口层

这里涉及的内容较多且比较低层,不做讲解,但是有一个比较重要的概念,以太网帧,平时需要了解,具体请查阅CCNA的课程【】!

完整的TCP/IP报文头.png

参考:
CCNA网络基础
TCP/IP网络四层模型

上一篇 下一篇

猜你喜欢

热点阅读