首页 > 其他分享 >八股文-TCP的三次握手

八股文-TCP的三次握手

时间:2023-11-15 23:32:47浏览次数:21  
标签:八股文 ACK 握手 SYN TCP 服务器 连接 客户端

TCP协议是一种面向连接、可靠传输的协议,而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息,确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。

tcp.jpg

漫画TCP的三次握手

TCP连接的建立采用了三次握手的机制,确保通信双方都能够正常收发数据。我们通过漫画的形式示例下: -2023-11-04-2144b30e777bc73a1a2b.png

第一次握手(SYN)

连接的发起方是客户端,它向服务器发起连接请求。这个过程称为“第一次握手”;

1. 客户端发送SYN(同步序列号)标志的数据包给服务器。

客户端希望建立连接,于是发送一个包含SYN标志的数据包。这个包中还包含一个随机生成的序列号(ISN,Initial Sequence Number),用于后续数据的顺序传输。

2. 客户端进入SYN-SENT状态。

客户端发送完SYN后,进入SYN-SENT状态,等待服务器的响应。

第二次握手(SYN + ACK)

服务器收到客户端的SYN后,决定是否接受连接请求。如果服务器愿意接受,就会回应一个包含SYN/ACK标志的数据包;

1. 服务器发送SYN/ACK标志的数据包给客户端。

服务器接收到客户端的SYN后,向客户端发送一个包含SYN/ACK标志的数据包,表示已收到连接请求,并同样包含一个随机生成的序列号。

2. 服务器进入SYN-RECEIVED状态。

服务器发送完SYN/ACK后,进入SYN-RECEIVED状态,等待客户端的最后确认。

第三次握手(ACK)

客户端收到服务器的SYN/ACK后,决定是否接受连接。如果接受,客户端会发送一个带有ACK标志的数据包;

1. 客户端发送ACK标志的数据包给服务器。

客户端收到服务器的SYN/ACK后,向服务器发送一个带有ACK标志的数据包,表示连接建立成功。

2. 客户端进入ESTABLISHED状态。

客户端发送完ACK后,进入ESTABLISHED状态,连接建立成功。此时,服务器也接收到了客户端的确认,进入ESTABLISHED状态。

至此,三次握手完成,连接建立成功,双方可以进行正常的数据传输了。

详细图示如下:

tcp.png

为什么是三次握手?

  • 确保双方都具备通信能力

第一次握手: 服务端可以确认客户端的发送能力,自己的接收能力是正常的;

第二次握手: 客户端确认服务端的发送能力,自己的接收能力是正常的;服务端可以确认自己的发送能力是正常的;

第三次握手: 服务端确认客户端的接收能力是正常的;

  • 防止失效的连接请求被误认为是新连接

如果只有两次握手,会出现以下问题:

  1. 客户端发送连接请求(SYN)。
  2. 服务器收到请求后,发送确认(ACK)。
  3. 客户端在接收到确认前就突然宕机或丢失数据包。

此时,服务器无法知道是因为连接成功而没有收到客户端的确认,还是客户端的连接请求根本没有到达。如果客户端重新启动并发送一个新的连接请求,而这个新请求的序列号与旧请求一致,服务器可能会误认为是同一个连接请求,导致连接的混乱。

总结

通过三次握手,TCP协议在连接建立阶段建立了双方的信任,确保了后续数据传输的可靠性和有序性。这个过程是TCP协议中非常重要的一部分,也是网络通信中的基石之一。

标签:八股文,ACK,握手,SYN,TCP,服务器,连接,客户端
From: https://blog.51cto.com/xiuji/8408881

相关文章

  • Chen Shuo's Practical Network Programming - TTCP Lecture代码注释
    下面是C语言版本的TTCP,主要注释的是voidreceive(constOptions&opt);函数,负责在服务器接收客户端发送的数据://muduo/examples/ace/ttcp/ttcp_blocking.cc#include...//接受新的TCP连接staticintacceptOrDie(uint16_tport){...}//完整的写N个字节staticint......
  • frps: 2023/11/15 10:49:24 http: Accept error: accept tcp [::]:7650: accept4: too
    0.错误信息表明frps服务在接受传入连接时遇到了问题,特别是与端口7750相关的错误,具体错误为"accepttcp[::]:7750:accept4:toomanyopenfiles",意味着打开文件数目过多。这种错误通常发生在系统达到文件描述符的打开数目限制时。在类Unix操作系统中,每个进程都有同时可以......
  • 以太网通信控制板-B2-控制板作为多路TCP客户端和电脑TCP服务器通信(连接路由器或者交
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明如果......
  • TCPIP 协议族
    TCP/IP协议族通常我说TCP/IP是指TCP/IP协议族。它是基于TCP和IP这两个最初的协议之上的不同的通信协议的大集合。例如:http、https、ftp、icmp、arp、rarp、smtp(简单邮件传输协议)一个网络请求是怎么传输的?我们拿访问浏览器举个栗子,如图所示:TCP、UDP有什么区别?各有......
  • 以太网通信控制板-B1-控制板作为单路TCP客户端和电脑TCP服务器通信(连接路由器或者交
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节......
  • 以太网通信控制板-A3-控制板作为TCP服务器和电脑TCP客户端通信(连接电脑网线方式, TCP
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节......
  • chapter 13:TCP/IP 和网络编程
    学习笔记:TCP/IP和网络编程13.0摘要本章分为两个部分:TCP/IP协议与应用包括TCP/IP协议栈、IP地址、主机名、DNS、IP数据包和路由器。描述了UDP和TCP协议、端口号以及TCP/IP网络中的数据流。解释了服务器-客户端计算模型和套接字编程接口。通过使用UDP和TCP套接字的示例......
  • 可靠传输 —— TCP
    源端口号和目标端口号是不可少的,如果没有这两个端口号,数据就不知道应该发给哪个应用。接下来有包的序号,这个是为了解决包乱序的问题。还有应该有的是确认号,目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决丢包的问题。接下来还有一些状态位。例......
  • http、https、tcp三次握手,四次挥手
    HTTP、HTTPS和TCP介绍HTTP(超文本传输协议是一种发布和接收HTML页面的方法,被用于在Web浏览器和网站服务器之间传递信息。是用于www浏览的一个协议。HTTPS(超文本传输安全协议)=HTTP+SSL/TSL(安全层),HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主......
  • TCP连接数计算
    最近有一些时间,想着把某些基础的东西整理下,毕竟地基很重要,首先从计算机网络这部分入手。1、网络收发概览现在绝大部分的系统都是基于TCP协议的可靠传输,从数据的发送到接收的整个过程经历了很多环节,每一个环节也都有其各自的使命,通过大家的协同工作,最终将一个复杂的数据传输问题得以......