TCP/IP、UDP、HTTP、SPDY等的一些解释说明
文章大部分内容均是来自于网络和相关的官方文档,仅作整理和总结。
在理解这些名词以及他们之间的关系之前,有必要先理解下OSI模型。OSI七层模型详解
简单的用下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:
7 | 应用层 | 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP |
6 | 表示层 | 例如XDR、ASN.1、SMB、AFP、NCP |
5 | 会话层 | 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets |
4 | 传输层 | 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL |
3 | 网络层 | 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25 |
2 | 数据链路层 | 例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP |
1 | 物理层 | 例如线路、无线电、光纤、信鸽 |
1.TCP/IP
但是一般我们说到TCP/IP说的都是基于上面OSI参考模型的一个四层参考模型的协议。OSI七层模型详解 这里有比较详细的讲解。
我们只看下面这张图来辅助理解。
2.TCP 和 UDP (IP)
首先,TCP/IP 和UDP最大的区别就是:TCP/IP是面向连接的,UDP是非面向连接的。通俗一点说就是:TCP/IP管发管到,UDP管发不管到。因此,在安全性方面来说,TCP/IP更具有优越性。
第二:TCP/IP偏重的是点对点的通信,使用时服务器和客户端的区别显而易见,而UDP则可以使用组播实现一对多,通信时更像一个群聊系统,几乎没有客户端和服务器的区别,在时间和空间上具有更高的节约性。使用组播时,确定一个D类地址作为组的地址,将本机加入组中,向组内发送消息,从组中接收消息。
第三:在具体编写的代码结构上,TCP/IP是通过创建Socket对象进行连接,从连接对象上得到输入输出流,在流中读写从而通信。而UDP则是在本机创建DatagramSocket对象,将数据包装成DatagramPacket包来发送,其中包里有要发送到的地址。TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。
一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
IP协议的基本功能是提供数据传输、数据包编止、数据包路由,分段等。通过ip编止约定,可以成功的将数据通过路由传输到正确的网络或者子网。
面向连接的tcp,是基于连接的协议,也就是说在正式收发数据前,必须和对方建立可靠的连接,该协议能提供可靠的数据传输,保证数据准确无误的到达目的地。
面向非连接的udp协议,他不对对方建立连接,而是直接把数据包发过去!该协议不能保证数据准确无误的到达。
udp适合用于一次只传少量数据,对可靠要求不高的应用环境,比如,我们经常用“ping”来测试两台主机通信是否正常,其实该命令就是向对方发送udp数据包,然后对方主机确认收到数据包,如果数据包到达的信息及时返回的话,就说明网络是通的。
QQ就是udp发信息的,因此有时会出现收不到信息的时候
此外,
udp程序结构比较简单,tcp对系统资源的要求比udp多
udp和tcp协议是传输层的协议,而ip协议是网络层的协议
tcp的连接需要三次握手过程,断开需要4次
此部分来源: <http://blog.csdn.net/lwnylslwnyls/article/details/8167058>
3.HTTP 和 TCP UDP
HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
HTTP需要详细了解的话,可以参考这里:
http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
你应该能理解,TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。
虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。
此部分来源: <http://www.cnblogs.com/renyuan/archive/2013/01/19/2867720.html>
4.SPDY 和 OKHttp
SPDY:
在说明OKHttp前非常有必要了解下SPDY到底是什么东西:
1.概述:
更加详细的说明可见 http://blog.csdn.net/marcky/article/details/7728662
下面做简单的说明。
As part of the "Let's make the web faster" initiative, we are experimenting with alternative protocols to help reduce the latency of web pages. One of these experiments is SPDY (pronounced "SPeeDY"), an application-layer protocol for transporting content over the web, designed specifically for minimal latency. In addition to a specification of the protocol, we have developed a SPDY-enabled Google Chrome browser and open-source web server. In lab tests, we have compared the performance of these applications over HTTP and SPDY, and have observed up to 64% reductions in page load times in SPDY. We hope to engage the open source community to contribute ideas, feedback, code, and test results, to make SPDY the next-generation application protocol for a faster web. 这段话,是google发布的白皮书里的说明。
地址:http://www.chromium.org/spdy/spdy-whitepaper
简单的来说,
SPDY 是 Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,开发组正在推动 SPDY 成为下一代的应用协议标准(现为互联网草案)。
SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。(SPDY 是 Speedy 的昵音,意思是更快)
2.与HTTP的关系
更加详细的说明可见:http://www.williamlong.info/archives/3119.html
SPDY并不用于取代HTTP,它只是修改了HTTP的请求与应答在网络上传输的方式;这意味着只需增加一个SPDY传输层,现有的所有服务端应用均不用做任何修改。
当使用SPDY的方式传输,HTTP请求会被处理、标记简化和压缩。比如,每一个SPDY端点会持续跟踪每一个在之前的请求中已经发送的HTTP报文头部,从而避免重复发送还未改变的头部。而还未发送的报文的数据部分将在被压缩后被发送。
3.原理 (翻译自Google文档)
在SSL层上增加一个SPDY会话层,以在一个TCP连接中实现并发流。
通常的HTTP GET和POST格式仍然是一样的;然而SPDY为编码和传输数据设计了一个新的帧格式。
流是双向的,可以在客户端和服务器端启动。
SPDY旨在通过基本(始终启用)和高级(可选启用)功能实现更低的延迟
OKHttp:
一句话:
An HTTP & SPDY client for Android and Java applications。
具体使用或者Demo可以见 :http://square.github.io/okhttp/ https://github.com/square/okhttp
5.FTP简单解释
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。
同时,它也是一个应用程序(Application)。
用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。
声明:
1.由于互联网数据的分享性,如果我发表的文章,来源于您的原创文章,且我没有注明,请邮件macouen@gmail.com说明。
2.欢迎转载,但请注明文章原始出处。
作者:Oak
出处:http://www.cnblogs.com/oakMac/