网络通讯协议

一.OSI 7层模型

  由下至上为1至7层,分别为:

  应用层(Application layer)

  表示层(Presentation layer)

  会话层(Session layer)

  传输层(Transport layer)

  网络层(Network layer)

  数据链路层(Data link layer)

  物理层(Physical 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)。

  物理层,就是实实在在的物理链路,负责将数据以比特流的方式发送、接收。

 

二.网络协议

  IP(Internet Protocol 网际协议)连接两个节点。每个节点都由一个32位地址来标识。当发送消息时,IP协议从较高级的协议(TCP或UDP)接受消息,并添加包含有关目标主机信息的IP报头。

  TCP(传输控制协议),TCP要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开(passive open)的操作,以利用一个已知的端口号创建一个连接,这时,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(active open),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。客户应用程序可以将动态端口号作为本地的端口使用。服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN),随后,客户恢复一个ACK,这样就建立连接了。如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。

  UDP(用户数据报协议),UDP是一个速度很快的协议,因为它仅仅指定了数据传输所需要的最低机制,它的缺点,消息接收顺序不确定,第一个发送的消息可能最后一个被接到。消息可能丢失,也可能同时接收到2个相同的消息。在发送多播和广播时,我们通常不希望从每个节点都返回一个确认,这样将使服务器超负荷,并且网络负荷变大,所以在这个情况下使用UDP协议是很好的选择。

  ICMP(Internet控制消息协议)是一个控制协议,IP设备用来向其他的IP设备通知网络中的活动和错误。如果没有TCP协议,则IP 并不是一个可靠的协议,并且没有确认,没有数据的错误控制功能(只有一个报头校验和),也不能重新传输。ICMP消息在IP报头的内部发送,ICMP消息来发送的类型:响应和响应回复,目标不可达和重定向,超时。在用PING命令时会发送4个ICMP消息。

  IGMP(Internet组管理协议)是IP协议的一个扩充,必须由IP模块来实现。多播应用程序使用IGMP,利用IGMP消息发送对某个多播地址的一组成员请求,这样就能够注册某条多播消息,也可以使用IGMP取消成员的关系。

  FTP(File Transfer Protocol 文件传输协议)用于将文件复制到服务器,反之亦然。他还能列举服务器上的文件和目录。他是一个基于TCP的应用层协议,FTP命令封装在TCP消息的TCP数据块中。

  HTTP(Hypertext Transfer Protocol 超文本传输协议)HTTP是一个可靠的协议,这通过使用TCP来实现,HTTP具有:缓存、客户应用程序身份识别、支持各种MIME格式的不同附件等。

  HTTPS(SSL上的HTTP)如果需要与WEB服务器交换机密数据,则可以使用HTTPS,SSL(Secure Socket Layer 安全套接字层),SSL在TCP之上,他使用一个公钥/私钥原理来交换保密的对称密钥,用一个对称密钥来加密消息。想要支持HTTPS,WEB服务器必须安装一个证书,HTTPS默认端口是443。

  SMTP(Simple Mail Transfer Protocol 简单邮件传输协议)是一个用于发送和接受邮件消息的协议。SMTP不允许我们从邮件服务器读取消息,为此需要使用POP3或者IMAP协议。

  POP3(Post Office Protocol 邮局协议)是为断开环境设计的。利用POP3,客户可以访问服务器,并获取服务器为其所保留的消息。

  IMAP(Internet Message Access Protocol Internet消息访问协议)用来访问邮件服务器上的邮件,IMAP客户可以有脱机模式,这时可以在本地机器上对邮件进行操作。IMAP使客户能够对远程邮箱进行操作,就像是本地操作邮箱一样。

  NNTP(Network News Transfer Protocol 网络新闻传输协议)是一个用于提交,中继和获取消息的应用层协议,该协议提供了能够访问新闻服务器并且从中获取选定消息的客户应用程序,并且还支持服务器到服务器的消息传输。

  SNMP(Simple Network Management Protocol 简单网络管理协议)可以对网络上的设备进行管理。SNMP的目的在于利用性能问题和故障触发的警报来有效的管理设备,并且允许对设备进行配置。与网络设备相关联的SNMP代理将有一个MIB(Management Information Base 管理信息库)数据库,它将面向对象的方式包含了该设备的可管理信息。SNMP客户通过发送SNMP GET 请求来访问数据库中的信息,用SNMP SET 请求配置MIB数据库。

  Telnet协议,该协议使我们能够利用用户身份验证连接到一个远程系统,然后从一个控制台环境远程调用命令。

三.Socket

 SOCKET与TCP/IP 关系


