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

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

3天内不再提示

TCP连接的建立与中止

麦辣鸡腿堡 来源:盼盼编程 作者:盼盼编程 2023-10-08 16:52 次阅读

TCP三次握手其实,网络上的传输是没有连接的, TCP 是一样的 TCP 所谓的 “连接”,其实只不过是在通信的双方维护一个“连接状态”,让它看上去好像有连接一样 所以, TCP 的状态变换是非常重要的 。

TCP 连接的建立可以简单地称为三次握手,而连接的中止则可以称为四次挥手。

建立连接 TCP/IP 协议中, TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送 SYN 包到服务器,并进入 SYN_SEND 状态,等待服务器确认。

第二次握手:服务器收到 SYN 包,必须确认客户的 SYN ,同时自己也发送一个 SYN 包,即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态。

第三次握手 :客户端收到服务器的 SYN + ACK 包,向服务器发送确认包 ACK,此包发送完毕,客户端和服务器进入 ESTABLISHE 态。

完成 三次握手,客户端与服务器开始传送数据,也就是 ESTABLISHED 状态。

TCP四次挥手

TCP的连接断开

TCP 一个特别的概念叫作半关闭,这个概念是说, TCP 的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。

客户机给服务器 FIN 的 TCP 报文,然后服务器返回给客户端一个确认 ACK 报文,并且发送一个FIN 报文,当客户机回复 ACK 报文后( 四次握手),连接就结束了。

在建立连接的时候,通信的双方要互相确认对方的最大报文长度( MSS ),以便通信。

一般这个 SYN 长度是 MTU 减去固定 IP 首部和 TCP 首部长度。对于一个以太网,一般可以达 1460 Byte 。当然如果对于非本地的 IP ,这个 MSS 可能就只有 536 Byte ,而且,如果中间的传输网络的 MSS 更加的小的话,这个值还会变得更小。

为什么建连接要三次握手,断连接需要四次挥手?

对于建连接的三次握手,主要是要初始化 Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的 Sequence Numbe,所以叫 SYN 。

这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输问题而乱序( TCP 会用这个序号来拼接数据)。

对于四次挥手,其实仔细看则是两次,因为 TCP 是全双工的,所以,发送方和接收方都需要 FIN 和 ACK。

只不过,有一方是被动的,所以看上去就成了所谓的四次挥手 。如果两边同时断连接,那就会就进入到 CLOSING 状态,接着就是TIME_WAIT 状态。

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

    关注

    12

    文章

    9017

    浏览量

    85182
  • 网络
    +关注

    关注

    14

    文章

    7514

    浏览量

    88625
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1349

    浏览量

    78985
  • 客户端
    +关注

    关注

    1

    文章

    290

    浏览量

    16661
收藏 人收藏

    评论

    相关推荐

    TCP和UDP建立连接的差异和可靠性的差异

    TCP 建立连接需要经过三次握手,同时 TCP 断开连接需要经过四次挥手,这也表示 TCP 是一
    发表于 09-02 16:10 755次阅读

    如何标识一个TCP连接

    tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发
    的头像 发表于 10-10 10:33 2890次阅读

    STM32H7+FREERTOS+LWIP建立TCP连接连接不稳定怎么解决?

    利用ST的Demo建立TCP连接,但是当建立TCP连接超过4个时,
    发表于 04-25 06:05

    为什么建立TCP连接有时成功有时失败?

    时开发板自带的里程改的,TCP这部分基本没有改,只是增加了自己的应用进去。首次使用以太网接口,还不太清楚建立连接的机理,有了解这块的朋友吗,请问建立
    发表于 09-19 04:36

    CH9121配置成TCP Client/Server,无法和电脑建立TCP连接怎么解决?

    9121配置成TCP Client/Server,无法和电脑建立TCP连接
    发表于 10-12 08:18

    建立TCP/IP连接后可以发送json数据吗?

    建立TCP/IP连接后,可以发送json数据吗?
    发表于 10-18 06:05

    建立TCP/IP连接之后可以发送json的数据吗?

    建立TCP/IP连接之后,可以发送json的数据吗?​
    发表于 10-20 06:02

    TCP连接建立与终止

    学习TCP-IP的很好的书。TCP-IP详解卷1。
    发表于 05-10 15:44 0次下载

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

    所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接
    的头像 发表于 04-16 11:43 1w次阅读
    大神告诉你<b class='flag-5'>TCP</b><b class='flag-5'>建立</b><b class='flag-5'>连接</b>为什么是三次握手

    TCP通信通过网络调试助手与S7-1200建立TCP连接

    S7-1200 V4.5 版本开始支持网络视图组态开放式用户通信连接,不需要在程序中调用 TCON 等建立连接指令,只需要调用发送接收指令即可实现数据的收发。下面以 TCP 通信为例,
    的头像 发表于 07-06 15:39 1.1w次阅读

    要是没有一端进行监听是否可以建立TCP连接呢?

    TCP 网络通信过程中,我们都是先有 server 端调用 listen 监听某个端口号,然后 client 向 server 发起连接请求,最终建立连接
    的头像 发表于 11-16 17:42 2130次阅读
    要是没有一端进行监听是否可以<b class='flag-5'>建立</b>起<b class='flag-5'>TCP</b><b class='flag-5'>连接</b>呢?

    如何使用Netcat命令建立和测试TCP和UDP连接

    Netcat或nc是一个命令行程序,它使用TCP或UDP协议通过网络连接读取和写入数据。
    的头像 发表于 12-12 17:39 7488次阅读

    什么是Socket连接?Socket与TCP连接的关系

    主机 A 的应用程序必须通过 Socket 建立连接才能与主机B的应用程序通信,而建立 Socket 连接需要底层 TCP/IP 协议来
    发表于 03-31 15:10 1018次阅读

    TCP连接建立中的异常

        建连接时SYN超时问题 如果 server 端因为某种情况没有收到 client 回来的 ACK,那么,这个连接处还处于一个未建立的状态。于是,server端如果在一定时间内没有收到,则
    的头像 发表于 10-08 17:01 765次阅读

    TCP的长连接和短连接

    TCP在真正开始进行数据传输之前,Server 和 Client 之间必须建立一个连接。当数据传输完成后,双方不再需要这个连接时,就可以释放这个连接
    的头像 发表于 11-13 10:46 982次阅读