TCP连接的开启和终止
来源:互联网 发布:简单编程教程 编辑:程序博客网 时间:2024/05/21 03:24
引言:
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP位于网络层之上,应用层之下的传输层。开启TCP的Socket只需要指定目的IP地址和本地端口号。
具体的TCP协议图如下所示:
TCP连接的开启:
TCP是可靠的传输层协议,所以TCP连接的开启和终止也是要保证可靠的。因此,TCP通过三次握手来保证连接开启的可靠性,通过四次握手来保证连接关闭的可靠性。
那么首先是三次握手。如图所示,用一种对话方式来表示三次握手,很有意思。
实际上,三次握手的数据包收发是下面这样的:
第一次,客户端发送syn(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK( ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
在上述过程中,还有一些重要的概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户端的确认包时,删除该条目,服务器进入ESTABLISHED状态。
SYN-ACK:重传次数。服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待时间不一定相同。
TCP连接的终止:
下面介绍四次挥手。首先上图:
客户端发起结束连接,服务器收到后马上确认,服务器准备好了之后再发送消息通知客户端,客户端发送确认然后连接终止。
实际的通信过程是下面这样的:
第一次挥手:主动方发送Fin+ACK报文,Fin=1,发送序号Seq=x。
第二次挥手:被动方发送ACK报文,确认序号Ack=x+1.
第三次挥手:应用进程关闭或,被动方发送Fin报文再挥手一次。Fin=1,顺序号Seq=y.
第四次挥手:主动放发送Ack报文。Ack=y+1;
如下图所示是完整的TCP传输
- TCP连接的开启和终止
- tcp的连接和终止
- 【转】TCP连接的建立和终止
- TCP连接的建立和终止 详解
- TCP 连接的建立和终止
- TCP的连接和终止(详细说明)
- TCP 连接的建立和终止
- tcp连接的建立和终止
- TCP连接的建立和终止
- TCP连接的建立和终止
- TCP连接的建立和终止
- [计算机网络] TCP连接的建立和终止
- TCP连接的建立和终止过程
- TCP连接的建立和终止
- TCP连接的建立和终止协议
- TCP连接的建立和终止
- TCP连接的建立和终止
- TCP连接的建立和终止
- java计算100!通过数组实现
- 自定义headerview代码与其知识点总结
- UVA - 1610 Party Games 贪心
- Oracle10g下载地址--多平台下的32位和64位
- 提高网站性能的策略(一个大三学生原创)
- TCP连接的开启和终止
- ios 代码细节问题
- Linux设备驱动概论
- 自写atoi----字符串转化为整形
- 机器人软件开发平台
- GMM聚类算法的实现
- 笔记本电脑(没有num按键)如何关闭数字小键盘
- 用C#简单的实现双色球抽奖
- 建立表空间和用户