精华内容
下载资源
问答
  • tcp为什么要三次握手
    万次阅读
    2018-04-26 09:09:37

    Tcp为什么是三次握手,为什么是四次挥手
    (1) 三次握手的原因
    因为信道是不可靠的,可能存在延时或者丢包,而三次是满足可靠传输的最小次数。如果只有两次,假设主机A发送的第一个请求包延时,主机A在等待一段时间后又重新发送一个请求包,完成数据连接并断开。但是这时上次发送的请求包才到达主机B,这时主机B认为又是一次连接,因此发送一个请求包给A,但A并没有发出新的请求,因此丢失了该数据包,最后B一直等待A发送数据,浪费了资源。除此之外我认为三次握手更加安全,加大了攻击的难度。如果是两次,一个发送,一个应答,那么攻击者可以采用IP欺骗,发动SYN洪水攻击,并且服务端还都是ESTABLISHED状态,不能进行防御,对于三次握手可以限制半连接的数量来达到一个防御的作用
    (2) 四次挥手的原因
    Tcp通信是一种全双工的通信,可以进行半关闭(与半打开的区别:半打开是连接后的客户端和服务端有一端异常关闭了),所谓半关闭是指可以之关闭从A到B的方向,而B到A的方向还可以继续传输,因此客户端和服务器端分别进行关闭

    更多相关内容
  • TCP为什么要三次握手

    千次阅读 2020-09-24 11:26:23
    什么TCP? 首先来说 TCP(Transmission Control Protocol,传输控制协议)是一个面向连接的、可靠的、基于字节流的传输层协议。从它的概念中我们可以看出 TCP个特点:面向连接、可靠性和面向字节流。 面向...

    什么是 TCP?

    首先来说 TCP(Transmission Control Protocol,传输控制协议)是一个面向连接的、可靠的、基于字节流的传输层协议。从它的概念中我们可以看出 TCP 的三个特点:面向连接、可靠性和面向字节流

    面向连接:是指 TCP 是面向客户端和服务器端连接的通讯协议,使用它可以将客户端和服务器端进行连接。

    可靠性:是指无论网络环境多差,TCP 都可以保证信息一定能够传递到接收端。

    TCP 之所以可以保证可靠性主要得益于两个方面,一个是“状态性”,另一个是“可控制性”。所谓状态性是指 TCP 会记录信息的发送状态,例如,哪些数据收到了、哪些数据没收到等状态信息都会被记录;可控制性是指 TCP 会根据状态情况控制自己的行为,比如当 TCP 意识到丢包了就会控制重发此包,这样就实现了 TCP 的可靠性。

    面向字节流:是指 TCP 是以字节流的方式进行数据传输的。

    小贴士:TCP 之所以被广泛应用,首先是因为它是一个标准化的协议,TCP 的标准协议就是由 RFC 793 定义的,它已经有了 30 多年的历史,并且已经被多次更新。RFC(Request For Comments)是 IETF(Internet Engineering Task Force)的正式文档。IETF 是一家制定互联网标准的组织,它制定了 Internet(互联网)的整体协议体系,凡是经过 IETF 评审认可的标准都会被发布为带编号的 RFC 的文档。

    TCP 定义的大致意思是,用于保证可靠性和流控制机制的信息,包括 Socket、序列号及窗口大小被称为连接。

    其中,Socket 是由 IP 地址加端口号组成的,序列号是用来解决乱序问题的,而窗口大小则是用来做流量控制的。

    接下来我们来看 TCP 三次握手的执行流程,如下图所示:

    关键字说明:

    • SYN(Synchronize Sequence Numbers),同步序列编号;

    • ACK(Acknowledge Character),确认字符;

    • SEQ(Sequence Number),序列号。

    TCP 的执行流程如下:

    • 最开始时客户端和服务端都处于 CLOSED 状态,然后服务端先主动监听某个端口,此时服务器端就变成了 LISTEN(监听)状态;

    • 然后客户端主动发起连接,发送 SYN(同步序列编号),此时客户端就变成了 SYN-SENT 状态;

    • 服务端接收到信息之后返回 SYN 和 ACK 至客户端,此时服务器端就变成了 SYN-REVD 状态;

    • 客户端接收到消息之后,再发送 ACK 至服务器端,此时客户端就变成了 ESTABLISHED(已确认)状态,服务端收到 ACK 之后,也变成了 ESTABLISHED 状态,此时连接工作就执行完了。

    为什么 TCP 需要三次握手?

    原因一:防止重复连接:三次握手的主要原因是为了防止旧的重复连接引起连接混乱问题

    比如在网络状况比较复杂或者网络状况比较差的情况下,发送方可能会连续发送多次建立连接的请求。如果 TCP 握手的次数只有两次,那么接收方只能选择接受请求或者拒绝接受请求,但它并不清楚这次的请求是正常的请求,还是由于网络环境问题而导致的过期请求,如果是过期请求的话就会造成错误的连接。

    所以如果 TCP 是三次握手的话,那么客户端在接收到服务器端 SEQ+1 的消息之后,就可以判断当前的连接是否为历史连接,如果判断为历史连接的话就会发送终止报文(RST)给服务器端终止连接;如果判断当前连接不是历史连接的话就会发送指令给服务器端来建立连接。

    原因二:同步初始化序列化

    通过上面的概念我们知道 TCP 的一个重要特征就是可靠性,而 TCP 为了保证在不稳定的网络环境中构建一个稳定的数据连接,它就需要一个“序列号”字段来保证自己的稳定性,而这个序列号的作用就是防止数据包重复发送,以及有效的解决数据包接收时顺序颠倒的问题。

    那么在建立 TCP 连接时就需要同步初始化一个序列号来保证 TCP 的稳定性,因此它需要执行以下过程:

    • 首先客户端发送一个携带了初始序列号的 SYN 报文给服务器端;

    • 服务端接收到消息之后会回复一个 ACK 的应答报文,表示客户端的 SYN 报文已被服务端成功接收了;

    • 而客户端收到消息之后也会发送一个 ACK 给服务端,服务器端拿到这个消息之后,我们就可以得到一个可靠的初始化序列号了。

    而如果是两次握手的话,就无法进行序列号的确认工作了,因此也就无法得到一个可靠的序列号了,所以 TCP 连接至少需要三次握手。

    以上两种原因就是 TCP 连接为什么需要三次握手的主要原因,当然 TCP 连接还可以四次握手,甚至是五次握手,也能实现 TCP 连接的稳定性,但三次握手是最节省资源的连接方式,因此 TCP 连接应该为三次握手。

    知识扩展

    UDP 介绍

    UDP(User Data Protocol,用户数据报协议)是无连接的、简单的、面向数据报的传输层协议。也就是 UDP 在发送数据之前,无须建立客户端与服务端的连接,直接发送消息即可。

    UDP 的协议头有 8 个字节(64 位),如下图所示:

     UDP 的协议头

    其中源端口和目标端口是指记录发送方和接收方端口;UDP 包长度是指 UDP 头部加上 UDP 数据的总长度;UDP 校验和用于效验 UDP 的内容是否可靠。

    UDP 常见的使用场景有:语音、视频等多媒体通信、DNS(域名转化)、TFTP 等。

    TCP VS UDP

    TCP 和 UDP 的区别主要体现在以下 7 个方面:

    • 可靠性,TCP 有“状态性”和“可控制性”可以保证消息不重复、按顺序、不丢失的发送和接收,而 UDP 则不能保证消息的可靠性;

    • 连接,TCP 是面向连接的传输层协议,传输数据前先要建立连接,而 UDP 发送数据之前无需建立连接;

    • 服务对象,TCP 服务的对象为一对一的双端应用,而 UDP 可以应用于一对一、一对多和多对多的通信场景;

    • 效率,TCP 的传输效率较低,而 UDP 的传输效率较高;

    • 流量控制,TCP 有滑动窗口可以用来控制流量,而 UDP 则不具备流量控制的能力;

    • 报文,TCP 是面向字节流的传输层协议,而 UDP 是面向报文的传输层协议;

    • 应用场景,TCP 的应用场景是对消息准确性和顺序要求较高的场景,而 UDP 则是应用于对通信效率较高、准确性要求相对较低的场景。

    TCP 和 UDP 的使用场景如下图所示:

     

    展开全文
  • TCP为什么要三次握手

    千次阅读 热门讨论 2018-08-01 19:26:23
    经常有人会问tcp建立连接时为什么要三次握手,两次行不行呢?不行,那可能会死人的,不信我讲个故事。 北宋末年,统治阶级奢靡腐败,苛捐杂税压得人们喘不过气来。一时间盗贼四起,纷纷占山为王。盗贼们时不时...

    经常有人会问tcp建立连接时为什么要三次握手,两次行不行呢?不行,那可能会死人的,不信我讲个故事。

    北宋末年,统治阶级奢靡腐败,苛捐杂税压得人们喘不过气来。一时间盗贼四起,纷纷占山为王。盗贼们时不时打家劫舍,骚扰村民,连官府都不敢轻举妄动。

    后来上任了一位较有作为的县官,不忍看到百姓受苦,决心围剿盗贼。但是盗贼在山头,易守难攻,他们决定兵分两路,分为东边军和西边军,从东边和西边夹击盗贼,一举拿下匪巢。

    可是山头太大了,县武装力量也不是太强,必须做到东边军和西边军两边同时进攻才有很大胜算,任何一方贸然进攻都会有全军覆没的危险。可是如何让驻扎在山头东边和西边的军队同时进攻呢?

    这时军中一名高个小将杜乾说道,“这还不容易,到了某个时刻,让东头发一封飞鸽传书给西头,告知他们,东头已经准备好了,要发起进攻请求。大约半个时辰后,东头就可以发起进攻。”

    另一名矮胖小将王颖急忙道,“你怎么知道这封请求进攻的飞鸽传书会安全到达西头,万一途中飞鸽迷路了或被贼寇拦截了怎么办,又或者安全达到,但是西头军队压根还没有准备好进攻,总之单方面发起进攻会失败的。”

    杜乾眨了眨眼,又说道,“那就等到西头给东头的确认信之后再发起进攻,不等到西头的确认信绝不发起进攻。”

    矮胖小将王颖,顿了顿,又道,“如此,东头军队是准备好进攻了,西头军队却未必敢发起进攻。”

    杜乾一脸疑惑:”为何?“

    此时军师吴亮摇着鹅毛扇,哈哈大笑道,“这位王颖将军果然心思缜密。东头发起飞鸽传书,告知西头一切准备就绪,可以发起进攻了。如果东头收到了西头的回复,东头发起了进攻,西头正好一起响应,准能打得贼寇落花流水。万一西头的回复信丢失,东头的军队等不到西头的回复,不知道是请求信根本没有送达到西头,还是送达到了西头后,西头给他们的回复信在路上丢失了,总之他们是不会单方面发起进攻的。而西头军队对他们的回复信是否安全到达东头,他们是不知道的。如果真的不幸丢失了,西头单方面发起了进攻,而东头又不知道,岂不失败了。所以他们怎敢轻举妄动呢?”

    大家听后,纷纷对军师点头赞同。那杜乾又道,“究竟如何能让西头放心地发起进攻,确保万无一失?”

    军师吴亮又接着说,“收到西头回复信之后,可以再写一封确认信知会西头那边。西头收到这封确认的确认信之后,就知道东头已经知道西头作好进攻准备了。这时候西头就可以放心发起进攻了。”

    “是否需要再次收到西头的信,东头才发起进攻呢?” 杜乾又说道。

    只见王颖微微一笑,说道,“这个担心是多余的了。西头第二次收到东头的消息,证明东头也已经知道西头那边准备好了,而东头是主动发起进攻请求的,肯定是准备好了的。也就是说,东头准备好了,西头知道东头准备好了,最重要的是西头也知道东头知道西头准备好了所以双方可以放心发起进攻了。” 如下图所示:

    军师会心的点了点头,说道,“如此,你们开始部署吧,誓要做到夹击成功,则贼寇可破矣。”

    故事讲完了。可是TCP三次握手和上面的故事有区别:TCP发起建立连接的一方不会一直等待对方的回复,如果超时,他再次发起这个请求直至放弃,然后释放资源。假设最后一次的请求送达到了对方B,而此时请求方A已经释放连接,而B是不知道的。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为A发出了一次新的连接请求。于是又向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。 由于现在A已经释放连接,因此不会理会B的确认,也不会向B发送数据。 但B却以为新的运输连接已经建立了,并一直等待A发来数据。 B的许多资源就这样浪费了。采用三次握手的方法可以防止上述异常现象的发生。

     

    欢迎加入QQ群 858791125 讨论skynet,游戏后台开发,lua脚本语言等问题。

     

    展开全文
  • tcp 为什么要三次握手 两次不行吗

    千次阅读 2022-03-03 15:44:17
  • TCP建立连接需要三次握手是我们都知道的,那么为什么要是三次握手,而不是一次、两次或者四次、五次、六次呢? 为什么三次握手 根据 RFC793 ,三次握手的目的是为了旧的连接请求造成混乱。 The principle reason ...
  • tcp 为什么要三次握手,两次不行吗?为什么?

    万次阅读 多人点赞 2019-06-28 22:54:54
    次握手只能保证单向连接是畅通的。 Step1 A -> B : 你好,B。 Step2 A <- B: 收到。你好,A。 这样的两次握手过程,A 向B 打招呼得到了回应,即 A 向 B 发送数据,B 是可以收到的。 但是 B 向 A 打招呼,...
  • TCP为什么三次握手

    千次阅读 2022-04-06 15:14:27
    tcp三次握手和四次挥手简单记录
  • TCP 为什么需要三次握手

    千次阅读 2020-09-08 00:30:34
    TCP 协议是我们每天都在使用的一个网络...因此可以理解,你之所以能看到这个网页就是得益于 TCP 协议的功劳 什么TCPTCP(Transmission Control Protocol,传输控制协议)是一个面向连接的、可靠的、基于字
  • TCP连接为什么要三次握手

    千次阅读 2021-08-23 18:35:03
    1、第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。 2、换个易于理解的视角来看为什么要 3 次握手。 客户端和服务端通信前要进行连接,“3次握手”的作用就是双方都能明确自己和对方的收...
  • TCP为什么需要三次握手四次挥手

    千次阅读 2021-04-08 16:50:28
    TCP为什么需要三次握手四次挥手 三次握手 TCP是通过程序实现的,可靠的,面向连接的协议。而程序是严谨的,每一次建立连接都会进行“三次握手”这样的步骤。 建立连接的目的是为了可靠的数据传输。所以需要保证...
  • TCP为什么需要三次握手

    千次阅读 2020-06-15 15:33:58
    我们常常听到TCP三次握手,都知道TCP是面向连接的、可靠的协议,而UDP是无连接的、不可靠的。具体过程是怎么样的呢? TCP 可靠性: 接收方收到的数据是完整, 有序, 无差错的。 UDP 不可靠性: 接收方接收到的数据...
  • 不幸的是, 这种解释是不准确的, TCP 采用三次握手的原因其实非常简单, 远没有大部分博客所描述的那样云山雾绕。 这里先给出结论:   为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以...
  • 【计算机网络】TCP为什么需要3次握手

    千次阅读 多人点赞 2022-06-19 13:55:38
    大致的流程想必大家并不陌生,我们先具体分析一下它这三次传输 首部都包含了哪些信息。我们先来认识一下TCP报文段的首部都有哪些字段是需要用到的 seq:序号➢ TCP会给每一个字节都编上一个序号,而序号字段的值则是...
  • TCP三次握手过程,简单来讲如下: 1.客户端发起第一次握手(SYN=1, seq=x) 2.服务器端发起第二次握手(SYN=1, seq=y, ACKnum=x+1) 3.客户端发起第三次握手(ACKnum=y+1) 但为什么要三次握手,而不是两次或者四次? ...
  • TCP三次握手的过程 TCP连接释放的过程: 二: 1。为什么两次就建立连接还要三次握手呢?这主要是为了防止已失效的连接请求报文又突然传递服务器。 所谓“防止已失效的连接请求报文又突然传递服务器。”是...
  • TCP三次握手和四次挥手不管是在开发还是面试中都是一个非常重要的知识点,它是我们优化web程序性能的基础。欢迎学习,一起进步 文章目录一.TCP简介二.TCP数据报结构三.TCP的三次握手四.TCP的四次挥手 一.TCP简介 TCP...
  • TCP 为什么三次握手而不是两次握手(正解版)

    万次阅读 多人点赞 2018-09-19 19:10:58
    TCP 采用三次握手的原因其实非常简单, 远没有大部分博客所描述的那样云山雾绕。
  • 方便描述,以客户端主动向服务端发起TCP连接例。 建立连接的过程就是通信双方在不确定的网络环境中建立信任的过程。 这个信任包括四个相信: 一、客户端相信自己给服务端发送的消息服务端能接收到; 二、客户端...
  • TCP为什么三次握手和四次挥手

    万次阅读 多人点赞 2018-08-10 11:17:13
    为什么建立连接是三次握手断开连接是四次挥手? 三次握手的流程和四次挥手的流程是什么? 三次握手与四次回收分别对应TCP连接与断开过程 tcp报文格式 标志位含义 ACK:确认序号有效。 SYN:发起一个新连接。 ...
  • 客户端发送的第一个请求连接并且没有丢失,只是因为在网络中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接...
  • TCP三次握手是为了保证数据的可靠传输的,TCP 是全双工的协议,也就是说通过 TCP 协议发送的协议是得到回复的,一来一回,所以说对于需要建立 TCP 连接的两端来说,每一端都需要进行一来一回的确认,这就进行...
  • TCP三次握手与四次挥手.pdf
  • 三次握手为什么不是两次或者四五六次握手呢?为什么需要四次挥手四次挥手那为什么是两个MSL呢:为什么不是三次挥手呢?什么是SYN Flood(洪水) 攻击半连接队列和全连接队列、SYN TimeoutSYN Flood攻击防御SYN Flood...
  • 建立TCP连接为什么要3次握手

    千次阅读 2021-01-07 17:46:21
    TCP三次握手的目的是建立可靠的通信信道。通信,简单来说就是数据的发送和接收。而三次握手最主要的目的就是双方确认自己与对方的发送和接收是正常的。 如下图所示,下⾯的两个机器⼈通过3次握手确定了对方能正确...
  • tcp为什么要三次握手,而不能二次握手?

    万次阅读 多人点赞 2013-11-07 11:52:37
    1、为什么TCP连接需要三次握手,而不是二次? 谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长...
  • 20170330_请说出TCP连接为什么要采用三次握手两次不行么?
  • 为什么要三次握手三次握手做了什么? 先看三次握手过程: 简而言之,三次握手完成最重要的工作就是确定对方可以正常接收发送消息,并对初始的序列号进行一个协商。如上图,A发出了x,B收到了x并向A传达我下...
  • 文章目录TCP介绍三次握手四次挥手滑动窗口拥塞避免算法 TCP介绍 三次握手 四次挥手

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 176,422
精华内容 70,568
关键字:

tcp为什么要三次握手