TCP建立和关闭的过程
来源:互联网 发布:网络安全管理系统软件 编辑:程序博客网 时间:2024/06/12 23:59
一、TCP协议简介
TCP,工作在OSI的传输层,提供面向连接的可靠传输服务。
TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。
TCP报头总长最小为20个字节,其报头结构如下图(图1)所示:
二、TCP连接建立
TCP的连接建立过程称为TCP三次握手。首先发送方主机向接收方主机发起一个建立连接的同步(SYN)请求;接收方主机在收到这个请求后向送方主机回复一个同步/确认(SYN/ACK)应答;发送方主机收到此包后再向接收方主机发送一个确认(ACK),此时TCP连接成功建立。
详细过程如下,以客户端发起建立连接为例:
1.服务器端首先执行 LISTEN 原语进入被动打开状态( LISTEN ),等待客户端连接;
2.当客户端的一个应用程序发出 CONNECT 命令后,本地的 TCP 实体为其创建一个连接记录并标记为 SYN SENT 状态,然后给服务器发送一个 SYN 报文段;
3.服务器收到一个 SYN 报文段,其 TCP 实体给客户端发送确认 ACK 报文段同时发送一个 SYN 信号,进入 SYN RCVD 状态;
4.客户端收到 SYN + ACK 报文段,其 TCP 实体给服务器端发送出三次握手的最后一个 ACK 报文段,并转换为 ESTABLISHED 状态;
5.服务器端收到确认的 ACK 报文段,完成了三次握手,于是也进入 ESTABLISHED 状态。
三、TCP连接的关闭
TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道。 关闭过程简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:
1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭
详细过程:
1.客户机发送完数据之后,客户端执行 CLOSE 原语,本地的 TCP 实体向服务器发送一个 FIN 报文段并等待响应的确认(进入状态 FIN WAIT 1 );
4.服务器发送完数据之后,也执行 CLOSE 原语关闭另一个方向的连接,其本地 TCP 实体向客户端发送一个 FIN 报文段,并进入 LAST ACK 状态,等待最后一个 ACK 确认报文段;
这是标准的TCP关闭两个阶段,服务器和客户机都可以发起关闭,完全对称。
FIN标识是通过发送最后一块数据时设置的,标准的例子中,服务器还在发送数据,所以要等到发送完的时候,设置FIN(此时可称为TCP连接处于半关闭状态,因为数据仍可从被动关闭一方向主动关闭方传送)。如果在服务器收到FIN(i)时,已经没有数据需要发送,可以在返回ACK(i+1)的时候就设置FIN(j)标识,这样就相当于可以合并第二步和第三步。
四、其它
1.TCP重置:TCP允许在传输的过程中突然中断连接,这称为TCP重置; TCP 连接在 ESTABLISHED 状态时收到 RST 包后,直接清理队列并删除 TCB,连接进入 CLOSED 状态。
2.TCP数据排序和确认:TCP是一种可靠传输的协议,它在传输的过程中使用序列号和确认号来跟踪数据的接收情况;
3.TCP重传:在TCP的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方,这称为TCP重传;
4.TCP延迟确认:TCP并不总是在接收到数据后立即对其进行确认,它允许主机在接收数据的同时发送自己的确认信息给对方。
5.TCP数据保护(校验和):TCP是可靠传输的协议,它提供校验和计算来实现数据在传输过程中的完整性。
- TCP建立和关闭的过程
- TCP建立和关闭过程
- TCP建立及关闭过程
- TCP建立及关闭过程
- TCP建立及关闭过程
- TCP建立及关闭过程
- TCP连接的建立和关闭
- TCP的建立连接和关闭连接
- TCP连接的建立和关闭详解
- TCP协议--TCP连接的建立和关闭
- TCP建立和关闭连接
- TCP连接和关闭的过程
- TCP连接的建立和终止过程
- tcp的关闭过程
- TCP建立及关闭过程详解
- 数据的传递:TCP的建立和关闭
- tcp建立的三次握手和关闭的四次握手
- TCP建立连接和关闭的三次握手
- c++继承知识点积累:继承和构造函数
- uva 1388 - Graveyard(思维)
- ZOJ 1808 Immediate Decodability(trie)
- 修改Vendor FM VENDOR_UPDATE
- 带AI功能的3x3画井字游戏(引用版本)
- TCP建立和关闭的过程
- hdoj_1005 Number Sequence
- C语言预处理——宏定义
- 4MLinux 5.1 稳定版,迷你 Linux 发行版
- SQL语言总结 (1)
- google code svn代码托管
- linux 多线程【2】条件变量
- STL list.sort()
- IT人,请爱惜你的身体-