Socket 是一种应用接口, TCP/IP 是网络传输协议,虽然接口相同, 但是不同的协议会有不同的服务性质。创建Socket 连接时,可以指定使用的传输层协议,Socket 可以支持不同的传输层协议(TCP 或UDP ),当使用TCP 协议进行连接时,该Socket 连接就是一个TCP 连接。Soket 跟TCP/IP 并没有必然的联系。Socket 编程接口在设计的时候,就希望也能适应其他的网络协议。所以,socket 的出现只是可以更方便的使用TCP/IP 协议栈而已。


SOCKET对 TCP/IP 的使用


Socket 其对TCP/IP 进行了抽象,形成了几个最基本的函数接口。比如create ,listen ,accept ,connect ,read 和write 等等。如果一个程序创建了一个socket ,并让其监听80 端口,其实是向TCP/IP 协议栈声明了其对80 端口的占有。以后,所有目标是80 端口的TCP 数据包都会转发给该程序(这里的程序,因为使用的是Socket 编程接口,所以首先由Socket 层来处理)。所谓accept 函数,其实抽象的是TCP 的连接建立过程。accept 函数返回的是socket 其实指代的是本次创建的连接,而一个连接是包括两部分信息的,一个是源IP 和源端口,另一个是宿IP 和宿端口。所以,accept 可以产生多个不同的socket ,而这些socket 里包含的宿IP 和宿端口是不变的,变化的只是源IP 和源端口。这样的话,这些socket 宿端口就可以都是80 ,而Socket 层还是能根据源/ 宿对来准确地分辨出IP 包和socket 的归属关系,从而完成对TCP/IP 协议的操作封装!


SOCKET与 HTTP 的关系


--一个是发动机(Socket),提供了网络通信的能力 

--一个是轿车(Http),提供了具体的方式


1)http 协议手机都支持,socket 不一定。


2)http 只能是一问一答(即以request/response 的方式连网收发信息), 而socket 可以双向通讯( 定位到某一URL 后, 就可以双方收发信息, 无需request/response) 。


3)Socket 可能会被防火墙屏蔽, 但http 可以穿越防火墙。


HTTP 是基于Socket 通信的子协议, Socket 收发信息自由, 协议都可由使用者定义。 HTTP 在Socket 基础上做了协议规范, 通信只能按照特定的格式去做, 用户可在HTTP 上做自己的子协议, 如网页浏览,webservice ,soap等


soap:是http post的一个专用版本,遵循一种特殊的xml消息格式 。


TCP/IP 4 层模型以及每层主要功能描述如下:


应用层(Application Layer)


TCP/IP 组中的应用层综合了 OSI 应用层、表示层以及会话层的功能。因此,在 TCP/IP 结构中,传输层以上的任何过程都称之为应用。在 TCP/IP 中,使用套接字(socket)和端口描述应用程序通信路径。大多数应用层协议与一个或多个端口号相关联。


传输层(Transport Layer)


TCP/IP 结构中包含两种传输层协议。其一传输控制协议(TCP),确保信息传输过程。其二用户数据报协议(UDP),直接传输数据报,而不需要提供端对端可靠校验。两种协议对应不同的应用具有各自功能。


网络层(Network Layer)


TCP/IP 网络层中的主要协议是网际协议(IP)。所有网络层以下或以上的各层通信在跨越 TCP/IP 协议栈时,都必须通过 IP 完成。此外,网络层还包含部分支持性协议,如 ICMP,实施和管理路由过程。


网络访问层(Network Access Layer)


在 TCP/IP 结构中,网络访问层由数据链路层和物理层合并而成。TCP/IP 网络访问层并没有重新定义新标准,而是有效利用原有数据链路层和物理层标准。很多 RFC 中描述了 IP 如何使用数据链路协议并作为其接口界面,如以太网、令牌环、FDDI、HSSI 和 ATM 等。物理层中规定了硬件通信属性,但它不直接作为网络层及以上层的 TCP/IP 协议的接口。

HTTP用的是端口为80的TCP Socket

telnet用的是端口为23的TCP Socket

HTTP是Socket的一种应用

与TCP(面向连接)对应的是UDP

SOCKET是TCP、UDP的实现方式,用SOCKET编程可以实现TCP、UDP的通信。

socket就像一个管子,连接两端。而tcp.udp就像管子中的东西。是液体还是气体。也就是传送的协议。 

SOCKET是API,而TCP/UPD是通信协议,两种根本不同的东西.语言表达的例子:

用SOCKET实现TCP(或者UDP)通信。 (相反,TCP或者UDP通信也可以不使用SOCKET实现)

猜你喜欢

转载自keshion.iteye.com/blog/1396390