TCP三次握手原理

转载 2018年04月15日 14:08:56

TCP三次握手原理:

首先,给张图片,建立TCP三次握手的直观印象。

                                   

 

每次握手(发送数据请求或应答)时,发送的数据为TCP报文,TCP段包含了源/目的

地址,端口号,初始序号,滑动窗口大小,窗口 扩大因子,最大报文段长度等。还有

一些标志位:

(1)SYN:同步序号

(2)ACK:应答回复

(3)RST:复位连接,消除旧有的同步序号

(4)PSH:尽可能的将数据送往接收进程

(5)FIN:发送方完成数据发送

(6)URG

从图中,可以看出三次握手的基本步骤是:

第一次握手:客户端向服务器端发送连接请求包SYN(syn=j),等待服务器回应;

第二次握手:服务器端收到客户端连接请求包SYN(syn=j)后,将客户端的请求包

SYN(syn=j)放入到自己的未连接队列,此时服务器需要发送两个包给客户端;

  (1)向客户端发送确认自己收到其连接请求的确认包ACK(ack=j+1),向客户

端表明已知道了其连接请求

  (2)向客户端发送连接询问请求包SYN(syn=k),询问客户端是否已经准备好

建立连接,进行数据通信;

  即在第二次握手时服务器向客户端发送ACK(ack=j+1)和SYN(syn=k)包,此

时服务器进入SYN_RECV状态。

第三次握手:客户端收到服务器的ACK(ack=j+1)和SYN(syn=k)包后,知道了服

务器同意建立连接,此时需要发送连接已建立的消息给服务器;

  向服务器发送连接建立的确认包ACK(ack=k+1),回应服务器的SYN(syn=k)

告诉服务器,我们之间已经建立了连接,可以进行数据通信。

  ACK(ack=k+1)包发送完毕,服务器收到后,此时服务器与客户端进入

ESTABLISHED状态,开始进行数据传送。 

 

为什么不能只两次握手?

有了三次握手的详细步骤,就可以分析为什么需要三次握手而不是两次握手了。

三次握手的目的:消除旧有连接请求的SYN消息对新连接的干扰,同步连接双方的序

列号和确认号并交换TCP 窗口大小信息。

设想:如果只有两次握手,那么第二次握手后服务器只向客户端发送ACK包,此时客

户端与服务器端建立连接。在这种握手规则下: 

假设:如果发送网络阻塞,由于TCP/IP协议定时重传机制,B向A发送了两次SYN请

求,分别是x1和x2,且因为阻塞原因,导致x1连接请求和x2连接请求的TCP窗口大小

和数据报文长度不一致,如果最终x1达到A,x2丢失,此时A同B建立了x1的连接,这

个时候,因为AB已经连接,B无法知道是请求x1还是请求x2同B连接,如果B默认是最

近的请求x2同A建立了连接,此时B开始向A发送数据,数据报文长度为x2定义的长

度,窗口大小为x2定义的大小,而A建立的连接是x1,其数据包长度大小为x1,TCP窗

口大小为x1定义,这就会导致A处理数据时出错。

很显然,如果A接收到B的请求后,A向B发送SYN请求y3(y3的窗口大小和数据报长

度等信息为x1所定义),确认了连接建立的窗口大小和数据报长度为x1所定义,A再次

确认回答建立x1连接,然后开始相互传送数据,那么就不会导致数据处理出错了。


question:

TCP三次握手机制中的seq和ack的值到底是什么意思? TCP连接的三次握手: 第一次(A---B),SYN=1,seq=x 第二次(B---A),SYN=1,ACK=1,seq=y,ack=x+1 //seq为什么是y,ack为什么是x+1? 第三次(A---B),ACK=1,seq=x+1,ack=y+1 //seq为什么是x+1,ack为什么是y+1? 一直没搞懂,谁能解释详细点。

answer:

seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认,值是等待接收的数据包的序列号。
在第一次消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;第二次消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;第三条消息A告诉B收到了B的确认消息并准备建立连接,A自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。

seq是数据包本身的序列号;ack是期望对方继续发送的那个数据包的序列号。





TCP三次握手的过程原理

TCP三次握手的过程原理 TCP/IP的三次握手的原理: 它就好象你要去找一个人一样,首先是打电话联系,看别人有空没,如果他给你回答,可以,你在去找他! 就是这个过程! 为什么要实现这...
  • panpan639944806
  • panpan639944806
  • 2014-02-11 00:01:27
  • 1512

TCP三次握手原理详解

TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。 TCP协议...
  • qq_26811393
  • qq_26811393
  • 2017-03-31 15:24:06
  • 711

TCP协议的连接机制---三次握手信号的原理

这篇文章是写给什么人看的? 网络编程是现代计算机编程中不可缺少的一个环节,这里面的程序员主要分为两种类型:一种是专门搞网络编程的,估计是一些通信专业的童鞋,他们的任务是管理整个网络的通信;第二种是使用...
  • cyfcsd
  • cyfcsd
  • 2016-07-28 09:54:21
  • 2733

结合wireshark分析TCP和三次握手原理

一、wireshark介绍          Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wir...
  • u010670679
  • u010670679
  • 2014-09-30 13:36:27
  • 6227

TCP三次握手与DDOS攻击原理

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握...
  • yanghaitao_1990
  • yanghaitao_1990
  • 2016-06-20 19:37:29
  • 1104

TCP/IP三次握手的过程和抓包分析原理

TCP握手协议   在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。   第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等...
  • keyue123
  • keyue123
  • 2013-10-20 14:42:49
  • 2525

TCP三次握手及会话劫持原理与实例

  • 2011年07月22日 14:54
  • 64KB
  • 下载

图片详解TCP连接的三次握手,四次断开基本原理

图片详解TCP连接的三次握手,四次断开基本原理 TCP(TransmissionControl Protocol 传输控制协议)是一种面向连接传输协议,就像打电话一样一直占着线在聊天,而不是像邮件一样...
  • u013011841
  • u013011841
  • 2014-08-12 20:05:28
  • 2578

简述TCP协议的六个标志位和三次握手与四次挥手的过程及原理

简述TCP协议的三次握手与四次挥手的过程及原理        今天,我们来分享一下TCP协议的六个标志位和三次握手与四次挥手的过程及原理。        先介绍一下TCP中的六个控制位,    ...
  • sd_bit19
  • sd_bit19
  • 2017-07-10 11:29:17
  • 252

简要分析并搞懂9个tcp基础包------三次握手 + 发送数据并收到确认 + 四次挥手

之前我们说过三次握手(3个tcp包), 说过send函数(2个tcp包), 说过四次挥手(4个tcp包), 本文中, 我们来看看, 这9个包到底是怎样的!         服务端代码: #includ...
  • stpeace
  • stpeace
  • 2017-07-01 17:24:01
  • 2936
收藏助手
不良信息举报
您举报文章:TCP三次握手原理
举报原因:
原因补充:

(最多只允许输入30个字)