TCP 协议

16BBB311-D9B5-49FC-9523-2C48DD39CC3B.png
  1. CLOSED:起始点,在超时或者连接关闭时进入此状态。
  2. LISTEN:Server 端在等待连接时的状态,Server 端为此调用 Socket、bind、listen 状态。
  3. SYN-SENT:客户端发起连接,发给送SYN 给服务器端。如果服务器端不能连接,则直接进入 CLOSED 状态。
  4. SYN-RCVD:对应3,服务器端接受客户端的 SYN 请求,服务器端由 LISTEN 进入 SYN_RCVD,同时服务器回应一个 ACK 包,并发送一个 SYN 包给客户端;另外一种情况。客户端在发起 SYN 的同时接收服务端的 SYN 请求,客户端会由 SYN-SENT 转换到 SYN-RCVD 状态。
  5. ESTABLISHED:服务器端和客户端在完成 3 次握手后进入ESTABLISHED,说明可以开始传输数据了。
  6. FIN-WAIT-1:主动关闭的一方,由状态 5 进入此状态,发送 FIN 给对方。
  7. FIN-WAIT-2:主动关闭的一方,接受对方 FIN 和 ACK,进入该状态,由此不在接受对方数据,但能向对方发送数据。
  8. CLOSE-WAIT:接收到 FIN 的同时发送 ACK,被动关闭的一方进入该状态。
  9. LAST-ACK:被动关闭的一方,发送 FIN 包给对方,由状态 8 进入此状态。
  10. CLOSEING:两边同时发送关闭请求时,会由 FIN-WAIT-1进入该状态。具体动作 FIN 请求,同时响应一个 ACK。
  11. TIME-WAIT:这个状态比较复杂,也是最常见的一个连接状态。
    1. 由 FIN-WAIT-2 转换到 TIME-WAIT,在双方不同时发起 FIN 时,主动关闭的一方在完成自身请求后,接收到被动关闭方 FIN 包后进入该状态。
    2. 由 CLOSING 转换到 TIME-WAIT,具体情况是:在双方同时发起关闭,都发送 FIN 包后,同时接收了 FIN 并做了 ACK 的情况后,会由 CLOSING 进入到 TIME-WAIT 状态。
    3. FIN-WAIT-1 转换到 TIME-WAIT,同时接收到 FIN(对方发起的) 和 ACK(本身发起的 FIN 回应),它与 CLOSING 转换到TIME-WAIT 则是FIN 达到。

三次握手(3个 TCP 包的交换)

  1. Client 发送请求包首部同步位 SYN = 1,选择序号为 seq = x,而 SYN 包不能携带数据,但需要消耗一个序号,进入 SYN-SEND 状态。
  2. Server 在确认包把 SYN 和 ACK 都标记为 1,首部的确认号为 ack = x + 1,选择序号为 seq = y,同样的作为 SYN 包不能携带数据,但需要消耗一个序号,这时 Server 进入 SYN-RCVD 状态。
  3. Client 收到确认包,还需要想 Server 发送确认包。确认包的 ACK 位置 1,确认号为 y + 1。而 ACK 包是可以携带数据的,如果不携带数据时,该包不需要消耗序列号。这时 Client 进入 ESTABLISHED。
    而在 Server 接受到这个确认包时,也进入 ESTABLISHED 状态。
  • 为什么不能是二次握手?
    防止 “已失效的连接请求报文”。
    在 Client 第一次发送同步请求(SYN 包),而网络状态导致延迟到达 Server。而 Server 在接受到 SYN 包后会回复确认包之后,Clinet 就进入
    ESTABLISHED 状态。但如果这个时间点 Client 如果不在 SYN-SEND 状态,则不会进入当前ESTABLISHED,这时候 Server 会傻傻的等待对方的数据而浪费了大量的资源。所以需要最后一次 Client 向 Server 发送 ACK 包,而 Server 在接受ACK 包之后再进入 ESTABLISHED。
  • 4次握手是什么?
    在 Server 接受SYN 包时,先发送一个确认包 ACK = 1 确认码ack = x + 1 ,
    然后再发送一个 SYN 包 SYN = 1,序号 seq = y 。但这一过程和 3 次握手的效果是一样的。

4次挥手(4次 TCP 包的交换)

  1. A 端连接释放包把首部 FIN 位置 1,序号 seq = u,而 FIN 包即使不携带数据,它也会消耗掉一个序号。而A 进入 FIN-WAIT-1。
  2. B 端收到 FIN 包后, 表示自己已经没有数据发送给 B 了,但 B 还可能有数据给 A,所以接下来会是单方向的消息发送。
    1. B 在 ESTABLISHED 状态,如果 B 还有数据要发送,则发送确认包 ack = u + 1,进入CLOSE-WAIT 状态。
    2. B 在 ESTABLISHED 状态,但没有数据要发送,则确认包 ack = u + 1,并标志 FIN = 1,进入 LAST-ACK。
    3. B 已经是 FIN-WAIT-1 状态,这时候收到 FIN 包,则回复它的 ACK 包,则进入 CLOSING。
    1. 对应2.1状态,A 端在接受到 B 端的 ACK 包后则进入FIN-WAIT-2。等待对方的 FIN 包
    2. 对应2.2状态,A 端在接受 ACK+FIN 包后进入 TIME-WAIT 状态。回复 ACK 包。
    3. 对应2.3状态,A 端在接受 ACK 前接受到 FIN,进入 CLOSING 状态。回复 ACK 包。
  3. 对应 3.1 的情况,B 端在没有数据要传输后,在报文头部标志 FIN = 1,还需要再次将ACK 标位 1, ack = u + 1 ,发送 FIN 包后进入LAST-ACK 状态。
  4. 对应4,A 端回复 ACK 包,并进入 TIME-WAIT 状态。而 B 端接受到 ACK 包后,进入 CLOSED。

时间等待计数器(TIME-WAIT timer)

TCP进入 TIME-WAIT 后,并没有真正关闭 TCP 连接,而是要经过 timer 设置的时间后再关闭连接。

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

推荐阅读更多精彩内容