计算机网络理论把这整个过程定义成一个分层服务体系。在国际标准组织(ISO)的著名标准开放式系统互联参考模型(OSI)里,这个复杂的体系依次有应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,称为ISO七层模型。ISO七层模型如下图:
在数据的实际传输中,发送方将数据送到自己的应用层,加上该层的控制信息后传给表示层;表示层也将数据加上自己的标识传给会话层;以此类推,每一层都在收到的数据上加上本层的控制信息并传给下一层;最后到达物理层时,数据通过实际的物理媒体传到接收方。接收端则执行与发送端相反的操作,由下往上,将逐层标识去掉,重新还原成最初的数据。由此可见,数据通讯双方在对等层必须采用相同的协议,定义同一种数据标识格式,这样才可能保证数据的正确传输。
实际使用的协议是否严格按照这七层来定义呢?
并非如此,OSI七层模型是一个理论模型,实际应用则千变万化,因此更多把它作为分析、评判各种网络技术的依据;对大多数应用来说,只将它的协议族(即协议堆栈)与七层模型作大致的对应,看看实际用到的特定协议是属于七层中某个子层,还是包括了上下多层的功能.
第一篇,先说最基础的东西,就是OSI七层模型。
最初,各个厂商的设备,系统,各有各的一套,彼此之间很难互相通信,要建立一个网络,就只能选一家厂商的设备,比如说全IBM的,或全DECnet的,用一种系统,那时UNIX大行其道。后来用Windows的网络也慢慢多了起来,基于将不同网络互连的迫切要求,国际标准化组织ISO于上世纪70年代发布了OSI七层网路模型,以规范化网络设计。那为什么要分层呢?是因为出于将数据处理分步的考虑。总结来说,OSI网七层络模型的用处如下:
1.使不同厂商在开发设备的时候有个公共的标准,让不同厂商开发出来的设备能够互相通信。
2.使不同系统之间能够互相通信,如UNIX、Winsows和Mac。
3.分层使数据处理分步,互相之间不造成影响。
OSI七层网络模型由下至上为1至7层,分别为物理层(Physical layer),数据链路层(Data link layer),网络层(Network layer),传输层(Transport layer),会话层(Session layer),表示层(Presentation layer),应用层(Application layer)。其中上三层称之为高层,定义应用程序之间的通信和人机界面。什么意思呢,就是上三层负责把电脑能看懂的东西转化为你能看懂的东西,或把你能看懂的东西转化为电脑能看懂的东西。下四层称之为底层,定义的是数据如何端到端的传输(end-to-end),物理规范以及数据与光电信号间的转换。先面一层一层的来说明。从上层说起。
应用层,很简单,就是应用程序。这一层负责确定通信对象,并确保由足够的资源用于通信,这些当然都是想要通信的应用程序干的事情。
表示层,负责数据的编码、转化,确保应用层的正常工作。这一层,是将我们看到的界面与二进制间互相转化的地方,就是我们的语言与机器语言间的转化。数据的压缩、解压,加密、解密都发生在这一层。这一层根据不同的应用目的将数据处理为不同的格式,表现出来就是我们看到的各种各样的文件扩展名。
会话层,负责建立、维护、控制会话,区分不同的会话,以及提供单工(Simplex)、半双工(Half duplex)、全双工(Full duplex)三种通信模式的服务。我们平时所知的NFS,RPC,X Windows等都工作在这一层。
传输层,负责分割、组合数据,实现端到端的逻辑连接。数据在上三层是整体的,到了这一层开始被分割,这一层分割后的数据被称为段(Segment)。三次握手(Three-way handshake),面向连接(Connection-Oriented)或非面向连接(Connectionless-Oriented)的服务,流控(Flow control)等都发生在这一层。
网络层,负责管理网络地址,定位设备,决定路由。我们所熟知的IP地址和路由器就是工作在这一层。上层的数据段在这一层被分割,封装后叫做包(Packet),包有两种,一种叫做用户数据包(Data packets),是上层传下来的用户数据;另一种叫路由更新包(Route update packets),是直接由路由器发出来的,用来和其他路由器进行路由信息的交换。
数据链路层,负责准备物理传输,CRC校验,错误通知,网络拓扑,流控等。我们所熟知的MAC地址和交换机都工作在这一层。上层传下来的包在这一层被分割封装后叫做帧(Frame)。
物理层,就是实实在在的物理链路,负责将数据以比特流的方式发送,接收,就不多说了。
TCP/IP四层协议 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 网络接口层
TCP/IP的多数应用协议将OSI应用层、表示层、会话层的功能合在一起,组成应用层,典型协议有:HTTP、FTP、TELNET等;TCP/UDP协议对应OSI的传输层,提供上层数据传输保障;IP协议对应OSI的网络层;TCP/IP的最底层功能由网络接口层实现,相当于OSI的物理层和数据链路层,TCP/IP应用已有的底层网络实现传输,对该层并未作严格定义。
浅谈TCP/IP
TCP/IP由上至下分为应用层(Application layer),传输层(Transport layer)——其实应称为:主机对主机传输层(Host-Host Transport layer),网际层(Internet layer),网络存取层(Network Access layer)——其实就是我们说的物理层。
1 Network Access layer
有关物理层的东西都是一些专家级的东西,有兴趣的可以参看
RFC826 地址解析协议(Address Resolution Protocal ARP)
rfc 894 以太网的IP数据报传送标准。
2 Internet layer
主要功能:
a 定义数据报,它是Internet中的基本传送单位
b 定义Internet的寻址方式
c 在Network Access layer和Host-Host Transport layer间移动数据
d 决定数据报到远程主机的路由
e 执行数据报的分解(fragmenting)及重组
这层中最重要的是ICMP(Internet Control Message Protocal
网际控制报文协议).有关RFC792定义可以看。
3 Host-Host Transport layer
这层中我只想说一点,这也是方便大家看扫描原理的理解.
在说之前先说一个定义:握手:在数据传输之前,两端点间交换控制信息以建立连接的过程叫"握手",在扫描器原理中大家一定常看到关于TCP的扫描原理,这其中有一个"三次握手"的说法.个人认为实在不妥.为什么?请看握手的定义.看了这么多人的文章,只有雾中鸟前辈的说法较准确.个人认为叫"三段式握手"更好.现在来详细说一下这个过程.首先,发起方A主机给B主机一个数据段,其中设置了同步序号(Synchronize
sequence number
SYN)位.这个数据段告诉B主机,A希望建立连接以及A将使用的数据段起始序号.B主机用设置了ACK(ackonwledement)以及SYN位的数据段回应A.B的数据段向A确认,收到A的数据段.同时也告诉A,B将使用的起始序号.最后A再传送一个数据段给B,通知收到数据段.到此完成整个"三段式握手".从这以后才开始数据的传输.在数据传输完毕以后再来一次"三段式握手"来结束连接.
在传输层里除了TCP还有一个重要的协议是UDP.这个协议相信大家对他最熟悉的是提供"不可靠的连接"那么这个不可靠连接是指什么能?它只是指不提供验证数据正确到达网络彼端的技术.UDP利用报文头中的第一字中的"源端口"(source
port)和"矢端口"(destination port)号码,将数据传输给正确的应用程序。
传输层就简单的说这么多。
4 Application layer
这个是大家常用的东东,网上很多有关TCP/IP的教材说的也够清楚了.这里就简短的说一下.这层主要包括:telnet
FTP,SMTP,HTTP,DNS(Domain Name Service域名服务协议),OSPF(Open Short
Path First 开放式最短路由优先协议),NTS这些协议。
最后补充一些TCP/IP对不同层次使用的数据的不同名称.方便以后大家在看文章的时候理解使用的是何种协议.使用TCP的应用程序称数据为"流"(stream),使用UDP的应用程序称数据为"报文"(message).TCP把数据叫做"数据段"(segment),UDP称它的数据结构为"分组包"(packet).网际层将所有的数据视为区块.
称为"数据报"(datagram),低层网络传送的数据一般称为"分组包"或"帧"(frame)。