TCP连接
Posted Western_Trail
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP连接相关的知识,希望对你有一定的参考价值。
在TCP中,面向连接主要有以下三个过程:连接建立,数据传输和连接终止,接下来我们分别讨论这三种内容。
TCP连接建立
1. 打开三次握手:
- 客户端向服务端发送一个
SYN
段,这个段用于序号同步,它告诉服务端需要传输的数据段的初始序号是多少。
SYN
段不携带数据,占用一个序号
- 服务器端收到ACK段后,向客户端发送
SYN+ACK
段,因为TCP是一个双向通信的连接,所以再发一次SYN
段是用于确定服务器向客户端发送段时的初始序号,ACK段用于确认服务器接收到了来自客户端的SYN
段。
SYN+ACK
段不携带数据,占用一个序号
- 客户端向服务器发送
ACK
段确认收到了来自服务器的ACK+SYN
段。
由于一些协议允许客户端在第三次握手时携带第一块数据,例如HTTP协议中就将网页的请求报文放在了第三次握手中。
所以此时ACK
段携带数据时,会占用序号,否则不占用序号。
2. 关闭三次握手和半关闭:
2.1 全关闭
- 客户端向服务器发送
FIN
段用来告诉服务器将连接关闭。 - 服务器向客户端发送
FIN+ACK
段来告诉客户端将连接关闭,并且确认已经接收了来自客户端的FIN
段。 - 客户端发送
ACK
段表示接收到了服务器的FIN
段。整个TCP连接关闭
2.2 半关闭
在TCP中,一端停止向另一方发送数据时,仍然可以接收来自另一端的数据,这时需要采用的是四次握手的半关闭
- 客户端向服务器发送
FIN
段用来告诉服务器将连接关闭。 服务器向客户端发送
ACK
段确认已经接收了来自客户端的FIN
段。但是服务器向客户端的通信并没有关闭(服务器这时仍然可向客户端发送数据段)
- 服务器发送
FIN
段表示这时关闭向客户端的通信 客户端向服务器发送
ACK
段用来表示接收到了服务器的FIN
段。整个连接关闭。
(未完待续。。。)
以上是关于TCP连接的主要内容,如果未能解决你的问题,请参考以下文章
使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段
错误:E/RecyclerView:未连接适配器;跳过片段上的布局
TCP 错误代码 10061:无法连接到 net.tcp://。连接尝试持续了 00:00:01.0156241 的时间跨度