TCP协议三次握手、四次挥手过程

本文通过图来梳理TCP-IP协议相关知识。TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道。如图1所示,给出了TCP通信过程的示意图。

上图主要包括三部分:建立连接、传输数据、断开连接。

建立TCP连接很简单,通过三次握手便可建立连接。建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。断开连接的过程也很简单,通过四次握手完成断开连接的过程。三次握手建立连接:

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

传输数据过程:

a.超时重传超时重传机制用来保证TCP传输的可靠性。每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq 号数据已经收到。发送方在发送了某个seq包后,等待一段时间,如果没有收到对应的ack回复,就会认为报文丢失,会重传这个数据包。b.快速重传接受数据一方发现有数据包丢掉了。就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重 传。比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端主动告诉发送端数据没收到,然后触发发送端重传。c.流量控制这里主要说TCP滑动窗流量控制。TCP头里有一个字段叫Window,又叫Advertised-Window,这个字段是接收端告诉发送端自己 还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。 滑动窗可以是提高TCP传输效率的一种机制。d.拥塞控制滑动窗用来做流量控制。流量控制只关注发送端和接受端自身的状况,而没有考虑整个网络的通信情况。拥塞控制,则是基于整个网络来考虑的。考虑一下这 样的场景:某一时刻网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,但是,重传会导致网络的负担更重,于是会导致更大的延迟以及更多 的丢包,于是,这个情况就会进入恶性循环被不断地放大。试想一下,如果一个网络内有成千上万的TCP连接都这么行事,那么马上就会形成“网络风 暴”,TCP这个协议就会拖垮整个网络。为此,TCP引入了拥塞控制策略。拥塞策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。

四次挥手断开连接:

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当 然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

原文地址:https://www.cnblogs.com/yinrw/p/10694349.html

时间: 2024-11-07 23:44:12

TCP协议三次握手、四次挥手过程的相关文章

TCP 协议 ---- "三次握手,四次挥手"

一.TCP 协议 1.概念:TCP协议,即 传输控制协议.它是面向连接.可靠的传输层协议. 2.特点:工作在 传输层:每一条TCP连接只能是点对点的:面向连接.可靠性:提供全双工通信:基于字节流. 3.TCP 数据报格式:   TCP 基于 字节流 源端口号.目的端口号:各占 2字节(16位) 序号:4字节 范围[0,2^32 - 1],使用mod/(2^32)计算 URG:紧急  1 紧急指针字段有效            ACK:确认  1 确认字段有效 PSH:推送  两应用进行交互,一方

网络编程 TCP协议:三次握手,四次回收,反馈机制 socket套接字通信 粘包问题与解决方法

TCP协议:三次握手,四次挥手 TCP协议建立双向通道. 三次握手, 建连接: 1:客户端向服务端发送建立连接的请求 2:服务端返回收到请求的信息给客户端,并且发送往客户端建立连接的请求 3:客户端接收到服务端发来的请求,返回接成功给服务端,完成双向连接 第一客戶向服务端发送请求,请求建立连接 服务端同客户端的请求,并同时向客户端发送建立 连接的请求,最后客户端同意后建立 双向连接. C ----> S C <---- S - 反馈机制: 客户端往服务端发送请求,服务端必须返回响应, 告诉客户

TCP协议之三次握手四次挥手

一.TCP协议简述 TCP协议位于传输层用来建立传输数据的通道以及传输数据,那么在这一层的tcp协议就涉及到客户端与服务端通信的连接,数据的传输.关闭连接. 通信的连接使用的就是客户端与服务端的三次握手,一旦三次握手成功就建立了双方的通信通道:接着就可以互相通信传输数据了:最后传输数据完成后断开双方通道,通过四次挥手. 上图中简单的画出建连接的三次握手.数据传输.断开连接的四次挥手过程.上图中涉及到一些参数,这里做一些了解. 参数 含义 SYN 请求建立连接,并在其序列号的字段进行序列号的初始值

TCP连接 三次握手 四次挥手

前言: TCP协议是面向连接.安全可靠.基于字节流的传输层协议,在进行http协议访问时就用到了tcp连接.在建立TCP连接时需要经历三次握手,断开连接时需要经历四次挥手.在此进行记录. 内容: TCP三次握手 第一次握手:由客户端发起,客户端生成一个SYN,以及一个随机数标记数X,然后将随机标记数X和SYN发送为服务端,此时客户端进入SYN_SENT状态,等待服务端响应. 第二次握手:服务端接收到SYN后得知客户端请求连接,然后服务端将SYN和ACK都置为1,并将ack=X+1,再生成一个随机

TCP的三次握手四次挥手理解及面试题

一.TCP概述 每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字, 例如,若IP地址为192.0.0.1 而端口号为8000,那么得到的套接字为192.0.0.1:8000 二.TCP报文格式 ACK.SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0:ack.seq小写的单词表示序号 同步SYN:(Synchronize ),SYN=1表示这是一个连接请求报文,或连接接受报文.SYN这个标志位只有在TCP建产连接时才

socket的TCP的三次握手/四次挥手

第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态 第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLIS

TCP/IP三次握手四次挥手

TCP三次握手所谓握手,也就是建立连接,三次过程.三次握手旨在连接到服务端的指定端口,进行通信.建立一个TCP连接,需要向客户端和服务端发送三个包.其中包含同步序列号和确认号以及TCP窗口大小的信息交换.一般触发握手在socket中都是connect()函数触发的第一次握手:客户端发送TCP请求, (SYN标记位置1个包,SYN=1,ACK=0 也就是带有SYN标记的TCP包,初始序列号为X,保存在包头的序列号中). 表示客户端需要建立一个TCP连接,这是握手中的第一不,发送请求.第二次握手:服

TCP三次握手四次挥手过程梳理

1. 数据传输的大致示意图 1.1 TCP连接的几种状态说明 即命令 netstat 结果中的所有状态: 2. TCP连接建立的全过程 2.1 TCP三次握手建立TCP连接 1)客户端和服务端都处于CLOSED状态.(发起TCP请求的称为客户端,接受请求的称为服务端) 2)服务端打开服务端口,处于listen状态. 3)客户端发起连接请求.首先发送SYN(synchronous)报文给服务端,等待服务端给出ACK报文回应.发送的SYN=1,ACK=0,表示只发送了SYN信号.此时客户端处于SYN

TCP/IP三次握手 四次挥手

三次握手: 四次挥手:

tcp的三次握手四次挥手

在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求,然后客户端主动 关 闭连接.两条竖线表示通讯的两端,从上到下表示时间的先后顺序,注意,数据从一端传到 网络的 另一端也需要时间,所以图中的箭头都是斜的.双方发送的段按时间顺序编号为1-10, 各段中的主 要信息在箭头上标出,例如段2的箭头上标着SYN, 8000(0), ACK 1001, <mss 1024>, 表示该段中 的SYN位置1,32位序号是8000,该段不携带有效载荷(数据字节数为0),ACK位置 1,32位确