TCP三次握手与四次挥手

本文主要总结有关TCP三次握手以及四次挥手的知识点。

I、TCP报文结构

1.1 初识TCP报文

为了更好的理解TCP建立连接与释放连接的过程,我们不妨先了解TCP报文结构。

TCP报文包含首部数据部分

TCP报文

重点认识一下TCP首部结构:

TCP首部
1.2 首部报文详解

1、源端口与目的端口:
各占两个字节,共4个字节。用来告知主机该报文的源与目的。

2、序号(seq number)
由于TCP是面向流的有序可靠连接,在一个TCP连接中传输的字节流中的每个字节都需要按顺序编号。

序号字段指的是本报文段所发送的数据的第一个字节的序号。

3、确认号(ack number)
表示期望收到对方下一个报文段的序号值,同时表示前面的序号值都已经成功接收,体现累积确认机制

4、确认ACK
当ACK=1时,确认号有效。

5、同步SYN
当SYN=1时,表明这是一个请求连接报文段。

6、终止FIN
当FIN=1时,表示此报文段的发送方的数据已发送完毕,要求释放TCP连接。

7、 窗口大小(window size)
流量控制中的滑动窗口大小,根据接收方的接收缓冲区剩余大小设置。

II、TCP连接与释放

TCP 的整个交流过程可以总结为:建立连接,传输数据,释放连接。

2.1 建立连接过程

TCP连接的建立采用客户端-服务器模式,我们将主动方成为客户端(Client),被动方成为服务器(Server)。

1、第一次握手:Client主动打开连接,发送TCP报文(SYN = 1,seq = i),进行第一次握手,进入SYN_SEND状态;

2、第二次握手: Server收到了SYN报文,发送返回报文(ACK = 1,SYN = 1,ack = i+1, seq = j),进行第二次握手,进入SYN_RCVD状态;

3、 第三次握手: Client收到来自Server的报文,返回ACK报文(ACK = 1, ack = j+1,seq = i+1),进行第三次握手,进入ESTABLISHED状态; 另外,第三次握手一般已经可以携带数据了

2.1 释放连接过程

TCP有一个特别的概念叫做半关闭,这个概念是说,TCP连接时全双工的连接,因此在关闭连接的时候,必须关闭传送和接收两个方向上的连接。

1、第一次挥手: Client发送关闭连接报文段(FIN= 1, seq = n),进入FIN_WAIT_1状态;

2、第二次挥手: Server收到来自Client的FIN之后,立即返回一个ACK=1报文段(ack = n+1),进入CLOSE_WAIT状态;
此时Server还是可以发送数据给Client。

3、第三次挥手: 当Server确定所有数据都发送完毕之后,发送FIN=1报文段(seq = m),进入LAST_ACK状态;

4、第四次挥手: Client收到之后,返回ACK=1报文段(ack = m+1),进入TIME_WAIT状态;
Client等待2MSL(MSL,最长报文段寿命)之后进入CLOSED状态,Server收到最后一个ACK之后,也进入CLOSED状态。

2.3 TCP连接与释放图示
TCP连接与释放
TCP状态转移

III、SYN Flood攻击

3.1 问题描述

在三次握手过程中,Server发送第二次握手报文之后,收到Client的ACk之前的状态称为半连接状态。在半连接状态的Server会为其认为即将完成连接的Client分配资源。

而SYN Flood攻击就是,在短时间内伪造大量不存在的IP地址,向Server不断发送SYN包,Server为这些伪造的Client分配资源,并返回SYN+ACK报文段,由于IP地址无效,所以Server不会收到第三次握手的ACK,需要不断发送直至超时,这些伪造的Client长时间占用未连接队列与Server预分配的资源,造成Server崩溃,无法响应正常的SYN包。

3.2 问题解决

1、SYN cookies技术:先不分配数据区,而根据SYN计算一个cookies值,当收到Client的ACk之后,再进行对比,分配资源。

2、增大最大半连接和缩短超时时间。

IV、TIME_WAIT状态

4.1 TIME_WAIT状态的作用

1、TIME_WAIT状态能确保Server正常进入CLOSE状态:
TIME_WAIT状态是在Client发完最后一个ACK之后进入的状态,如果这个ACK丢失,则Server不能确认进入CLOSE状态,超时后,Server会重新发送FIN报文段,此时处于TIME_WAIT状态的Client就能收到FIN,重发ACK,确保四次挥手完成。

2、TIME_WAIT状态有净空的效果:
防止已经失效的连接请求出现在下次连接中。经过TIME_WAIT状态,可以使本连接内的所有请求都在网络中消失(从而起到净空的效果,不会赢下下一次连接)。

4.2 大量TIME_WAIT状态

1、 只有主动close一方才会出现TIME_WAIT状态,只有TCP连接为短连接情况下才有可能出现大龄的TIME_WAIT状态。

2、服务器使用短连接,每次客户端请求后,服务器都会主动发送FIN关闭连接。最后进入TIME_WAIT状态。由此,如果访问量过大的Web Server,会存在大量的TIME_WAIT状态。
可以通过修改内核参数,快速回收TIME_WAIT资源。

3、如果一直存在大量TIME_WAIT状态,回收不及时的话,会占用大量服务器资源,可能造成该无法提供服务的问题。

【参考】
[1] 理解TCP 和 UDP
[2] 《计算机网络》

欢迎转载,转载请注明出处wenmingxing TCP三次握手与四次挥手

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342