TCP中三次握手及四次挥手理解

相关概念

  • SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用。当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来端口扫描。扫描者只发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来,就表明这台主机存在这个端口。但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描成功表示被扫描机器不安全,一台安全的主机会强制要求一个连接严格的进行TCP的三次握手。

  • ACK:代表报文到达确认,是对接收到的数据的最高序列号的确认,并向发送端返回一个下次接收时期望的TCP数据包的序列号。如发送方发送了100字节数据,那么接收方回将ACK置为101,代表希望的到100之后的数据,然后回复给发送方。

  • FIN:表示发送端已经到达数据末尾,也就是说双方的数据传输完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

  • SEQ:表示这个包中第一个字节的序号。如已经发送了100字节的数据,要再发送10字节,那么再次发送的包的SEQ就是101,数据的字节编号是101到110,之后再次发送的话SEQ就是111。

    如果接收端收到这个10字节的包的话,便会返回一个ACK为111的包。表示前面110个字节已经成功接收。

三次握手

TCP的3次握手本质是信道不可靠,但是通信双方需要就某个问题达成一致。而要解决这个问题,无论在消息中包含什么信息,三次通信是理论上的最小值。所以三次握手不是TCP本身的要求,而是为了满足在不可靠信道上传输可靠消息这一需求所导致的。如果信道可靠,或并不关心数据对方是否可以收到,那么三次握手就没有必要。

  • 第一次握手:建立连接。客户端发送请求报文,将SYN置为1,SEQ为x(系统动态随机取一个32位长的序列号),然后客户端进入SYN_SEND状态,等待服务端确认。

    理解: SYN=1,代表将要发起一个请求。SEQ=x,是一个随机数。代表序号的初始值,之后的序号在此值之上累加

  • 第二次握手:服务端收到SYN报文。对SYN报文进行确认,设置ACK为x+1。同时也发送一个SYN请求。将SYN置为1,SEQ为y(系统动态随机取一个32位长的序列号)。服务端将上述所有信息发送给客户端,同时也进入SYN_RECV状态。

    理解:服务器接收到SYN=1的请求,由于SEQ(序列号为)x,那么需要告诉客户端需要x后面的数据,所以ACK+1也就是x+1。同时服务端也要发起一个请求和客户端建立连接,所以再设置一个SEQ(序列号)=y(初始随机值)。然后将上述内容发送给客户端

  • 第三次握手:客户端收到服务端的报文。将ACK置为y+1。向服务端发送ACK报文段。发送完成后,客户端和服务端都进入ESTABLISHED状态,完成TCP三次握手

    理解:客户端收到服务端消息,由于服务端发起了连接请求,需要将ACK设置为服务端的SEQ(序列号)+1,也就是y+1,告诉服务端下次发送时,从y+1开始

四次挥手

四次挥手是因为虽然主机1(可以是客户端也可以是服务端)没有信息发送给主机2了,但是不代表主机2没有信息发送给主机1,所以主机2首先要返回一个报文,表示知道主机1没有数据发送了,同时检查自己是否还有数据发送,并处理完后。再向主机1发起断开连接请求。

  • 第一次分手:主机1设置SEQ和ACK,向主机2发送一个FIN报文,此时主机1进入FIN_WAIT_1状态,表示主机1没有数据要发送给主机2了
  • 第二次分手:主机2收到主机1发来的FIN报文,向主机1回复一个ACK报文。主机1进入FIN_WAIT_2状态,主机2告诉主机1,同意你的请求
  • 第三次分手:主机2向主机1发送FIN报文,请求关闭连接。同时主机2进入LAST_ACK状态
  • 第四次分手:主机1收到主机2的FIN报文,向主机2发送ACK报文,然后主机1进入TIME_WAIT状态,主机2收到主机1的ACK报文以后,就关闭连接。此时主机1等待2MSL(报文最大生存时间)后依然没有收到回复,则证明主机2连接已经正常关闭,那么主机1也断开连接。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349