- 浏览: 1204218 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (361)
- java综合 (33)
- 项目管理 (10)
- 工作流 (6)
- spring (11)
- hibenate (17)
- struts (0)
- javascript,html,css,ajax,jquery (11)
- IDE (9)
- 生活 (0)
- 工作 (0)
- 杂记 (1)
- 数据库 (96)
- 服务器 (5)
- 可视编辑 (0)
- freemarker (6)
- 操作系统 windows (13)
- web页面 (6)
- jms (15)
- 调优 (4)
- 测试和bug管理 (2)
- 原理 (1)
- 項目-atf (17)
- 安全 (3)
- xml (4)
- 操作系统 liunx (21)
- 网络 (22)
- office (11)
- 设计 (2)
- 软件 (1)
- 数据库 mysql (6)
- 胖客户端-flex (1)
- 正则 (9)
- oracle- liunx (3)
- sql2000 (2)
- 模式 (1)
- 虚拟机 (2)
- jstl (2)
- 版本控制 打包工具 (0)
- AOP (1)
- demo (1)
- 小软件 (2)
- 感恩 (1)
- iphone 4 (1)
- 反欺诈业务经验整理 (0)
最新评论
-
sea0108:
mark
java内存模型 -
XingShiYiShi:
方便把:testPNR();具体实现发出来吗?谢谢
用正则表达式解析 航信的电子客票和pnr报文 -
wh359126613:
如果js和webservice不在同一个服务器上,有跨域问题如 ...
使用javascript调用webservice示例 -
雨飛雁舞:
...
oracle 动态性能(V$)视图 -
ouyang1224:
好东西
oracle 动态性能(V$)视图
1、建立连接协议(三次握手)
(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1.
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文,这是报文段3.
2、连接终止协议(四次握手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
(4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
CLOSED: 这个没什么好说的了,表示初始状态。
LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。
SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED:这个容易理解了,表示连接已经建立了。
FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。
LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
最后有2个问题的回答,我自己分析后的结论(不一定保证100%正确)
1、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
2、 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
这是因为:虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文.
发表评论
-
VPN技术比较
2009-03-30 19:07 1686VPN技术比较 来源: 作 ... -
关于SSL VPN技术原理及其应用全面解析
2009-03-30 19:01 2488随着电子商务、企业信息化、教育信息化等信息化进程的推进,整个社 ... -
HTTP Status Messages
2009-03-30 17:31 1301http://www.btinternet.com/~wild ... -
IP地址精解
2009-03-30 15:08 1108为什麽我们要学二进位 ... -
IPv6远水不解近渴 IPv4仍需挑大梁
2009-03-30 14:52 1248“IP地址资源的危机并 ... -
TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
2009-03-30 14:52 1968TCP一共有四个主要的定 ... -
TCP/IP详解学习笔记(12)-TCP的超时与重传
2009-03-30 14:51 1873超时重传是TCP协议保证 ... -
TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
2009-03-30 14:50 1590目前建立在TCP协议上的 ... -
TCP/IP详解学习笔记(10)-TCP连接的建立与中止
2009-03-30 14:50 1572TCP是一个面向连接的 ... -
TCP/IP详解学习笔记(9)-TCP协议概述
2009-03-30 14:49 1676于看到了TCP协议,这是T ... -
TCP/IP详解学习笔记(8)-DNS域名系统
2009-03-30 14:49 1575前面已经提到了访问一台机器要靠IP地址和MAC地址,其中,M ... -
TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
2009-03-30 14:48 20341.单播,多播,广 ... -
TCP/IP详解学习笔记(6)-UDP协议
2009-03-30 14:48 16181.UDP简要介绍UDP是传输层协议,和TCP协议处于一个分 ... -
TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节
2009-03-30 14:47 11781.静态IP选路 1.1.一 ... -
TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
2009-03-30 14:46 19071.IMCP协议介绍前面讲到 ... -
TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议
2009-03-30 14:45 1553把这三个协议放到一起 ... -
TCP/IP详解学习笔记(2)-数据链路层
2009-03-30 14:43 1738数据链路层有三个目 ... -
TCP/IP详解学习笔记(1)-基本概念
2009-03-30 14:34 1349http://blog.chinaunix.net/u2/ ... -
使用 netstat 命令监视网络状态
2009-03-30 14:33 2834http://docs.sun.com/app/docs/do ... -
TCP/IP详解
2009-03-30 13:58 1758TCP和UDP处在同一层---运输层,但是TCP和UDP最不同 ...
相关推荐
通过本次实验,我们不仅学会了如何使用Ethereal捕获和分析TCP数据包,还深入了解了TCP协议的关键机制,包括连接建立过程中的三次握手、数据传输过程中的序号和确认号机制、重传机制以及流量控制与拥塞控制机制。...
**TCP**(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保连接的可靠性,在TCP建立连接时,采用了三次握手的方式。 ##### 第一次握手 - **发起者**...
### TCP协议详解 #### 一、TCP协议的基本概念与工作机制 **TCP(Transmission Control Protocol,传输控制协议)**是一种面向连接的、可靠的、基于字节流的传输层通信协议。在设计之初,TCP的主要目标是尽可能提高...
在深入探讨TCP握手过程之前,我们首先需要理解TCP(Transmission Control Protocol)协议的基本概念及其在网络通信中的作用。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,设计用于在不可靠的互联网络...
《TCP传输控制协议详解》 TCP(Transmission Control Protocol),即传输控制协议,是网络通信中的一种基础协议,它为两台计算机之间的数据交换提供可靠、有序的连接。TCP的连接和建立过程遵循客户服务器模式,其中...
### TCP三次握手过程详解 #### 一、三次握手的基本概念 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保数据传输的可靠性和准确性,TCP采用了一种称为“三次握手”的机制来...
TCP(Transmission Control Protocol)作为一种面向连接的、可靠的、基于字节流的传输层通信协议,在互联网中起着至关重要的作用。为了应对日益复杂的网络环境以及提高服务质量,TCP头部设计了一系列可选字段(即...
### TCP 三次握手详解 #### 一、三次握手的基本概念 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过三次握手来建立一个连接,这一过程是TCP...
1、生成 wireshark 工具可读取的 capture.pcap 抓包文件; 2、学习 “DNS解析步骤”报文结构; 3、学习 “TCP三次握手”报文结构;...一文详解 TCP与UDP 协议 https://xiaxl.blog.csdn.net/article/details/106223354
1. **握手过程**:在建立连接时,客户端和服务器通过握手协议协商加密算法、生成会话密钥,并进行身份验证。握手过程包括多个步骤,如客户端发送加密方法、随机数等,服务器回应证书和加密方法选择等。 2. **加密...
2. **RTMP连接建立**:基于已建立的TCP连接,客户端与服务器通过RTMP协议进行握手,协商连接参数。 3. **建立流媒体连接**:客户端通过`NetConnection`命令建立与服务器的连接。 4. **建立流**:客户端通过`...
2. **SSL握手层协议**:主要用于协商加密算法、加密密钥等参数,以及进行身份认证。握手协议确保在实际数据传输前完成这些准备工作,从而保证应用协议数据的安全性。 #### 四、SSL协议的应用 - **Web安全**:最...
2. SSL/TLS握手协议(SSL Handshake Protocol / TLS Handshake):握手协议用于建立安全连接,包括身份认证、加密算法协商和共享密钥交换等步骤。在开始实际数据传输之前,客户端和服务器会通过一系列消息交换来完成...
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,设计初衷是为了在网络中提供可靠的数据传输服务。其核心特性包括连接管理、流量控制、拥塞控制以及数据...
WebSocket协议手册(rfc6455中文翻译)详细介绍了WebSocket通信协议的相关知识点,以下是手册中涵盖的知识点详解: 1. WebSocket协议概述: WebSocket是一种在单个TCP连接上进行全双工通信的协议,可以实现实时的双向...
- **TCP/IP详解卷1:协议**:该书详细介绍了TCP/IP协议族的工作原理和技术细节,是理解TCP/IP的重要参考书籍之一。 #### 二、TCP/IP协议栈结构及作用 - **提纲**:TCP/IP协议栈由多层构成,每一层都有其特定的功能...
在握手期间,客户端和服务器将协商使用的协议版本、支持的子协议、支持的扩展选项等。一旦握手完成,连接将保持打开状态,客户端和服务器就可以在连接上实时地传递数据。 WebSocket 协议使用的是双向数据传输,即...
2. SSL握手协议(SSL Handshake Protocol):握手协议负责建立安全连接,包括客户端和服务器的身份认证、加密算法的协商以及共享密钥的交换。此过程中,客户端首先发送“Hello”消息,服务器回应并可能提供生成主...
- **SSL握手协议**:用于在客户端和服务器之间进行身份认证,并协商加密算法和密钥。 - **SSL更改密码说明协议**:用于通知对方密码已被更改。 - **SSL警告协议**:用于在发生错误时向另一方发出警告。 - **SSL...
TCP是一种面向连接的协议,因此连接的建立和终止是TCP通信的重要组成部分。 ##### 连接建立 - **三次握手**:TCP连接建立通常采用三次握手的方式。第一次握手由客户端发起连接请求(发送SYN标志位设为1的数据包);...