TCP/IP、Http、Socket的区别

来源:互联网 发布:圆形进度条怎么做 js 编辑:程序博客网 时间:2024/04/29 02:20
网络由下往上分为 
物理层,数据链路层,网络层,传输层,回话层,表示层和应用层 
用过初步的了解,我知道ip协议对应于网络层,tcp协议对应于传输层,而http协议对应与应用层。 
三者从本质上没有可比性。 
socket则是对于/ip协议的封装和应用(程序员层面上) 
也可以说,tcp/ip协议是传输层协议,主要解决数据如何在网络中传输。 
而http是应用层协议,主要解决如何包装数据。 
关于tcp/ip和http协议的关系,网咯有一段比较容易理解的介绍。 
“我们在传输数据时,可以只使用传输层tcp/ip协议,但是那样的话,如果没有应用层,则无法识别数据内容”。 
如果想要使传输的数据有意义,则必须要使用应用层协议。 
应用层的协议比较多,有http,efp,telnet,也可以子集定义应用层协议。 
web使用http协议作为应用层协议,以封装http文本信息,然后使用tcp/ip做传输层协议将它发送到网络上。 
而我们平时说的最多的scoket是什么呢,实际上socket是对tcp/ip协议的封装,scoket本身不是协议,而是一个动用接口api. 
通过scoket,我们才能使用tcp/ip协议。 
实际上。scoket跟tcp/ip协议没有必然的联系。 
scoket编程接口在设计的时候,就希望也能适应其他的网络协议。 
所以说。scoket的出现指示使得程序员更加方便的使用tcp/ip协议栈而已。是对tcp/ip协议的抽象。 
从而形成了我们知道的一些基本的函数接口,比如create,listen,accept,send,read和wirte等等。 
网络有一段关于scoket和/ip的说法比较容易理解。 
“tcp/ip只是一个协议栈,就像操作系统的运行机制,必须要具体实现,同时还需要提供对外的操作接口。” 
这就像操作系统会提供标准的编程接口,比如win32编程接口一样, 
tcp/ip也要提供可供程序员做网络开发所用的接口,这也就是scoket编程接口。 
关于tcp/ip协议的相关只是,用博大精深来讲我想也不为过,单单查一下网上关于此类知识的资料和书籍文献的数量就知道了。 
csdn上有个比较形象的描述,http是轿车,提供了封装或者显示数据的具体形式;sockt是发动机,提供了网络通信的能力。 
实际上传输层的tcp是基于网络层的ip协议,而应用层的http的协议又是基于传输层的tcp接口的,而socket本身不算是协议,就像上面所说的那样,他只是提供了一个针对tcp/ip或者udp编程的接口。 
下面是一些经常在笔试或者面试中碰到的重要概念: 
一:什么是tcp连接的三次握手 
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYS_SEND状态,等待服务器确认。 
第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即SYN+ACK包,此时服务器进入SYS_RECV状态。 
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1);此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成3次握手。 
握手过程中传送的包不包含数据,三次握手完毕后,客户端和服务器才正式开始传送数据。 
理想状态下,tcp连接一旦建立,在通信的双方中的任何一方主动关闭连接之前,tcp连接都将一直保存下去。 
端口连接时服务器和客户端均可以主动发起断开tcp连接的请求,断开过程需要经过“四次握手“。 
二:利用socket建立网络连接的步骤 
建立socket连接至少需要一对套接字,其中一个运行与客户端,称为clientsocket,另外一个运行与服务器端,称为serversocket。 
套接字直接的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。 
1:服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。 
2:客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。 
为此,客户端的套接字必须首先描述他要连接的服务器的套接字,指出服务器端的套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 
3:连接确认:当服务器端套接字监听到或者说接到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。 
而服务器端套接字继续处于监听状态,继续接受其他客户端套接字的请求。 
三:http连接的特点 
http协议即超文本传输协议(hypertext transfer protocol)是web连网的基础,也是手机连网的常用协议之一,http协议是建立在tcp协议之上的一种应用。 
http连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接,从而建立连接到关闭连接过程的一次连接。 
四:tcp和udp的区别(重点,出现频率过多) 
1:tcp是面向连接的,虽然网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但tcp的三次握手在最低限度上保证了连接的可靠性。 
   udp不是面向连接的,udp传输数据并不与对方建立连接,对收到的数据也不发送确认信号,发送端不知道数据是否会正确接受,当然也不用重发,所以说udp是无连接的不可靠的一种数据传输协议。 
2:由于1所说的特点使得udp的开销更小数据传输的效率更高,因为不必进行收发数据的确认,所以udp的实时性更好。 
知道了tcp和udp的区别就不难理解为何采用tcp协议的MSN比采用udp协议的qq传输文件慢了,但并不能说qq的通信是安全的, 
因为程序员可以手动对udp的数据收发进行验证,比如发送方对每个数据报进行编码然后由接收方进行验证。 
即使这样udp因为在底层协议上没有使用类似tcp的三次握手,而实现了tcp所无法达到的传输效率。 
0 0
原创粉丝点击