美文网首页
2018-09-30 TCP三次(步)握手过程

2018-09-30 TCP三次(步)握手过程

作者: 贝贝ovo | 来源:发表于2018-09-30 14:37 被阅读28次

首先,抠个字眼,为什么是三次握手,两个人见面握一次手就够了,连握三次手是很神经病的行为。人家明明叫 three-way handshake,而不是 three handshakes
三步握手是一次握手分三个步骤进行,而不是一共握三次手。

这里分解下人与人之间的三步握手
A,B两人面对面

  1. A伸手
  2. B看到A伸手
    B也伸出手
  3. A手迎接向B手

举一些类似三步握手的例子:收集于知乎
例子1:
背景:老家开往北京的大巴,由于没有车站买票,所以采用直接给大巴司机打电话预定的方式订票。

订票流程是这样子的 (三步握手)
第一步:我们前一天上午先给司机打电话订票;
第二步:司机前一天下午打电话向每一个人确认;
第三步:第二天坐车的时候凭借电话号码上车。

备注:有人说:一次握手就够,上车付钱。这就是UDP了,可能坐不上车

例子2:
A: How are you?
B: I'm fine, thanks,and you?
A: I'm fine too.

例子3:

三部握手

因为TCP是全双工通信的,三步是通信双方能够互相确认收发条件下的最小握手次数。下面我们详细了解TCP的三步握手过程,此前先简单解释一些名称
TCP序列号(序列码SN,Sequence Number):32位的序列号标识了TCP报文中第一个byte在对应方向的传输中对应的字节序号。当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1,单位是byte。

TCP应答号(Acknowledgment Number简称ACK Number或简称为ACK Field):32位的ACK Number标识了报文发送端期望接收的字节序列。如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。

ACK(Acknowledgment):取值1代表Acknowledgment Number字段有效,这是一个确认的TCP包,取值0则不是确认包。

SYN(Synchronize):同步序列编号(Synchronize Sequence Numbers)有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。

FIN(Finish):带有该标志置位的数据包用来结束一个TCP会话,但对应端口仍处于开放状态,准备接收后续数据。当FIN标志有效的时候我们称呼这个包为FIN包。

TCP三步握手

上图已经说明了三次握手的过程。

第一步
SYN=1 客户端提示服务端记得检查我的序号哦,seq=200我的序号是200,ACK=0 我在问你

第二步
SYN=1 服务端提示客户端记得检查我的序号哦,seq=500我的序号是500,ACK=1 我在回你,收到了,ack=200+1,你的序号是200吧

第三步
客户端再进行一次回复确认,不用SYN 。 ACK=1, 我也回一下你,我也收到了, ack=500+1,你的序号是500吧
然后连接建立

注意:
不要将确认序号ack与应答号(标志位)中的ACK搞混了。这两个一起出现

四步挥手
TCP四步挥手

1、当主机A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1。

2、主机B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。

3、A收到B的确认后进入等待状态,等待B请求释放连接, B数据发送完成后就向A请求连接释放,也是用FIN=1 表示, 并且用 ack =100+1(如图)。

4、 A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等待 2MSL 时间。

为什么要等待呢?

为了这种情况: B向A发送 FIN = 1 的释放连接请求,但这个报文丢失了, A没有接到不会发送确认信息, B 超时会重传,这时A在WAIT_TIME 还能够接收到这个请求,这时再回复一个确认就行了。(A收到 FIN = 1 的请求WAIT_TIME会重新记时)

另外主机B存在一个保活状态,即如果A突然故障死机了,那B那边的连接资源什么时候能释放呢? 就是保活时间到了后,B会发送探测信息, 以决定是否释放连接。

再一个例子

三步握手:

A:“喂,你听得到吗?”A->SYN_SEND

B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED

A:“我能听到你,今天balabala……”B->ESTABLISHED

四步挥手:

A:“喂,我不说了。”A->FIN_WAIT1

B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2

B:”好了,说完了,我也不说了。”B->LAST_ACK

A:”我知道了。”A->TIME_WAIT | B->CLOSED

A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

Ref
TCP的三次握手四次挥手
网络的五层划分,TCP与UDP的区别,TCP的三次握手过程

相关文章

  • TCP三次握手和四次挥手

    1、TCP三次握手 TCP建立连接需要进行“三次握手”: TCP三次握手过程描述如下: 客户端发送连接请求报文:S...

  • 不积跬步--TCP三次握手和四次挥手过程

    本文来至转载TCP三次握手和四次挥手过程 TCP三次握手和四次挥手过程 1、三次握手 (1)三次握手的详述 首先C...

  • 2019-03-01

    TCP协议三次握手过程分析 TCP(Transmission Co...

  • 网络浅聊

    TCP三次握手 TCP三次握手 三次握手过程:客户端——发送带有SYN标志的数据包——服务端 一次握手 Clien...

  • 计算机网络

    问题总结1、cookie和session的区别2、TCP的三次握手过程?为什么要三次握手?【三次握手的过程】【三次...

  • 2018-09-30 TCP三次(步)握手过程

    首先,抠个字眼,为什么是三次握手,两个人见面握一次手就够了,连握三次手是很神经病的行为。人家明明叫 three-w...

  • TCP三次握手和四次挥手以及缺陷

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 1、TCP连接建立——三次握手 几...

  • 多次握手挥手

    TCP三次握手的过程,accept发生在三次握手的哪一个阶段? accept过程发生在三次握手之后,三次握手完成后...

  • 99%网工都会遇到的10道经典面试问题

    1、介绍TCP连接的三次握手?追问:为什么TCP需要握手三次?三次握手:第一步:A向B发送一个SYN报文表示希望建...

  • 简明理解三次握手和四次挥手

    三次握手与四次挥手分别对应TCP连接建立过程与断开过程,先上TCP报文格式: 三次握手过程: 问题1: 为什么要三...

网友评论

      本文标题:2018-09-30 TCP三次(步)握手过程

      本文链接:https://www.haomeiwen.com/subject/bxdwoftx.html