精华内容
下载资源
问答
  • TCP 三次握手 四次挥手

    TCP 三次握手 四次挥手

    展开全文
  • TCP三次握手四次挥手

    2019-02-21 14:46:37
  • TCP三次握手 四次挥手

    千次阅读 多人点赞 2017-08-19 16:52:25
    TCP三次握手 四次挥手预备知识TCP的标志位 SYN(请求建立连接) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) TCP是面向连接的字节流协议,是全双工的。三次握手例图: 第一次握手:客户端发送一个连接请求...

    TCP三次握手 四次挥手

    预备知识

    TCP的标志位

    • SYN(请求建立连接)
    • ACK(确认)
    • PSH(传送)
    • FIN(结束)
    • RST(重置)
    • URG(紧急)

    TCP是面向连接的字节流协议,是全双工的。

    三次握手

    例图:

    • 第一次握手:客户端发送一个连接请求,测试服务端是否可以正常通信(SYN位置为1)
    • 第二次握手:服务端确认客户端的连接请求,并且同时发送一个请求,测试客户端是否可以正常通信(SYN位置为1, ACK位置为1)
    • 第三次握手:客户端接受到服务端的确认(了解到服务器可以正常通信),之后发送一个ACK,告诉服务器我可以正常通信(ACK位置为1)

    如果服务器没有收到客服端的ACK,会超时重传自己的SYN请求,一直到收到服务端的ACK为止

    为什么一定是三次握手呢?

    考虑两次握手:客户端发送一个连接请求,服务端接受到连接请求,发送一个确认,此时服务端已经确认自己有接受报文的能力,认为连接已经建立,所以开始为已建立的连接分配资源,如果服务端发送的确认丢失,客户端就无从知道连接已经建立。如果存在大量这种情况,就有可能会造成服务器崩溃。

    为什么不是四次呢?三次都已经够了,为什么还要多加一次

    四次挥手

    例图:

    • 第一次挥手:客户端的数据到达尾部,向服务端发送请求断开(FIN位置1)

      相当于我这边数据传送完了,准备断开连接了

    • 第二次挥手:TCP的连接是全双工的双向连接,关闭必须从两边关闭,服务端收到FIN标志位后,并不会立即向客服端发送FIN标志位,而是发送一个ACK的应答信息

      相当于:你请求关闭的请求我已经收到,但我可能还有数据没有接受完(数据传送需要时间),你再等下,等我数据传输完成了我就告诉你

    • 第三次挥手:服务端接受数据完成,向服务端发送一个FIN=1

    • 第四次挥手:客户端接收到服务端发送来的断开连接请求,发送一个确认。并把自己设置成TIME_WAIT状态,并启动计时器

      如果服务端没有收到ACK, 服务端的TCP的定时器到达后,会要求客户端重新发送ACK, 服务端收到ACK就断开连接,当客户端等待2MSL(2倍报文最大生存时间)后,没有收到服务端的重传请求后,就知道服务端已经接收到ACK,此时关闭自己的连接。

    参考博客:

    三次握手,四次挥手

    为什么一定是三次握手

    展开全文
  • 四次挥手4.参考文章 1.前言 网络通信的实体是不同主机之间进程的通信,也就是端到端通信,其过程借助于TCP或者UDP协议,基于端口。 倘若利用TCP协议,则传输前有三次握手,传输后有三次挥手,是一个可靠传输。 倘若...

    1.前言

    网络通信的实体是不同主机之间进程的通信,也就是端到端通信,其过程借助于TCP或者UDP协议,基于端口。
    倘若利用TCP协议,则传输前有三次握手,传输后有三次挥手,是一个可靠传输。
    倘若利用UDP协议,传输前不需要建立连接,对方收到后也不需要发送确认,是一个不可靠的传输,但是胜在消耗资源少,速度快。

    2.三次握手

    首先我们需要知道为什么要三次握手而不是两次。原因是为了防止之前传输过的请求连接的数据包延时到达服务器后,服务器再次创建新的连接而导致的错误。
    如果我们只使用二次握手,假设有这么一种情况,我们先发了一个syn包,这个包因为某种原因被阻塞到网络中,这时候我们又发送了一个syn包,这次收到了对方的ack+syn包,tcp连接已经建立。过了一会儿之前阻塞的syn包发送到了对方主机,对方主机又返回了一个ack+syn包,这时候又建立了一个tcp连接。但我们是只想建立一个tcp连接的,这时候出现了两个,浪费了资源。为了解决这种情况,因此就出现了tcp三次握手。
    假设我们使用tcp三次握手,就可以避免这个情况,因为即使之前被阻塞的包被发送到了服务端,服务端返回了ack+syn包,但只要我们不发送最后的第三次握手也就是ack包,就不会建立连接,也就不会有资源的浪费,这就是tcp连接为什么是三次的原因。
    在这里插入图片描述

    3.四次挥手

    在这里插入图片描述

    通过四次挥手来结束tcp连接,也是有其原因的,我的理解是这个样子的:

    1. 第一次客户端发送fin包,告诉服务端,我不会再给你传送数据了并且我想要断开连接。
    2. 第二次服务端发送ack包,告诉客户端,这是我这边剩余要发送的数据,等发送完在关。
    3. 第三次服务端发送fin+ack包,告诉客户端,我这边发送结束,可以中断连接了。
    4. 第四次客户端发送ack包,告诉服务端,好的。

    4.参考文章

    两张动图-彻底明白TCP的三次握手与四次挥手

    展开全文
  • tcp三次握手四次挥手

    2020-08-26 10:10:12
    tcp三次握手四次挥手 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到syn包,必须...
  • Tcp三次握手四次挥手

    2019-09-09 15:14:15
    三次握手 第一次握手:客户端发起请求(你可以听到吗?) 第二次握手:服务器回应(我可以听到,你能听到吗?...四次挥手 第一次挥手:客户端发送关闭请求(我要挂电话了?) 第二次挥手:服务器发送收到关闭...
  • TCP协议中的三次握手四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次挥手三次握手,建立连接 首先Client发送连接请求报文,Server端接收连接后回复ACK报文,并为这次连接分配资源。Client...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,512
精华内容 4,604
关键字:

tcp三次握手四次挥手