精华内容
下载资源
问答
  • 标准答案:防止失效的连接请求报文段被服务端接收,从而产生...假如建立连接只需两次握手,对于客户端来说并没有太大的变化。但仍然需要获得服务端的应答后才进入ESTABLISHED(建立)状态。而服务端在收到连接请求后...

    标准答案:防止失效的连接请求报文段被服务端接收,从而产生错误。

    什么意思呢?

     首先需要解释失效的连接请求是什么:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』连接请求!

    假如建立连接只需两次握手,对于客户端来说并没有太大的变化。但仍然需要获得服务端的应答后才进入ESTABLISHED(建立)状态。而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源!

    不知道解释清楚没有,欢迎讨论!

    展开全文
  • 动画:用动画给面试官解释 TCP 三次握手过程

    万次阅读 多人点赞 2019-10-12 07:55:38
    TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。 对于这部分掌握以及 TCP 的四次挥手,小鹿将会以动画的形式呈现给每个人,这样将复杂的知识简单...

    在这里插入图片描述
    作者 | 小鹿
    来源 | 公众号:小鹿动画学编程


    写在前边

    TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。

    对于这部分掌握以及 TCP 的四次挥手,小鹿将会以动画的形式呈现给每个人,这样将复杂的知识简单化,理解起来也容易了很多,尤其对于一个初学者来说。


    学习导图

    在这里插入图片描述

    一、TCP 是什么?

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

    我们知道了上述了解到了 TCP 的定义,通俗一点的讲,TCP 就是一个双方通信的一个规范标准(协议)。

    我们在学习 TCP 握手过程之前,首先必须了解 TCP 报文头部的一些标志信息,因为在 TCP 握手的过程中,会使用到这些报文信息,如果没有掌握这些信息,在学习握手过程中,整个人处于懵逼状态,也是为了能够深入 TCP 三次握手的原理。


    二、TCP 头部报文

    在这里插入图片描述

    2.1 source portdestination port

    两者分别为「源端口号」和「目的端口号」。源端口号就是指本地端口,目的端口就是远程端口。

    一个数据包(pocket)被解封装成数据段(segment)后就会涉及到连接上层协议的端口问题。

    可以这么理解,我们可以想象发送方很多的窗户,接收方也有很多的窗户,这些窗口都标有不同的端口号,源端口号和目的端口号就分别代表从哪个规定的串口发送到对方接收的窗口。不同的应用程度都有着不同的端口,之前网络分层的文章中有提到过。
    在这里插入图片描述

    扩展:应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口号, 在互联网上 socket 唯一标识每一个应用程序,源端口+源IP+目的端口+目的IP称为”套接字对“,一对套接字就是一个连接,一个客户端与服务器之间的连接。


    2.2 Sequence Numbe

    称为「序列号」。用于 TCP 通信过程中某一传输方向上字节流的每个字节的编号,为了确保数据通信的有序性,避免网络中乱序的问题。接收端根据这个编号进行确认,保证分割的数据段在原始数据包的位置。

    在这里插入图片描述
    再通俗一点的讲,每个字段在传送中用序列号来标记自己位置的,而这个字段就是用来完成双方传输中确保字段原始位置是按照传输顺序的。(发送方是数据是怎样一个顺序,到了接受方也要确保是这个顺序)

    PS:初始序列号由自己定,而后绪的序列号由对端的 ACK 决定:SN_x = ACK_y (x 的序列号 = y 发给 x 的 ACK),这里后边会讲到。


    2.3 Acknowledgment Numbe

    称为「确认序列号」。确认序列号是接收确认端所期望收到的下一序列号。确认序号应当是上次已成功收到数据字节序号加1,只有当标志位中的 ACK 标志为 1 时该确认序列号的字段才有效。主要用来解决不丢包的问题。

    若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。

    在这里,现在我们只需知道它的作用是什么,就是在数据传输的时候是一段一段的,都是由序列号进行标识的,所以说,接收端每接收一段,之后就想要的下一段的序列号就称为「确认序列号」。


    2.4 TCP Flag

    TCP 首部中有 6 个标志比特,它们中的多个可同时被设置为 1,主要是用于操控 TCP 的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN

    不要求初学者全部掌握,在这里只讲三个重点的标志:


    2.4.1 ACK

    这个标识可以理解为发送端发送数据到接收端,发送的时候 ACK 为 0,标识接收端还未应答,一旦接收端接收数据之后,就将 ACK 置为 1,发送端接收到之后,就知道了接收端已经接收了数据。
    在这里插入图片描述

    此标志表示「应答域有效」,就是说前面所说的TCP应答号将会包含在 TCP 数据包中;有两个取值:0 和 1,为 1 的时候表示应答域有效,反之为 0;


    2.4.2 SYN

    表示「同步序列号」,是 TCP 握手的发送的第一个数据包。

    用来建立 TCP 的连接。SYN 标志位和 ACK 标志位搭配使用,当连接请求的时候,SYN=1,ACK=0连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有 SYN 的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口。看下面动画:
    在这里插入图片描述

    2.4.3 FIN

    表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的 TCP 数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

    这个很好理解,就是说,发送端只剩最后的一段数据了,同时要告诉接收端后边没有数据可以接受了,所以用FIN标识一下,接收端看到这个FIN之后,哦!这是接受的最后的数据,接受完就关闭了。动画如下:
    在这里插入图片描述

    2.5 Window size

    称为滑动窗口大小。所说的滑动窗口,用来进行流量控制。


    3、为什么进行 TCP 三次握手?

    如果之前你不了解网络分层的话,建议看看写的文章。

    你真的懂网络分层协议吗?

    第一,为了确认双方的接收与发送能力是否正常。第二,指定自己的初始化序列号,为后面的可靠传送做准备。第三,如果是 https 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成到。

    如果你了解 UDP 的话,TCP 的出现正式弥补了 UDP 不可靠传输的缺点。但是 TCP 的诞生,也必然增加了连接的复杂性。


    4、TCP 三次握手过程?

    TCP 三次握手的过程掌握最重要的两点就是客户端和服务端状态的变化,另一个是三次握手过程标志信息的变化,那么掌握 TCP 的三次握手就简单多了。下面我们就以动画形式进行拆解三次握手过程。
    在这里插入图片描述

    • 初始状态:客户端处于 closed(关闭)状态,服务器处于 listen(监听) 状态。
      在这里插入图片描述
    • 第一次握手:客户端发送请求报文将 SYN = 1同步序列号和初始化序列号seq = x发送给服务端,发送完之后客户端处于SYN_Send状态。

    在这里插入图片描述

    • 第二次握手:服务端受到 SYN 请求报文之后,如果同意连接,会以自己的同步序列号SYN(服务端) = 1、初始化序列号 seq = y和确认序列号(期望下次收到的数据包)ack = x+ 1 以及确认号ACK = 1报文作为应答,服务器为SYN_Receive状态。

    在这里插入图片描述

    • 第三次握手: 客户端接收到服务端的 SYN + ACK之后,知道可以下次可以发送了下一序列的数据包了,然后发送同步序列号 ack = y + 1和数据包的序列号 seq = x + 1以及确认号ACK = 1确认包作为应答,客户端转为established状态。

    在这里插入图片描述

    5、为什么不是一次、二次握手?

    防止了服务器端的一直等待而浪费资源。

    为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。如果此时客户端发送的延迟的握手信息服务器收到,然后服务器进行响应,认为客户端要和它建立连接,此时客户端并没有这个意思,但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。这样,server 的很多资源就白白浪费掉了。


    ----------------------------------------------------------------------- 于2019/11/11 修改 ------------------------------------------------------------------
    主要对文章中存在的笔误和错误进行了修改,动画也进行了重新制作和修改,文章内容也进行的部分内容增加 —— 三次握手过程详细细节部分。再次感谢大家对小鹿文章的支持!

    下一篇:动画:用动画给女朋友讲解 TCP 四次分手过程


    福利:可以在我的公众号『小鹿动画学编程』,后台回复『资源』即可获取。

    ❤️ 不要忘记留下你学习的脚印 [点赞 + 收藏 + 评论]

    一些后台小伙伴问我平常如何学习的,学习资料哪里获取,我就不一一回复了!一般我都是通过看一些编程书籍和开源的社区进行自学,一些学习资料和电子书也分享到下边了,有需要的自取。

    编程在于永无止境的去学习,去学习前辈积累的经验,书籍就是最好的一种媒介方式,列出以下自己看过的优秀书籍,整理成了 PDF 版。

    • 前端:《javascript高级程序设计》《JavaScript 权威指南》《你不知道的JavaScript(上中下卷)》等;
    • java:《Effective Java》《Thinking in Java》《Java 编程思想》《java核心技术》等;
    • 算法:《大话数据结构》《算法图解》《算法导论》《编程之美》《数据结构与算法:C语言描述》等;
    • 其他相关计算机书籍;

    搜索我的公众号:「小鹿动画学编程」后台回复关键词

    • 回复「后台」,获取 java 等自学资料
    • 回复「前端」,获取前端等自学资料
    • 回复「电子书」获取一下书籍资料!

    动一动你的小手,点赞就完事了,每个人出一份力量(点赞 + 评论)就会让更多的学习者加入进来!非常感谢! ̄ω ̄=


    作者Info:

    【作者】:小鹿

    【原创公众号】:小鹿动画学编程。

    【简介】:和小鹿同学一起用动画的方式从零基础学编程,将 Web前端领域、数据结构与算法、网络原理等通俗易懂的呈献给小伙伴。先定个小目标,原创 1000 篇的动画技术文章,和各位小伙伴共同努力一起学习!公众号回复 “资料” 送一从零自学资料大礼包!

    【转载说明】:转载请说明出处,谢谢合作!~

    展开全文
  • 最近在准备秋招,复习到TCP三次握手的时候,总感觉描述不够,于是查阅各方资料,整理得出了这篇笔记,下面我逐一叙述: TCP是什么? TCP(Transmission Control Protocol),中文释义传输控制协议,是TCP/IP四层模型...

    TCP


    最近在准备秋招,复习到TCP三次握手的时候,总感觉描述不够,于是查阅各方资料,整理得出了这篇笔记,下面我逐一叙述:

    1. TCP是什么?
      TCP(Transmission Control Protocol),中文释义传输控制协议,是TCP/IP四层模型中位于传输层的网络协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义,是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议

    2. 为什么要进行TCP的三次握手?
      TCP的三次握手旨在决定客户端和服务器端各自均可进行收发报文,保证数据的传输没有问题

    3. TCP报文格式
      在这里插入图片描述
      在这里插入图片描述
      关于TCP的三次握手,需要我们知晓其中的几个部分:
      a. 序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。如一个报文段的序号为300,此报文段共有100字节,则下一个报文段的序号为400.所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志为0
      b.控制位:URG,ACK,PSH,RST,SYN,FIN,共6个,每一个标志位表示一个控制功能。
      URG:紧急指针标志,为1时表示紧急指针有效,为0时表示忽略紧急指针
      ACK:确认序号标志,为1时表示确认号有效,为0时表示报文中不含确认信息,忽略确认号字段
      PSH:push标志,为1时表示带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队
      RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求
      SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1
      FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本书数据流

    4. TCP三次握手
      明确上面的内容后,我们开始吧

    在这里插入图片描述
    三次握手的过程描述(依据上图)
    第一次握手:主机C发送位码SYN=1,ACK=0,随机产生Seq number = 123456的数据包到服务器,主机S,通过SYN=1可以知晓主机C要建立连接
    第二次握手:主机S收到请求后要确认联机信息,向C发送确认号,依据确认号的描述(指明下一个期待收到的字节序号),故确认号为 ACK Number = 主机C的Sqe + 1,同时发送SYN = 1,ACK = 1(标志确认号有效),随机产生Seq Number = 654321的数据包发送给C
    第三次握手:主机C收到后检查Ack Number是否正确,即第一次发送的seq number+1,以及位码ACK是否为1,若正确,主机C会再发送ACK Numbe r= 主机S的Seq + 1,ACK=1,主机S收到后确认Seq值与ACK=1则连接建立成功

    三次握手的作用:
    第一次握手:S只可以确认自己可以接收C发的报文段
    第二次握手:C可以确认S收到了自己发送的报文段,并且可以确认自己可以接收S发送的报文段
    第三次握手:S可以确认C收到了自己发送的报文段
    总结得就是:两方都确认了自己可以确保报文的收发没有问题,那么接下来就可以进行数据的传输了
    其实,用一句话描述TCP三次握手就是:C发送请求连接S确认,S也发送请求连接C确认

    展开全文
  • 简单了解三次握手原理

    千次阅读 2020-02-08 19:59:39
    (1)第一次握手: Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 (2)第二次握手: Server收到数据包后由标志位SYN=1知道Client请求建立...

    三握原理:

    在这里插入图片描述
    (1)第一次握手:
    Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
    (2)第二次握手:
    Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
    (3)第三次握手:
    Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

    为什么要用三次握手:

    假设客户端和服务端要通信:
    如果一次握手:
    客户端发出SYN后不知道服务器是否收到了请求
    如果二次握手:
    服务器收到客户端建立链接的请求后,发送一个确认(SYN+ACK)给客户端,但是服务器并不能确认客户端是否收到了确认信息。
    第三次握手:
    客户端收到服务器的确认信息后,也返回一个信息接收成功(ACK),服务器确定客户端收到了确认信息,然后就可以建立相互通信

    链接拆除(四次挥手简单了解)

    连接拆除:
    客户端:向服务器发送 FIN 报文段,等待服务器确认
    服务器:向客户端发送 ACK 报文段,确认其请求
    服务器:向客户端发送 FIN 报文段,等待客户端确认
    客户端:向服务器发送 ACK 报文段,等待一段时间后,结束

    握手标志含义

    PSH: 指示接收方应立即将数据交给上层
    ACK: 指示确认号字段有效
    RST: 指示不接受连接
    SYN: 用于建立连接
    FIN: 用于拆除连接

    展开全文
  • 介绍 TCP 连接三次握手?追问:为什么 TCP 握手需要三次? (借用别人的一张图) 简要回答: 主机A和服务器B之间基于TCP通信,第一次握手是主机A主动打开,向B发送SYN信息; 第二次握手是B收到A发来的STN信息之后...
  • 网络通信TCP协议三次握手

    千次阅读 2018-03-14 23:00:05
    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员...
  • namp的半连接扫描和全连接扫描

    千次阅读 2020-07-11 10:21:09
    只有tcp三次握手完整才会在服务器留下记录,所以我们可以省略第三次握手,同样可以达到扫描的目的,但是不会在服务器留下记录。 我们先使用向服务器指定端口发送SYN请求,如果收到服务器的SYN+ACK回复,即可判断此...
  • 4、socket中TCP的三次握手建立连接详解 5、socket中TCP的四次握手释放连接详解 6、一个例子 1、网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: ...
  • TCP/IP协议是互联网重要的基础协议,掌握该协议的原理对于我们理解数据的传输过程会有很大的帮助,首先来...数据在上层会被封装为PDU单元,在传输层会被封装为Segment(数据段),在网络层会被封装为Packet(包)...
  • python scapy的半连接端口扫描

    千次阅读 2019-08-25 14:14:30
    原理简述: 端口扫描常见的一般有以下两种 基于socket的connect全连接... connect全连接扫描,基于socket套接字的connect方法,它的参数是一个元组(ip, port),此扫描试图与每一个TCP端口进行“三次握手”通信。...
  • TCP是什么?具体的关于TCP是什么,我不打算详细的说了;...首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第层——Network层,ARP在第二层——Data Lin...
  • 由头上篇转载了一篇文章如何用Scapy写...,介绍了几种基于tcp协议扫描的端口扫描原理和实现的scapy代码,然而自己实践的时候,wireshark抓包发现基于tcp三次握手扫描方式,并没有真正建立起连接,于是便有了此篇博客。
  • 但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手; FIN 表示发送端已经达到数据末尾,也就是...
  • TCP/IP协议的三次握手及实现原理

    千次阅读 2017-02-09 21:00:39
     1、简述Socket,IP,TCP三次握手,HTTP协议(有助于理解、记忆和学习)  http://www.tuicool.com/articles/qyUzyir 一、TCP报文格式  TCP报文格式图:      上图中有几个字段需要重点介绍下:  ...
  • 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好地...
  • TCP协议的三次握手

    2018-05-13 18:23:59
    HTTP连接HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的...从建立连接到关闭连接的过程称为“一次连接”。1)在HTTP 1.0中,客户端的每次请求都要求建立一单独的...
  • TCP 三次握手和四次挥手的面试题

    千次阅读 2020-04-17 10:20:28
    序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一数据,就「累加」一该「数据字节数」的大小。用来解决网络包乱序问题。 确认应答号:指下一「期望」收到的数据的...
  • 这篇博文讲的不错~ ...TCP协议头部的格式 Source Port和...用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接
  • ICMP报文封装如下: 主要ICMP报文 ICMP报文主要分类,即差错报告报文、控制报文、请求/应答报文,如下图所示: 目的不可达(Destination Unreachable Message) 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0...
  • TCP协议提供可靠的数据传输连接三次握手用于建立连接,四次挥手用于断开连接三次握手: 第一次、建立连接时,客户端向服务器发送SYN包(syn=j),即握手信号,进入SYN_SEND状态,等待服务器的响应。 第二次...
  • TCP是什么? 具体的关于TCP是什么,我不打算详细的说了;...首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第层——Network层,ARP在第二层——Data
  • TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功...
  • 建立tcp连接需要几次握手?

    千次阅读 2019-09-18 11:38:26
    TCP三次握手过程 一个完整的 TCP连接的...很多的端口扫描技术是依靠 TCP三次握手来实现的,所以,下面对 TCP的三次握手过程进行详细的介绍。具体的握手过程描述如下(图4): (1)请求方向服务提供方提出连接请求。...
  • 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好的...
  • 转载:http://hi.baidu.com/xgdcisco/blog/item/60da65f70fd8145d342acc28.html;... TCP连接的状态图 TCP建立连接三次握手过程,以及关闭连接的四次握手过程 贴一个telnet建立连接,断开连接的使用
  • TCP三次握手的意义(目的)

    万次阅读 2017-07-22 18:32:24
    TCP三次握手的意义(目的)总结
  • TCP三次握手

    2018-09-25 13:57:45
    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) : 表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,340
精华内容 5,736
关键字:

半连接扫描三次握手