HTTP详解(三):HTTP、TCP的联系与区别

HTTP详解(三):HTTP、TCP的联系与区别


HTTP与TCP的联系与区别

上篇文章主要讲述了HTTP报文格式,在上上篇文章中我们多次提到了TCP/IP协议,那么HTTP与TCP/IP到底有什么联系与区别呢。今天我们着重的讲一下。

我个人觉得,HTTP与TCP的联系与区别,主要是围绕着两句话铺开的。
第一句话:TCP/IP 协议是传输层协议,主要解决数据在网路中如何传输的问题。
第二句话:HTTP 协议是应用层协议,主要解决如何包装数据,是基于TCP连接的。
所到这里,就不到不说计算机网络中吊炸天的TCP/IP 模型。


TCP三次握手:
简单的来说,TCP就是建立连接,对于它来说并不关心咱们传输什么样的数据,就是进行数据的传输,保证数据传输的可靠性。
HTTP是基于TCP的一种协议,它用来封装数据,咱们要传输什么样的数据都是操作HTTP,就是实际应用上来的。
上一篇中简单的说了一下http连接的建立,今天我们讲一下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状态,完成三次握手。
前面两次握手的意义比较容易理解,但是纳闷的是为什么第三次握手,为什么客户端收到服务器端SYN+ACK包之后,为什么还要向服务器端发送确认包ACK包。
原因是这样的:我们假设一种异常情况,客户端发送了第一个连接请求报文段并没有丢失,而是在某个节点处长时间的滞留了,等到连接释放之后的某一个时间才到达服务器端。本来呢这段报文就是早已经失效的的报文,但是服务器端收到这段报文之后呢,就认为客户端又发起了一次连接请求。于是服务器端就向客户端发送了确认报文,同意和客户端进行连接。如果没有三次握手,只有前面两次握手的话,新的连接就已经建立了。
由于客户端压根就没有发出新的连接建立的请求,所以就不理会服务器端发送来的SYN+ACK包,也不会想服务器端发送确认。但是服务器端却以为与客户端的连接已经建立了,在傻傻的等待这客户端发送数据。这样很多服务器端的资源就白白的浪费了。
但是采用三次握手协议的话,就会避免上面那种情况的发生。总的来说,第三次握手主要是防止已经失效的连接请求又传送到服务器端造成错误。

说到这里,相信大家都听过一个名词,叫做“socket连接”,那么SOCKET与TCP和HTTP 有什么关系呢。咱们一并聊一聊它。
SOCKET:
SOCKET英文原意叫做“孔”或者“插座”,在技术方面通常称为“套接字”。
说到套接字,总结来说就是:套接字作为应用程序和运输层之间的接口,是通信的基石,是网络通信的基本操作单元。它是网络通信过程中短点的抽象表示,包含了进行网络通信的必须的五中信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

SOCKET连接:
建立SOCKET连接,至少需要一对套接字。一个运行在客户端,叫做ClientSocket,一个运行在服务端,叫做SercerSocket.
SOCKET连接的建立主要分为三步:服务器端监听,客户端请求,连接确认。
SOCKET连接与TCP连接的区别与联系:
就一句话:SOCKET是一个针对TCP和UDP编程的一种接口API,它并不是一种协议,只是帮助我们建立TCP连接的,是对TCP/IP协议的一种封装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值