一个完整的TCP连接
2016-11-05 23:25
141 查看
当我们向服务器发送HTTP请求,获取数据、修改信息时,都需要建立TCP连接,包括三次握手,四次分手。
① A 的 TCP 向 B 发出连接请求报文段,其首部中的同步比特 SYN 应置为1,并选择序号 x,表明传送数据时的第一个数据字节的序号是 x(设置初始段序号SEQ = x ,例如SEQ = 26 500)。
② B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
B 在确认报文段中应将 SYN 置为 1,其确认号ACK应为 x + 1(ACK 26 501),同时也给出自己的选择序号 y(设置初始段序号SEQ = y ,例如SEQ = 29 010)。
③ A 收到此报文段后,向 B 给出确认,其确认号应为 y + 1(ACK = 29011)。
A 的 TCP 通知上层应用进程,连接已经建立。
当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。
由于客户对报文段进行了编号,它知道哪些序号是期待的,哪些序号是过时的。当客户发现报文段的序号是一个过时的序号时,就会拒绝该报文段,这样就不会造成重复连接。
过程① 结束时,从 A 到 B 的连接就释放了,连接处于半关闭状态。
相当于 A 向 B 说:“我已经没有数据要发送了。但你如果还发送数据,我仍接收。”
过程② 结束后,至此,整个连接已全部释放。
本文链接:http://www.cnblogs.com/xsilence/p/6034361.html
什么是TCP连接?
为实现数据的可靠传输,TCP要在应用进程间建立传输连接。它是在两个传输用户之间建立一种逻辑联系,使得通信双方都确认对方为自己的传输连接端点。建立连接
建立连接前,服务器端首先被动打开其熟知的端口,对端口进行侦听。当客户端要和服务器端建立连接时,发起一个主动打开端口的请求(该端口一般为临时端口);然后进入三次握手的过程。三次握手的过程:
如图1:① A 的 TCP 向 B 发出连接请求报文段,其首部中的同步比特 SYN 应置为1,并选择序号 x,表明传送数据时的第一个数据字节的序号是 x(设置初始段序号SEQ = x ,例如SEQ = 26 500)。
② B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
B 在确认报文段中应将 SYN 置为 1,其确认号ACK应为 x + 1(ACK 26 501),同时也给出自己的选择序号 y(设置初始段序号SEQ = y ,例如SEQ = 29 010)。
③ A 收到此报文段后,向 B 给出确认,其确认号应为 y + 1(ACK = 29011)。
A 的 TCP 通知上层应用进程,连接已经建立。
当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。
由于客户对报文段进行了编号,它知道哪些序号是期待的,哪些序号是过时的。当客户发现报文段的序号是一个过时的序号时,就会拒绝该报文段,这样就不会造成重复连接。
释放连接
数据传输结束后,通信双方都可以释放连接。四次分手的过程:
如图2:过程① 结束时,从 A 到 B 的连接就释放了,连接处于半关闭状态。
相当于 A 向 B 说:“我已经没有数据要发送了。但你如果还发送数据,我仍接收。”
过程② 结束后,至此,整个连接已全部释放。
TCP的半关闭
TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓的半关闭。图3显示了一个半关闭的典型例子。让左方的客户端开始半关闭,当然也可以由另一端开始。初始端发出的FIN,接着是另一端对这个FIN的ACK报文段。接收半关闭的一方仍能发送数据。当收到半关闭的一端在完成它的数据传送后,将发送一个FIN关闭这个方向的连接,这将传送一个文件结束符给发起这个半关闭的应用进程。当对第二个F I N进行确认后,这个连接便彻底关闭了。本文链接:http://www.cnblogs.com/xsilence/p/6034361.html
相关文章推荐
- 偷来的(一个连接数据库完整程序可以作为模板(从csdn中获得) )
- 一个TCP端口最多可以同时连接多少个客户端呢?
- 一个比较完整的连接Access数据库的DAL层代码
- 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)
- 如何判断一个tcp连接已经断开
- 服务器和客户机通过TCP/IP三次握手建立一个连接
- 【TCP通信】多客户端连接一个服务器端总结
- [找到问题了.Net丫丫]TCP Provider, error: 0 - A transport-level error has occurred when receiving results f 您的主机中的软件放弃了一个已建立的连接
- sql server 2000下的关于“provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接”问题的解决
- (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)
- 一个较完整的连接数据库写法!(请大家参考)
- 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)
- 一个完整的TCP通讯流程(转)
- 一个解除TCP连接的TIME_WAIT状态限制的简便方法
- 介绍一个查看TCP连接的工具TCPView
- 一个连接数据库完整程序可以作为模板(从csdn中获得)
- 转--一个解除TCP连接的TIME_WAIT状态限制的简便方法
- TCP协议中采用三次握手建立一个连接
- TCP服务器设计范式 - 每个客户连接对应一个线程
- 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。) ---> System.Data.SqlClient.Sql