1、先来一个讲TCP、UDP和HTTP关系的程序员
一、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。编程
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。设计模式
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。浏览器
所以,HTTP自己就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。安全
二、HTTP协议是创建在请求/响应模型上的。服务器
首先由客户创建一条与服务器的TCP连接,并发送一个请求到服务器,网络
请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。并发
服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。socket
HTTP/1.0为每一次HTTP的请求/响应创建一条新的TCP连接,tcp
所以一个包含HTML内容和图片的页面将须要创建屡次的短时间的TCP连接。
一次TCP连接的创建将须要3次握手。
另外,为了得到适当的传输速度,则须要TCP花费额外的回路连接时间(RTT)。
每一次连接的创建须要这种常常性的开销,而其并不带有实际有用的数据,只是保证连接的可靠性,所以HTTP/1.1提出了可持续连接的实现方法。
HTTP/1.1将只创建一次TCP的连接而重复地使用它传输一系列的请求/响应消息,所以减小了连接创建的次数和常常性的连接开销。
三、结论:
虽然HTTP自己是一个协议,但其最终仍是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。
Socket是什么呢?Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。在设计模式中,
Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,
对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议。
HTTP、TCP、UDP、Socket <wbr> <wbr> <wbr>(转)
2、TCP、UDP、HTTP、SOCKET之间的区别
TCP和UDP:传输层协议;
HTTP:应用层协议;
SOCKET:TCP/IP网络的API。
TCP/IP表明传输控制协议/网际协议,指的是一系列协议。
TCP和UDP使用IP协议从一个网络传送数据包到另外一个网络。把IP想像成一种高速公路,它容许其它协议在上面行驶并找到到其它电脑的出口。
TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
TCP和UDP是FTP、HTTP和SMTP之类使用的传输层协议。
虽然TCP和UDP都是用来传输其余协议的,它们却有一个显著的不一样:TCP提供有保证的数据传输,而UDP不提供。
这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另外一个端点,而UDP不提供任何这样的保证。
HTTP(超文本传输协议)是利用TCP在两台电脑(一般是Web服务器和客户端)之间传输信息的协议。
客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
记住,须要IP协议来链接网络;TCP是一种容许咱们安全传输数据的机制,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。
Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。
3、socket、tcp、udp、http 的认识及区别
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
IP 协议对应于网络层,TCP协议对应于传输层,HTTP协议对应于应用层,三者从本质上来讲没有可比性,socket则是对TCP/IP协议的封装和应用。
能够说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据
socket是对TCP/IP协议的封装,Socket自己并非协议,而是一个调用接口(API),
经过Socket,咱们才能使用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就但愿也能适应其余的网络协议。
因此说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,
从而造成了咱们知道的一些最基本的函数接口,好比create、 listen、connect、accept、send、read和write等等
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,
而Socket自己不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口
TCP链接的三次握手:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程当中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
断开链接时服务器和客户端都可以主动发起断开TCP链接的请求,断开过程须要通过“四次握手”
TCP是面向连接的,虽说网络的不安全不稳定特性决定了多少次握手都不能保证链接的可靠性,
但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了链接的可靠性;
而UDP不是面向链接的,UDP传送数据前并不与对方创建链接,对接收到的数据也不发送确认信号,
发送端不知道数据是否会正确接收,固然也不用重发,因此说UDP是无链接的、不可靠的一种数据传输协议
也正因为上面的特色,使得UDP的开销更小数据传输速率更高,由于没必要进行收发数据的确认,因此UDP的实时性更好。
因此采用TCP传输协议的MSN比采用UDP的QQ传输文件慢,但并不能说QQ的通讯是不安全的,由于程序员能够手动对UDP的数据收发进行验证,好比发送方对每一个数据包进行编号而后由接收方进行验证啊什么的,即便是这样,UDP由于在底层协议的封装上没有采用相似 TCP的“三次握手”而实现了TCP所没法达到的传输效率。