http是基于tcp协议的高层协议。
tcp建立连接首先在标志位进行标示,以表示请求的类型,FLAGS标志如下:
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...0 .... = Acknowledgment: Not Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
标志解释:
SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
RST:复位标志
复位标志有效。用于复位相应的TCP连接。
URG:紧急标志
紧急(The urgent pointer) 标志有效。紧急标志置位,
PSH:推标志
该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
ECE: 显示拥塞提醒回应
CWR: 拥塞窗口减少
FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。
它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
一个tcp连接的建立需要进行三次握手:
发送端发送一个SYN=1,ACK=0标志位数据包给接收端,请求进行连接,这是第一次握手;
接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;
最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。
tcp断开连接要进行四次握手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
下边是用tcpdump抓到的包。帮助理解
分享到:
相关推荐
"计算机网络实验5 - TCP数据包及连接建立过程分析" 本实验报告的主要目的是学习并分析TCP数据包的结构、含义,并研究TCP连接的建立过程和数据传输过程。实验使用Wireshark网络分析软件和实验文件“计算机网络实验....
其连接建立与断开过程是保证可靠通信的关键步骤。在TCP/IP中,TCP协议通过三次握手建立连接,四次挥手来断开连接。 首先,我们来看TCP连接的建立,这个过程被称为三次握手: 1. **第一次握手**:客户端想要与...
Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大。但是如果我们直接使用已经建立好的http连接,这样花费就比较小,吞吐率更大。 传统的HttpURLConnection并不支持连接池,如果要实现连接池...
在HTTP连接中使用Socket,我们可以更底层地控制HTTP请求和响应的过程,比如实现自定义的HTTP客户端或服务器。 首先,理解HTTP连接的基本流程是必要的。HTTP连接通常包含以下几个步骤:建立TCP连接、发送HTTP请求、...
【标题】:“聊天室(自己实现HTTP长连接)” 【描述】:这篇博客的文章链接指向了ITEYE上的一篇由作者“renxin-327666062-qq-com”分享的关于实现HTTP长连接的聊天室项目。在实际的网络应用中,HTTP长连接是解决实时...
本教程将深入讲解如何在Java中创建HTTP连接,实现从客户端发送请求到服务器并接收响应的过程。 首先,我们需要引入Java的HTTP库,这通常通过`java.net.URL`和`java.net.HttpURLConnection`类来实现。`URL`类用于...
然而,传统的HTTP通信方式采用短连接模式,即每次请求结束后都会断开连接,这种机制在处理大量小请求时效率低下,因为频繁的连接和断开过程消耗了大量的资源和时间。 #### HTTP长连接(Persistent Connection) ...
### Java连接数据库全过程详解 #### 一、准备工作 在正式开始使用Java进行数据库连接之前,我们需要做一些基础的准备工作,确保所有必要的组件都已经正确安装和配置。 1. **操作系统**: Windows XP 或其他支持的...
这个过程涉及到对目标主机、端口和协议的匹配,确保连接能被正确地重用。 2. **连接对象的移除**:连接池中的连接不是无限期保留的。OkHttp有一套策略来决定何时移除连接。这些策略通常基于连接的空闲时间、服务器...
在TCP/IP通信中,短连接(Short Connection)是指一次数据传输完成后立即关闭连接,而长连接(Long Connection)则保持连接状态,以便后续的数据交换无需重复进行三次握手和四次挥手的过程,从而提高效率。...
在Java编程中,HTTP连接是应用层协议,用于在客户端(如浏览器)和服务器之间交换数据。本资源包“http连接jar和工具类”显然包含了用于处理HTTP连接的相关库和自定义工具类,这对于开发涉及网络通信的Java应用程序...
本文主要涉及的网络编程知识点包括长连接与短连接的定义和区别、TCP连接的建立与断开过程、以及长连接与短连接的不同使用场景和报文传输方式。 长连接和短连接是两种常见的网络通信模式,长连接也被称为持久连接,...
本压缩包“C#连接sql server 2005的存储过程例子大全.rar”提供了一系列示例,帮助开发者理解和应用C#连接SQL Server 2005进行存储过程操作。 首先,存储过程(Stored Procedure)是预编译的SQL语句集合,存储在...
在实验中,使用Ethereal网络分析软件观察了TCP数据包和连接建立的过程,例如第14个分组展示了TCP数据包的详细信息,包括源端口80(HTTP服务)、目的端口1222、数据长度、确认号等。而TCP连接的建立通过“flow graph...
HTTP_POST_HTTP_jasion_labviewhttp_labview和MES连接_Get_是一个关于使用LabVIEW进行数据上传到MES系统的实例。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是美国国家仪器(NI)公司开发的一...
在IT领域,虚拟机网络连接和HTTP协议是两个至关重要的概念,它们在各种应用场景中扮演着关键角色。本文将深入探讨这两个主题,并结合虚拟机中网站的搭建过程,为您提供一个全面的理解。 首先,虚拟机(Virtual ...
在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束后,客户端和服务器端都会立即关闭连接,释放资源。而长连接则是在一次连接建立后,保持连接不断开,可以进行多次的数据交互,如HTTPS、FTP等协议,...
在Symbian操作系统上开发应用程序时,HTTP连接是常见的需求,尤其在构建网络通信功能时。"Symbian HTTP连接例子"是一个针对Symbian S60平台的示例项目,它展示了如何使用S60 Platform HTTP Client API来实现HTTP连接...