0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCP三次握手详解

冬至子 来源:清菡软件测试 作者:清菡软件测试 2023-07-10 17:14 次阅读

一、举个例子

图片

图片来自网络

类比两个人初认识的一个过程。比如一个男生初次认识一个女生,男生第一次看到这个女生就一见钟情,想要认识女生。

男生给女生发了个求交往的消息,“我想要跟你做朋友,可不可以?”给这个求交往的消息打上标签,比如爱心,代表这个是求交往的消息。

女生回复“我收到你的消息(对收到消息的确认)。我同意跟你做朋友试试看。”这个是女生的态度。在男生发完求交往后的一个确认消息以及女生同意交往的消息。

这个是消息内容以及消息性质。男生收到女生的消息很开心,再次确认下我确实收到了你的确认消息。也知道了女生同意试试看的态度。

这样的一个交互之后,确认消息的一个再次确认消息。

结果:确认关系了,可以正式交往了。后面再发送的消息就是他们作为男女朋友之后发的消息内容了。

二、TCP三次握手详解

1.TCP头部的重要字段

图片

图片来自网络

tcp三次握手跟这个过程就特别像。 现在是个客户端,这边是个百度服务器。这个客户端想像百度服务器去取页面、资源。首先要发起个tcp的链接请求。

首先要发一条请求链接的消息。请求链接的消息里面要包括一些什么内容呢?这个需要再去详细的看下tcp头部了。

图片

图片来自网络

要重视的是序号、确认号、6个标志位。

序号:就是tcp数据包标的编号。tcp数据包过大,tcp数据会在网络中进行分段。

太大了在网络中是无法传输的,分成一小段一小段进行传输。

分段,到达目的主机后进行重组。比如分成了10段,每段要按顺序重组,才能组成原来一样的数据包。如果顺序错了,数据包也不一样了。

所以这个时候要对它进行一个编号,比如分成10段,分别是1,2,3,4....10,重组的时候,收到1的时候必须等2,收到2的时候必须等3,这个数据包依次过来依次重组,这样保证数据能够正确的组合起来。这个就是序号的作用。

确认号:就是确认的一个序号。当客户端向服务器发起了一个链接的时候,客户端会发起一个链接请求,客户端发完链接请求之后,希望服务器能够给一些回应。

比如男生给女生发请求交往的消息,内心很忐忑的希望女生也能够回一个确认消息。确认消息里面会带一个编号。这个编号就是这里说的确认号。

确认号存在于确认消息里面的。确认号是怎么编号的呢?序号是为了给数据包分段的时候为了方便给后面进行完整的数据重组。

确认号和序号有什么关系?确认号是依据序号来编得。

一个数据包发送过去,它的序号的编号是1。发到服务器那边,服务器进行了一个回应,回应包也就是确认包里面有确认号。ack表示确认号。

确认号是上一个收到的包的序号加上1。表示服务器期望收到你的下一个包的序号。

6个标志位(状态控制码):目前只需要掌握4个,包括ACK(确认位)、RST(重置)、SYN、FIN。

标志位--信号灯,1--亮,0--灭。表示数据包的类型。标志位就是表示数据包的类型。

2.四个标志位

ACK(确认位)。=1,表示这个消息是一个确认消息。

什么是确认消息?男生给女生发了一个求交往的消息,女生礼貌性的回了一个确认消息。这个就是一个确认消息,ACK这个标志位就会被置成1。

客户端收到,就会认识这个包是个确认消息。

RST(重置):=1,表示这个消息释放链接。TCP链接出现了错误--主机服务器崩溃,断开链接,请重新建立链接。

SYN:同步,=1,表示这个消息是:1.一个发起链接的消息。男生向女生发起的第一个求交往的消息,就是一个发起链接的消息。

2.确认接受链接的消息。

如果我这个消息是一个确认接受链接的消息,服务器这边 收到客户端一个发起链接的消息,然后我同意它发起链接,所以要进行一个确认。

这两种情况都需要把SYN位置成1。

FIN:终止。=1,表示发送报文结束了完毕,释放这个链接。

RST是出现错误,不得不释放链接,而FIN是用完了这个链接,用完了之后自然要释放这个链接。FIN被置位了就表示TCP四次挥手要开始了。

不管是客户端还是服务器收到tcp的报文,检查标记号,标记位是什么状态,表示当前的报文是一个什么样的类型。

3.TCP三次握手

图片

图片来自网络

客户端要向服务器端发送一个请求链接的消息。标志位SYN=1,表示一个发起链接的消息时,这个SYN位一定置成1。

每个包都有一个序号,所以序号用seq来表示,seq=j,表示当前的序号是j。

是一个SYN包,是我要向服务器发起一个链接请求。这个是客户端向服务器发起的第一个数据包。也是三次握手的第一次握手。

服务器收到了客户端的包,服务器给客户端回的消息是一个确认消息。

标志位:ACK位置1,表示它是一个确认消息。SYN位置1,客户端发起链接,服务器确认接受链接的消息。

ack(确认号):根据序号来进行表示的,序号是1,确认号是1+1,表示服务器期望收到的下一个包的序号。所以确认号是j+1。

表示收到了序为j的这个包,并且希望得到下一个包的序号是j+1。

这个包,自己的序号是seq=k。

客户端收到服务器的确认消息,需要再次给它发送一个确认消息。

这个确认消息里面,标志位里面:ACK肯定置1。也不是发起请求的一个消息,也不是确认接受请求的一个消息,所以SYN这个位置是不会被置位的。

