TCP三次握手和四次挥手

建立TCP连接:三次握手
TCP在传输数据之前,首先需要建立好TCP连接,后续所有数据都基于这个已建立的连接来传输,建立TCP连接的过程通常被描述为三次握手
屏幕快照 2020-07-27 16.44.59TCP三次握手和四次挥手
注意:广泛使用的三次握手概念并不合理,RFC文档中对建立TCP连接的过程称为three way handshark,按字面翻译,它应该被称为三路握手,对应于建立TCP连接过程中的三个包传输,应该被成为三包握手或三报文握手,而不应该是三次握手。三包握手是只有一次握手,但这次握手过程传输了三个包,从handshark是单数角度上也可以确定它只有一次握手

断开TCP连接:四次握手
建立TCP连接需要三次握手过程,在TCP连接断开(或释放)的时候则需要四次挥手的过程
屏幕快照 2020-07-27 16.46.46TCP三次握手和四次挥手
在RFC793中,建议MSL设置为2分钟,但是对于现在的网络来说,2分钟的时间太长了,这意味着A在回复ACK包之后还需要等待4分钟才能真正关闭连接,实际上,是允许不同的TCP协议设置不同的MS值的。在这里,不管MSL的值具体为多少比较合适,需要关注的是为什么A在回复ACK之后不直接关闭而是需要等待2MSL时长才关闭?
这主要是为了保证A发送的最后一个ACK回复包能够被B收到。如果不等待2MSL而是直接关闭,那么B可能在超时时间内无法收到回复包,于是重传FIN+ACK包给A,但是A已经关闭了,不可能再接收到重传的包,于是最终B按照非正常状态退出连接。如果A等待一段时间,则可以保证在B重传FIN+ACK之后,A能够重新回复一个ACK包给B(A此时重设定时器为2MSL),使得B能够正常关闭连接

TCP状态机
为了更清晰的描述从建立TCP连接到释放TCP连接的过程,双方可能处于的状态,给出了TCP的有限状态和FSM(Finite State Machine)
屏幕快照 2020-07-27 16.48.36TCP三次握手和四次挥手
屏幕快照 2020-07-27 16.49.19TCP三次握手和四次挥手
屏幕快照 2020-07-27 16.50.24TCP三次握手和四次挥手
屏幕快照 2020-07-27 16.51.30TCP三次握手和四次挥手

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

tcp编程、socket编程、redis

tcp编程(需要建立连接,三次握手,四次挥手,然后发送信息流,数据包是有序的)udp编程(知道IP、端口直接发送数据,数据包可能是无序的)1、客户端和服务器客!(http

tcp的三次握手四次挥手

tcp的三次握手流程:在tcp/ip协议中,tcp协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送SYN包【synj】到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到SYN包,必须确认客户的SYN(ackj1),同时自己也发送一个SYN包(syn

TCP基础 —— 为什么建立连接需要三次握手,而断开连接则需要四次?能不能是三次?

一、TCP包概述一个segment包含header和data两个部分,对于这篇文章需要理解的就是,Sequencenumber和Acknowledgementnumber)这两个字段。TCP的可靠传输就是基于这两个字段来实现的。虽然文章的主旨是三次握手(threewayhandshake)与四次挥手(

TCP的三次握手与四次挥手

TCP的三次握手与四次挥手一、TCP(TransmissionControlProtocol传输控制协议)TCP是面向对连接,可靠的进程到进程通信的协议TCP是提供全双工服务,即数据可在同一时间双向传输二、TCP报文段(封装在IP数据报

TCP三次握手与Linux的TCP内核参数优化

感谢各位技术大佬的资料分享,这里我把我理解的内容做一个整理一:TCP的三次握手1、TCP简述  TCP是一个面向连接的协议,在连接双方发送数据之前,首先需要建立一条连接。TCP建立连接可以简单称为:三次握手(说白了就是建立一个TCP连接的时候,客户端