TCP三次握手

142 阅读2分钟

本文正在参与 “网络协议必知必会”征文活动

简介

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。来源为百度百科

三次握手

三次握手(Three-Way Handshake)建立TCP连接,就是建立一个TCP链接时, 需要客户端和服务器一共发送3个包来确认连接的建立(客户端发两次,服务器发一次).在Socket编程中这个过程由客户端来执行(Connect 方法触发),三次握手图解 image.png

1.第一次握手:客户端将SYN置为1,该段同时也包含客户端的初始序列号(Sequence number = J),并将这个数据包发送给服务器,同时进入SYN_SENT状态, 等待服务器返回确认 2.第二次握手:服务器收到包后,判断标志物SYN=1确认客户端请求建立链接,服务器将标志位SYN和ACK都置为1,ack=J+1,该段同时中包含服务器的初始序列号(Sequence number = K),将以上数据打包返回给客户端以确认请求,服务器进入SYN_RCVD状态

ACK 是“确认”的缩写。 ACK 数据包是任何确认收到一条消息或一系列数据包的 TCP 数据包

3.第三次握手:客户端收到确认消息后,判断ack是否为J+1,ACk是否为1,如果以上标志位都正确,则将ACK置为1,ack=K+1,并将数据包发送给服务器,服务器判断判断ack是否为K+1,ACk是否为1,如果正确则建立链接并完成三次握手,随后客户端和服务器开始传输数据