首页 > 其他分享 >TCP的三次握手 四次挥手

TCP的三次握手 四次挥手

时间:2022-12-01 16:47:53浏览次数:24  
标签:请求 seq ack 握手 TCP 四次 连接

为什么是三次握手

确认通信能力

我们要明白,如果需要进行通信,首先需要保证的是双方都具有发信和收信能力。在不知双方能力状态下进行的通信都是无法保证可靠性和通信效率的。那么通信双方如何确认对方的通信能力呢?

  1. A请求B进行连接。(B已确认B的收信能力和A的发信能力)
  2. B返回ACK相应。(A已确认双方的收发能力)
  3. A返回ACK并建立连接。(B确认双方收发能力) 上面可以看到,至少是进行三次握手,才能确认双方能力。

防止产生脏数据连接

网络通信情况复杂,不可能保证每一消息都能正常到达其目的地。在TCP连接中,TTL的网络报文的生存时间一般都会比TCP的连接超时时间要长。这样就有可能出现一个问题。A在发送第一次连接请求时,可能网络拥塞,导致数据包未短时间内到达。到达超时时间后,A又发送了一次连接请求,这次正常进行连接。连接结束断开后,A的第一次连接请求到达B,B返回ack。如果是两次握手,A通过当前的状态,直接拒绝B的请求,但B会单方面认为连接已经建立,实际上并不是...

 

 

 

 

第一次握手

  • 首先会将TCP的header部分的控制位(上图的flags)中的SYN置为1。表示希望建立连接。
  • 还有一个重要的数据,seq,即序号。这个东西是干嘛用的呢?这个涉及到TCP安全性和可靠性,与ack即确认号紧密相关。TCP在传输数据时,如果数据比较大,会进行拆分操作,将大数据拆成一个个小的数据包。序号就是在这个时候用的。我们必须要知道这个包的顺序是什么,才能把真正的数据在服务端还原。seq的顺序并不是从0或者1开始的,而是一个随机值。因为如果序号从1开始,那么整个通信的过程非常容易被预测。正因为是随机的,所以对方不知道你的seq,所以我们需要在开始收发数据之前,将seq先发送给对方。序号的初始值的传递就是通过SYN=1的操作传递的。

客户端此时处于同步状态,即可以建立连接。服务端处于监听状态。

第二次握手

  • 标志位。因为已经收到了客户端的建立连接请求。所以必须要发送ack,以告知客户端自己已经收到消息。所以ACK的标志位要置为1,且SYN也是1,因为还未建立连接。
  • seq。同第一次握手一样,也是一个随机值(TCP为全双工,所以双方都需要保留seq方便处理数据包)。
  • ack。是对客户端发过来的序列号进行计算得到的。

服务端处于SYN接收状态。

第三次握手

  • 标志位。此时只需要ACK=1。SYN已经不需要了,双方已经同步完seq等信息。
  • seq。可以说是第二次握手收到的ack。
  • ack。是对第二次握手收到的序列号进行计算得到的。用以告知已收到二次握手信息。

客户端处于连接建立状态,服务端收到信息之后也会进入连接建立状态,双方可以进行通信。

四次挥手

TCP连接在数据传输完成之后需要关闭,不然会一直占用系统资源。TCP的连接关闭需要四次通信才行,分手也是个麻烦事儿。

为什么四次才能断开连接呢?

分手这件事情,两边都说明白,分别断开即可。但是想要确认对方都要断开,那么一次两次是不够的。

 

.

 

四--能否只有两次握手?

答案肯定是不能。看下图

红线部分为一个迟到的连接请求,并且重传计时器结束了他还没有到达,于是发生重传(黑线)。

若只有两次握手,当迟到的到达后,接收方收到了,然后就按规矩建立连接,安排专人(资源)去等待发送方发送数据。但是发送方已经重传过了,他并不知道这个迟到的请求到达了(他也以为重传过了就不会再有重复请求到达),于是接收方就这样傻傻的等待。

 

 

 三次握手能防止已失效的连接请求报文段突然又传到TCP服务器,导致错误,浪费资源。

 

 

 

原文

https://blog.csdn.net/weixin_44865458/article/details/117234974?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-117234974-blog-121859889.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4

标签:请求,seq,ack,握手,TCP,四次,连接
From: https://www.cnblogs.com/xiaoeshuang/p/16941846.html

相关文章

  • TCP协议
    TCP协议特点使用TCP协议,必须双方先建立连接,它是一种面向连接的可靠通信协议。传输前,采用“三次握手”方式建立连接,所以是可靠的。在连接中可进行大数据量的传输。连接、......
  • 计算机网络原理(TCP/IP协议五):Internet协议
    IPv4和IPv6头部IPv6扩展头部IP转发移动IPIP数据报的主机处理 一、IPv4和IPv6头部IP是TCP/IP协议族中的核心协议,所有TCP、UDP、ICMP、IGMP数据都通过IP数据报传输......
  • 动图图解 | UDP就一定比TCP快吗?
    学习&转载文章:"动图图解|UDP就一定比TCP快吗?"UDP比TCP快吗?相信就算不是八股文老手,也会下意识的脱口而出:"是"。这要追问为什么,估计大家也能说出个大概。但这也让人......
  • TCP协议
    TCP协议特点使用TCP协议,必须双方先建立连接,它是一种面向连接的可靠通信协议。传输前,采用“三次握手”方式建立连接,所以是可靠的。在连接中可进行大数据量的传输。连接、......
  • 漫谈计算机网络: 运输层 ------ 从UDP ->TCP , 从面向通信->面向用户,三次握手/四次挥
    面试答不上?计网很枯燥?听说你学习计网每次记了都会忘?不妨抽时间和我一起多学学它......
  • Socket套接字实现TCP协议客户端
    tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=input("请输入连接的服务的IP:")port=int(input("请输入服务的端口:"))tcp_socket.connect((h......
  • tcpdum离线安装(alios8版)
    一、下载rpm包链接:https://pan.baidu.com/s/11eTaFi5fGNtSI_RfPrQtcQ提取码:tl8q二、执行安装命令rpm-ivhtcpdump-4.9.3-3.el8.x86_64.rpm ......
  • TCP和Socket基础概念
    前言对于TCP协议、套接字Socket,相信我们大部分人对这两个东西或多或少都有耳闻,并且可能会认为它俩就是同一个东西,这实际是一个比较常见的误区,笔者将用本文去梳理TCP与Sock......
  • TCP:当初取代NCP,如今害怕被取代
    我叫TCP(Transmission Control Protocol)也叫传输控制协议。不觉回忆1983年,亲手将NCP协议淘汰,取而代之的是我,成了火遍大江南北的网络红人之一。现如今,我感受到前所未有的......
  • 使用epoll实现单进程、单线程非阻塞Tcp服务端
    importreimportsocketimportselectdefrecv_msg(tcp_socket,recv_data):requests=recv_data.splitlines()print(requests)file_name=""ret=re.match(r"[/......