美文网首页
TCP三次握手

TCP三次握手

作者: youngxs | 来源:发表于2019-04-03 19:31 被阅读0次

URG:紧急标志

紧急(The urgent pointer) 标志有效。紧急标志置位,

ACK:确认标志

确认编号(Acknowledgement Number)栏有效。大多数情况下该标志

TCP三次握手是Syn Flood存在的基础

位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据

PSH:推标志

该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

RST:复位标志

复位标志有效。用于复位相应的TCP连接。

SYN:同步标志

同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

FIN:结束标志

带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

服务端处于监听状态客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。

其中三次挥手主要用到的就是ACK和SYN

下面举个例子说一下三次挥手的流程:

1.你准备抽烟的时候,发现你没有火,然后你看到边上有个哥们,然后你就问他:“兄弟有火么,方便借一下么。” (第一次握手) 

2.那哥们听到了以后,回复你:“有啊,在桌子上,你自己拿一下吧”(第二次握手) 

3.你听到他说的以后,为了表示感谢和确认,你回复了他:“谢谢了啊哥们,那我去拿了。”(三次握手)。

4.然后你去拿打火机去了(三次握手成功以后,就开始传输数据)。

三次握手图解

下面就是说原理:

       最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动打开连接的是服务器。

1.TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;

2.TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。(这也是为什么需要传输序号,因为用来做消耗用)

3.TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。(可以发现,只要传输带SYN=1,都需要消耗掉一个序列号)ps:需要注意的是ack不是ACK,他是小写的,是一个确认号。ACK是确认标志。

4.TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

5.当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

相关文章

网友评论

      本文标题:TCP三次握手

      本文链接:https://www.haomeiwen.com/subject/bxhtiqtx.html