大二时候专业开设的计算机网络课程到现在基本记忆模糊了!在此梳理一下网络方面的知识,主要整理七层模型和通信协议。
我们在开发网络应用时必定涉及到数据传输,在我们程序员这个层面上理解是酱紫的:客户端请求服务器上传或下载数据,无论是使用Http协议传输还是Socket来实现,这个过程我们都很熟悉,那么从客户端请求到服务器端响应的过程是怎样的呢,客户端是如何准确的与服务器进行连接、反馈的呢?我们先摆出耳熟能详的OSI七层协议,然后解释为什么会搞出个七层协议以及各个层次的作用,最后站在我们程序员角度来理解在开发过程中常用的通信方式。
Long long ago...在Intert还未形成之前世界各地有很多局域网,在各自的局域网内数据的传输格式、传输规则都是各自定义的,如果多个局域网想要实现交流通信那就 呵呵 了。。就像世界各国人言语不通怎么交流呢。so,ISO这么个组织就出现了,然后就开始了OSI(即Open System Interconnection开放式系统互联参考模型)的组建工作。这个OSI为开放式互连信息系统提供了一种功能结构的框架。为全世界的信息互联提供一个结构框架,都基于这个框架规则来就有共同的规则,既然共同的语言了,大家可以愉快玩耍了,多和谐。要想实现信息互联其复杂程度可想而知,将一个复杂的问题分层解决是一件很明智的事情,因此OSI在逻辑上的七层如下:
7 应用层
6 表示层
5 会话层
4 传输层
3 网络层
2 数据链路层
1 物理层
其中上面四层定义了应用程序的功能,下面三层主要是面向通过网络的端口到端口的数据流。前四层是面向应用程序功能开发的,下面三层已经为我们实现好了数据的传输功能。当然我们也可以直接在传输层面上实现端到端的数据传输,这就是我们经常使用的Socket通信了。Socket通信就是基于传输层和网络层的(准确的说Socket是基于TCP/IP
协议的)。
什么是端口?
计算机端口可以说是计算机与外界通讯交流的出口,前提是装有应用程序~,本文中的端口均是指逻辑意义上的端口,也就是TCP/IP协议的端口,TCP协议是在传输层,而我们知道,传输层是端到端的传输数据的。因此只要是互联网应用程序都具备一个端口,这个端口就是通信的基础。
对七层模型的解释:
(1)应用层:
这一层对应应用程序的通信服务,如果我们开发的应用程序不需要联网通信,那么就不用了解这七层模型了,这七层对我们就是透明了。如果我们开发的程序需要连网通信,那么就需要遵循实现应用层的协议了,全世界的应用程序都需要实现这个协议,如此互联可行。
(2) 表示层:
顾名思义就是对数据的一种表示,主要是定义数据的格式以及加密等,这一层有一个FTP文件传输协议。
(3) 会话层:
这一层主要是为会话的实体应用程序建立会话。比如客户端请求服务器这是需要建立会话的,而建立会话首先就要
将会话地址映射为运输地址,然后确定会话质量、识别会话连接、释放连接等。这些操作都在这个会话层完成。
(4) 传输层:
是OSI中最重要,最关键的一层,是唯一负责总体的数据传输和数据控制的一层,传输层提供端口到端口的交换数据的机制。传输层对会话层等高三层提供可靠的传输服务,对网络层而言,传输层提供了可靠的目的地站点信息。
世界上各个通信子网在性能上存在着很大差异的,而对于会话层来说却要求有一个性能恒定的接口,传输层就是承担着一功能,它采用分流/合流,复用/解复用技术来调节通信子网的差异,使会话层感受不到这种差异的存在,此外传输层还具备差错恢复、流量控制等功能,从而保证了对会话层屏蔽通信子网在这些方面的细节差异。传输层面对的数据已经不是网络地址和主机地址,二十和会话层的界面端口。
传输层既是OSI层模型中负责数据通信的最高层,又是面向网络通信的低三层盒面向信息处理的高三层之间的中间层。该层弥补高层所要求的服务和网络层所提供的服务之间的差距,并且向高层屏蔽了通信子网的细节。使高层看到的只是在两个传世实体间的一条端到端的可由用户控制盒设定的数据通路。
传输层提供两种服务:
(1)传输连接服务
通常,对会话层要求的每个传输连接,传输层都要在网络层建立相应的连接。连接所遵从的协议就是我们熟知的TCP协议,这种传输连接服务我们常称之为TCP连接。
(2)数据传输服务
这个服务主要是强调面向连接的可靠服务,并提供流量控制、差错控制盒序列控制,以实现两个终端系统间传输的无差错、无丢失、无重复等。
传输层和网络层的最大区别在于:网络层只是更具网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠的传送到相应的应用程序的端口。
(5) 网络层
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。简单来说网络层就是:路径选择、路由、逻辑寻址。
这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。
这一层有一个很重要的IP协议,IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之间传送一种称之为数据报的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求通常联网设备都会实现IP协议。
(6) 物理链路层
它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。
(7) 物理层
为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。
关于TCP协议三次握手
TCP在传输层,在建立端点连接时会有“三次握手”建立连接:
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。即A主机发送请求给B。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。B主机收到A请求返回一个位码给A。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。A收到B的位码验证后就连接上并传送数据了。
TCP和UDP的区别
1、TCP是面向链接的,面向连接即保证了连接的可靠性,因此TCP会有三次握手来保证连接的可靠性。虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
2、也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
Http协议
Http协议是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。可以参考这哥们的博客:http://blog.csdn.net/gueter/article/details/1524447