1. 字段含义

1.1 状态字段

  • ACK 报文是用来应答的,SYN 报文是用来同步的
  • LISTEN:侦听来自远方TCP端口的连接请求
  • SYN-SENT:在发送连接请求后等待匹配的连接请求
  • SYN-RECETVED:在收到和发送一个连接请求后等待对连接请求的确认
  • ESTABLISHED:代表一个打开的连接,数据可以传送给用户
  • FIN-WAIT-1:等待远程TCP的连接中断请求,或先前的连接中断请求的确认
  • FIN-WAIT-2:从远程TCP等待连接中断请求
  • CLOSE-WAIT:等待从本地用户发来的连接中断请求
  • CLOSING:等待远程TCP对连接中断的确认
  • LAST-ACK:等待原来发向远程TCP的连接中断请求的确认
  • TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
  • CLOSED:没有任何连接状态

1.2 传输中的涉及字段(重点字段)

  • 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记

  • 确认序号:Ack 序号,占32位,只有 ACK 标志位 为1时,确认序号字段才有效,Ack = Seq+1

  • 标志位

    • URG:紧急指针(urgent pointer)有效
    • ACK:确认序号有效(用来应答的)
    • SYN:发起一个新连接(用来同步的)
    • PSH:接收方应该尽快将这个报文交给应用层
    • RST:重置连接
    • FIN:释放一个连接

注意

不要将确认序号 Ack 与标志位中的 ACK 搞混了

确认方Ack=发起方Req+1,两端配对

2. 三次握手

2.1 原理

刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。

第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN©,此时客户端处于 SYN_SEND 状态。

第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s) ,同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于SYN_RCVD 的状态。

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了链接。

2.2 作用

(1)确认双方的接受能力、发送能力是否正常。

(2)指定自己的初始化序列号,为后面的可靠传送做准备。

(3)如果是 HTTPS 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成。

2.3 涉及问题

  1. 为什么需要三次握手,两次不行吗?
  2. 第三次握手的必要性
  3. (ISN)是固定的吗?
  4. 什么是半连接队列?
  5. 三次握手过程中可以携带数据吗?
  6. 如果第三次握手丢失了,客户端服务端会如何处理?
  7. SYN攻击
    什么是SYN攻击(SYN Flood)?如何检测SYN攻击?如何防御SYN攻击?

3. 四次挥手

3.1 原理

刚开始双方都处于 ESTABLISHED 状态,假如是客户端先发起关闭请求

第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。

第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。

需要过一阵子以确保服务端收到自己的 ACK 报文之后,就处于关闭连接了,进入 CLOSED 状态。

3.2 涉及问题

  1. (TIME WAIT)为什么客户端发送 ACK 之后不直接关闭,而是要等一阵子才关闭?
  2. 挥手为什么需要四次?
  3. 四次挥手释放连接时,等待 2MSL 的意义?
  4. 为什么 TIME_WAIT 状态需要经过2MSL(最大报文段生存时间)才能返回到 CLOSE 状态?

建立TCP连接时的三次握手与四次挥手问题相关推荐

  1. go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态

    三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: ...

  2. 2022.9.07 TCP协议特点,TCP适用场合,TCP连接方式(三次握手,四次挥手)。

    传输层协议: TCP   <传输控制协议>    transport control protocol TCP协议特点: 是一种面向连接的传输层协议,它能够提供高可靠性通信,无数据丢失,无 ...

  3. Python常见面试题:TCP 协议中的三次握手与四次挥手相关概念详解

    今天来聊聊Python常见面试题中面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手. 涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详 ...

  4. 计算机网络-TCP的运输连接管理(三次握手,四次挥手)补充一下为什么不能将四次挥手改为三次挥手

    hello,朋友们.今天咱们分享一下TCP连接建立与释放问题(三次握手与四次挥手问题) 1.简单介绍 基础知识了解(仅代表个人简单理解) SYN        同步(一个信号   代表自己的状态) F ...

  5. tcp协议报文和三次握手与四次挥手

    tcp协议: tcp是面向连接.可靠的进程到进程之间的协议.tcp提供全双工服务:即:数据可在同一时间双向传输. tcp报文段首部格式: 各字段含义: 源端口号:16位字段,为发送端进程对应的端口号 ...

  6. 网络编程 | tcp协议 | udp协议 | 三次握手与四次挥手

    目录 网络编程 为什么要用网络编程 软件开发的结构 1. C/S架构 2.B/S架构 网络基础 一个程序如何在网络上找到另一个程序? ip地址 什么是端口 远程数据传输发展史 OSI七层网络模型 前言 ...

  7. 【转载】万字详文彻底弄懂TCP协议:从三次握手和四次挥手说起

    今日头条 腾讯技术工程 作者:morganhuang,腾讯 IEG 后台开发工程师 说到 TCP 协议,相信大家都比较熟悉了,对于 TCP 协议总能说个一二三来,但是 TCP 协议又是一个非常复杂的协 ...

  8. 面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  9. 唤醒手腕 TCP/IP 协议进行三次握手、四次挥手建立连接详细介绍

    访问域名的 IP 地址,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的 WEB 程序(常用的有 Apache(httpd), ngi ...

最新文章

  1. GStreamer 1.0 series序列示例
  2. centos7 各版本区别 DVD Netinstall Everything Minimal GnomeLive KdeLive
  3. 福师《计算机应用基础》期末考试,21年2月福师《计算机应用基础》期末考试A卷答案...
  4. Objective-C学习之解析XML
  5. web项目怎么连接云服务器,web项目怎么连接云服务器
  6. django的数据库名字和models.py中类名的对应关系
  7. html溢出自动滚动,html – 溢出-y:使用overflow-x滚动:可见
  8. .NET Core技术研究-主机
  9. linux超级工具,linux运维超级工具--sysdig
  10. 指令 出厂_口碑营销_南澳出口木箱出厂价
  11. Golang——延迟调用defer
  12. mysql的data文件夹的位置以及作用
  13. matlab2010b数值分析,matlab2010b教程
  14. Web前端面试 面试官常问问题
  15. kibana本地安装
  16. 盘点2019年经典营销案例
  17. dtls到srtp的整个流程
  18. 【NetCore】.NetCore之下载文件
  19. python显示程序运行进度_显示Python程序运行进度
  20. Windows驱动中的电源管理

热门文章

  1. ivy java_使用Ivy管理项目中的依赖
  2. 数据库系统概论:第十二章 数据库管理系统
  3. java md5包_JAVA中有没有提供MD5算法的包啊?
  4. 基于c#的相关性分析_基于数字高程模型的城市地貌与地名相关性分析——以兰州市为例...
  5. python中文对齐_Python中英文对齐终极解决方案
  6. Deep Learning 教程(斯坦福深度学习研究团队)
  7. Jmeter添加断言
  8. Java中console类的简单用法
  9. 【bzoj2754】【scoi2012】喵星球上的点名
  10. POJ3045 Cow Acrobats —— 思维证明