首页 > 其他分享 >TCP三次握手与四次挥手详解

TCP三次握手与四次挥手详解

时间:2023-08-12 12:34:20浏览次数:32  
标签:ACK PC1 TCP 发送 PC2 四次 详解 回复

三次握手

TCP三次握手与四次挥手详解_字段

根据TCP的包头字段,存在三个重要的标识ACK SYN FIN

ACK:位置为1,表示确认收到发送请求,表示确认位

SYN:位置1,表示建立TCP连接

FIN:位置1,表示断开TCP连接

TCP三次握手与四次挥手详解_序列号_02

PC1 要与PC2 建立TCP连接

三次握手

1)首先PC1像PC2发送:SYN包(表示我要与你建立连接)

2)PC2收到后回复PC1:ACK(同意与你建立连接),并发送:SYN(表示与你建立连接)

3)PC1收到后SYN包后回复:ACK(同意与你建立连接)

PC1和PC2 可以传输数据了

四次挥手

当传输完后

PC1要与PC2断开连接

1)PC1像PC2发送:FIN包(表示我要与你断开连接)

2)PC2收到后回复PC1:ACK包,(表示同意与你断开连接)

这个时候PC2还可以继续像PC1发送未发送完的数据,当PC2发送完数据后

3)PC2 像PC1发送:FIN包(表示与PC1断开连接)

4)PC1收到后,回复:ACK 包(表示同意断开连接)此时双方已经断开连接,无法发送数据,如果想要发送数据,需要再次从新三次握手。

TCP三次握手与四次挥手详解_字段_03

三次握手

01.由主机A发送建立TCP连接的请求报文,其中报文包含seq序列号,是由发送端随机生成的,并且还将报文中SYN字段置为1,表示需要建立TCP连接请求。

02.主机B会回复A发送的TCP连接请求报文,其中包含seq序列号,也是由回复端随机生成的,并且将回复报文的SYN字段置1,而且会产生ACK验证字段,ACK验证字段数值是再A发送过来的seq序列号基础上加1进行回复;并且还会回复ack确认控制字段,以便A收到信息时,知晓自己的TCP建立请求以及得到了确认。

03.A端收到B端发送的TCP建立连接请求后,会使自己的原有序列号加1进行再次发送序列号,并且再次回复ACK验证请求,在B端发送过来的seq基础上加1,进行回复;同时也会回复ack确认控制字段,以便B收到信息时,知晓自己的TCP建立请求已经得到了确认


四次挥手

TCP三次握手与四次挥手详解_字段_04

TCP四次挥手断开过程说明

01.主机A发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中FIN字段置为1,表示需要断开TCP连接。

02.主机B会回复A发送的TCP断开请求报文,其中包含seq序列号,是由回复段随机生成的,而且会产生ACK验证字段,ACK验证字段数值是在A发送过来的seq序列号基础上加1进行回复;并且还会回复ack确认控制字段,以便A收到信息时,知晓自己的TCP断开请求已经得到了确认。

03.主机B在回复完A的TCP断开请求确认控制字段后,不会马上就进行TCP连接的断开,这个时候B可以将未发送完的数据继续发送,当B将数据都发送完成后,像A发起断开连接请求FIN

04.A收到B断开连接请求后,回复ACK包这时候就断开连接了

标签:ACK,PC1,TCP,发送,PC2,四次,详解,回复
From: https://blog.51cto.com/u_15971294/7057542

相关文章

  • Pycharm Debug功能详解
    初学Python时,我们可能都是通过print来调试程序,但这种方法效率不高。入门Python后,Pycharm的Debug功能还是有必要学一下的,可以提高调试代码的效率。什么是Debug模式:简单说Debug模式和正常运行唯一的区别,就是会在断点处停下来,可以通过控制一行一行的去运行代码,而且可以看到整个运行......
  • 【后端面经-数据库】Redis详解——Redis基本概念和特点
    目录1.Redis基本概念2.Redis特点2.1优点2.2缺点3.Redis的应用场景面试模拟参考资料声明:Redis的相关知识是面试的一大热门知识点,同时也是一个庞大的体系,所涉及的知识点非常多,如果用一篇文章罗列,往往会陷入知识海洋中无法感知其全貌,因此,这段时间我会试着拆分Redis的相关章节,辅......
  • 【后端面经-数据库】Redis详解——Redis基本概念和特点
    (【后端面经-数据库】Redis详解——Redis基本概念和特点)声明:Redis的相关知识是面试的一大热门知识点,同时也是一个庞大的体系,所涉及的知识点非常多,如果用一篇文章罗列,往往会陷入知识海洋中无法感知其全貌,因此,这段时间我会试着拆分Redis的相关章节,辅以思维导图的形式介绍Redis的相......
  • 一文详解Apipost数据模型功能
    在Apipost数据模型中用户可以预先创建多个数据模型,并在API设计过程中重复利用这些模型来构建API创建数据模型在左侧导航点击「数据模型」-「新建数据模型」在右侧工作台配置数据模型参数引入数据模型在API设计预定义响应期望下点击引用数据模型,并选择需要导入的数据模型即可将创建......
  • Android FrameWork——Binder机制详解
    1.前面我曾经发表过一篇blog介绍了aidl实现机制(aidl实现机制浅析),不过那只是停留在java表层,并遗留了一个问题,那就是BinderProxy.transact该方法本地化实现,同时我指出了它的具体代码位置:\frameworks\base\core\jni\android_util_Binder.cpp->staticjbooleanandroid_os_BinderPr......
  • pip安装使用详解
    pip类似RedHat里面的yum,安装Python包非常方便。本节详细介绍pip的安装、以及使用方法。1、pip下载安装1.1pip下载 #wget"https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb"--no-check-certificate1.2pip......
  • Android FrameWork——Touch事件派发过程详解
    对于android的窗口window管理,一直感觉很混乱,总想找个时间好好研究,却不知如何入手,现在写的Touch事件派发过程详解,其实跟android的窗口window管理服务WindowManagerService存在紧密联系,所以从这里入手切入到WindowManagerService的研究,本blog主要讲述一个touch事件如何从用户消息的采......
  • MongoDB索引操作和执行计划Explain()详解
    一、索引操作说明,下面的内容举例时,以"dailyTrip"collection为例。字段内容如下:{"_id":ObjectId("63ec5a971ddbe429cbeeffe3"),//objectid"car_type":"Gett",//string"date":ISODate("2016-04-01T0......
  • JAVA 内存详解 (理解 JVM 如何使用 Windows 和 Linux 上的本机内存)
    级别:中级AndrewHall ,软件工程师,IBM2009年5月11日Java™堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因。如果本机内存 耗尽,则会发生普通调试技巧无法解决的 OutOfMemoryError 。本文将讨论本机内存的概念,Java运行时如何使用它,它被耗......
  • 2022最全Hbuilder打包成苹果IOS-App的详解
    本文相关主要记录一下使用Hbuilder打包成苹果IOS-App的详细步骤。介绍一下个人开发者账号:再说下什么是免费的苹果开发者账号,就是你没交688年费的就是免费账号,如果你想变成付费开发者账号,提交申请付费就行,账号都是一样的账号。没有账号的点击链接申请:苹果开发者账号申请登录开发者......