0


TCP三次握手详解

一、TCP/IP协议

1、tcp/ip简介

TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。

2、tcp协议

TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。为了保证传输的可靠性,TCP协议在UDP基础之上建立了三次对话的确认机制,即在正式收发数据前,必须和对方建立可靠的连接。TCP数据包和UDP一样,都是由首部和数据两部分组成,唯一不同的是,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

3、tcp协议报头

syn表示发起一个连接。

FIN表示断开连接。

ack是确认

RST是重新连接,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。

PSH,表示数据应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。URG,紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

二、三次握手

1、所谓的“三次握手”:

为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。

2、三次握手流程

所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。

(1) 首先客户端先向服务器端发送一个TCP报文

标记位为SYN,表示“请求建立新连接”;
序号为Seq=X(X一般为1)(传输信息的时候每个数据包的序号);

(2)服务器端收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段报文

标志位为SYN和ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服务器收到了你的数据);
序号为Seq=b;(返回一个收到信息的数据包 并给其标序号为b)
确认号为Ack=a+1,表示收到客户端的序号Seq并将其值加1作为自己确认号Ack的值(两端配对
ACK:代表确认收到消息

SYN:同步序列号请求

(3)客户端接收到来自服务器确认收到数据的TCP报文后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段,并返回一段TCP报文

标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);
序号为Seq=a+1,表示收到服务器端的确认号Ack,并将其值作为自己的序号值;
确认号为Ack=b+1,表示收到服务器端序号Seq,并将其值加1作为自己的确认号Ack的值;

3、三次握手的目的

(1)为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

(2)由于网络传输是有延时的(要通过网络光纤和各种中间代理服务器),在传输的过程中,比如客户端发起了SYN=1创建连接的请求(第一次握手)。

(3)如果服务器端就直接创建了这个连接并返回包含SYN、ACK和Seq等内容的数据包给客户端,这个数据包因为网络传输的原因丢失了,丢失之后客户端就一直没有接收到服务器返回的数据包。

(4)客户端可能设置了一个超时时间,时间到了就关闭了连接创建的请求。再重新发出创建连接的请求,而服务器端是不知道的,如果没有第三次握手告诉服务器端客户端收的到服务器端传输的数据的话,

(5)服务器端是不知道客户端有没有接收到服务器端返回的信息的。

标签: tcp/ip 网络 java

本文转载自: https://blog.csdn.net/m0_72128558/article/details/128500394
版权归原作者 九江胖胖 所有, 如有侵权,请联系我们删除。

“TCP三次握手详解”的评论:

还没有评论