ack(确认号)=k+1

收到序号为k的这个包,并且进行一个确认,期待下一个包的序号是k+1,到此为止就是tcp三次握手的一个完整过程。

后续才是这个基础上的数据发送报文。

必须要建立这个三次握手的基础上才有后续的数据发送报文。

四、总结

服务器和客户端在握手中的状态 :首先,三次握手之前,客户端和服务器端都是处于关闭状态。

然后客户端发起了第一个SYN包,想要去跟服务器建立链接。

发完SYN包之后就变成syn_sent状态,就是把syn发完了的状态。服务器在收到syn包之前变成监听状态。

开始听下谁会给我发送消息。收到客户端的syn包之后,变成syn_Revd的状态。

回了一个syn,ack。客户端收到syn,ack之后变成建立链接的状态,它认为我收到之后,我这个链接就已经建立好了。并且我给它发送了一个ack包,服务器收到ack包后也建立链接了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16138

    浏览量

    177172
  • SYN
    SYN
    +关注

    关注

    0

    文章

    9

    浏览量

    8194
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27462
  • RST
    RST
    +关注

    关注

    0

    文章

    31

    浏览量

    7377
  • TCP通信
    +关注

    关注

    0

    文章

    146

    浏览量

    4202
收藏 人收藏

    评论

    相关推荐

    讲一讲的TCP三次握手和四挥手

    如果你学过网络基础知识,那么你一定对TCP三次握手不陌生。今天我想用通俗的话来给大家讲一讲TCP三次握手
    的头像 发表于 02-03 10:43 2674次阅读
    讲一讲的<b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>挥手

    TCP协议连接的三次握手

    通过三次握手,客户端与服务端能够确保彼此的网络连接是可用的。客户端发起的SYN报文和服务端返回的SYN+ACK报文都包含了对方的初始序列号和通信能力信息,通过互相确认这些信息,双方确认彼此的能力和正确性。
    的头像 发表于 02-03 16:44 1289次阅读
    <b class='flag-5'>TCP</b>协议连接的<b class='flag-5'>三次</b><b class='flag-5'>握手</b>

    三次握手,四挥手你懂吗

    程序员面试被问到“三次握手,四挥手”怎么办?
    发表于 04-08 07:23

    TCP三次握手的过程描述

    本文档主要描述TCP三次握手的过程,一个完整的三次握手也就是 请求---应答---再次确认
    发表于 03-02 15:37 8次下载

    tcp协议三次握手详细过程

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:第一握手:主机A发送位码为syn=1,随机产生seq
    发表于 12-08 11:53 9893次阅读
    <b class='flag-5'>tcp</b>协议<b class='flag-5'>三次</b><b class='flag-5'>握手</b>详细过程

    大神告诉你TCP建立连接为什么是三次握手

    所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户
    的头像 发表于 04-16 11:43 1w次阅读
    大神告诉你<b class='flag-5'>TCP</b>建立连接为什么是<b class='flag-5'>三次</b><b class='flag-5'>握手</b>

    TCP三次握手过程及四挥手过程说明

    三次握手 置位概念:根据 TCP 的包头字段,存在 3 个重要的标识 ACK、SYN、FIN ACK:表示验证字段 SYN:位数置 1,表示建立 TCP 连接 FIN:位数置 1,表示
    的头像 发表于 03-01 12:00 4192次阅读

    TCP三次握手和四挥手以及11种状态资料下载

    电子发烧友网为你提供TCP三次握手和四挥手以及11种状态资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可
    发表于 04-15 08:41 2次下载
    <b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>挥手以及11种状态资料下载

    TCP三次握手和四挥手过程中的异常情况

    TCP 三次握手和四挥手过程中,途中某一步的报文丢失了,会发生什么?
    的头像 发表于 09-05 10:23 1205次阅读

    如何使用WireShark进行TCP三次握手

    WireShark是一种非常方便的网络抓包工具,下面演示,使用WireShark来抓取TCP三次握手过程。
    的头像 发表于 11-01 09:50 2087次阅读

    通过WireShark抓取TCP三次握手过程分享

    客户端收到服务器的响应后,就会回复一个序列号为Seq = c+1, 确认号为Ack = s+1的ACK数据包给服务器,三次握手完成。
    发表于 11-01 09:49 2201次阅读

    TCP建立连接概述及三次握手、四挥手的流程

    具备上述四个条件后A获取B的信息是有要求的,根本上的要求是数据信道可靠,就是平时所说的可靠连接,那么如何保证连接的可靠性呢,TCP协议就是靠确认应答机制、超时重传机制等保证连接可靠性的,接下来就通过TCP协议的三次
    的头像 发表于 03-23 15:57 1035次阅读
    <b class='flag-5'>TCP</b>建立连接概述及<b class='flag-5'>三次</b><b class='flag-5'>握手</b>、四<b class='flag-5'>次</b>挥手的流程

    TCP三次握手的理论知识

    关于TCP三次握手的理论知识,往上一搜一大片,本文就跳过理论,直接上手。Let’s go。 准备知识 抓一个TCP三次
    的头像 发表于 11-09 11:27 749次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>的理论知识

    说说TCP三次握手的过程?为什么是三次而不是两、四

    说说TCP三次握手的过程?为什么是三次而不是两、四T
    的头像 发表于 02-04 11:03 591次阅读

    简述TCP协议的三次握手机制

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在IP网络中进行数据传输。TCP协议的三次握手
    的头像 发表于 08-16 10:57 531次阅读