TCP三次握手和四次挥手

北城余情 提交于 2019-12-01 19:11:52

TCP报文首部

tcp

1.源端口和目的端口,各占两个字节,分别写入源端口和目的端口;
2.序号,占4个字节,TCP连接中传送的字节流中的每个字节 都按顺序编号,例如,一段报文的序号字段值是101,携带的数据共有100字段,则下一段报文(如果存在下一个报文)的数据序号就应该从201开始;
3.确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如B收到了A发送过来的报文,其序列号是201,而数据长度是300字节,这表明B正确收到了A发送的到序号500为止的数据。所以,B希望收到A的下一个数据序号是501,于是B在向A发送的确认报文中把确认号置为501;
4.数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始位置有多远;
5.保留,占6位,保留今后使用,目前应该都为0;
6.紧急URG,URG=1时,证明紧急指针字段有效,告诉系统此报文段中有紧急数据;
7.确认ACK,仅当ACK=1时,确认号字段才有效,TCP规定,在连接建立后所有报文的传输都必须把ACK置为1;
8.推送PSH,当两个应用进程进行交互式通行时,一端的应用进程希望在键入一个命令后能够立即得到对方的响应,这是就置PSH=1;
9.重置(复位)RST,RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新连接;
10.同步SYN,在建立连接时用于同步信号。当SYN=1,ACK=0时表明是连接请求报文,若同意连接,则响应报文中会使SYN=1,ACK=1;
11.终止FIN,用于释放连接。当FIN=1时,表明此报文的发送方的数据已经发送完毕,并且要求释放连接;
12.窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;
13.校验和,占2字节,检验首部和数据这两部分;
14.紧急指针,占2字节,指出本报文段的紧急数据的字节数;
15.选项,长度可变,定义一些其他的可选参数。

TCP三次握手

在这里插入图片描述

1.第一次握手:客户A发送位码SYN=1,随机产生seq=x 的数据包到服务器B,服务器B有SYN=1知道,客户A要求建立联机,此时客户A进入SYN_SENT状态,等待服务器B确认;
2.第二次握手:服务器B收到确认请求后要确认联机信息,向客户A发送ack=x+1(即seq+1),seq=y,ACK=1,SYN=1,此时服务器B相当于为客户A做确认的同时发送了一个自己的seq需要客户A做确认,服务器B进入SYN_RECV状态;
3.第三次握手:客户A收到后检查ack是否正确(即自己发送的seq+1)并确认ACK=1,若正确,客户A再想服务器B发送ACK=1,seq=x+1,ack=y+1,服务器B收到后确认seq(是否等于自己发送的ack)ack(是否是自己发送的 seq+1)并且ACK=1则连接建立成功。此时服务器进入ESTABLISHED状态,意味着 可以开始数据传输了。

TCP四次挥手

在这里插入图片描述

1.客户机主动请求关闭连接,向服务器发送一个FIN=1(用来关闭客户机到服务器的数据传送),seq=u(随机序列号),客户机进入FIN_WAIT1状态;
2.服务器收到该报文后回应一个报文,ACK=1,ack=u+1,seq=v,服务器进入CLOSE_WAIT状态,客户机收到服务器回复后进入FIN_WAIT2状态;
3.服务器查看自身是否有未发送或者待发送的数据,若无,服务器被动关闭连接,向客户机发送FIN报文,FIN=1,ACK=1,seq=w,ack=u+1。若有待传输的数据,执行完后再发送FIN报文;
4.客户机收到服务器的FIN报文后,随机发送ACK报文确认,ACK=1,ack=w+1,客户机进入TIME_WAIT状态(用于可靠地终止TCP连接,保证让迟来的TCP报文段有足够短的时间被 识别并丢弃),待两个MSL(报文最大生存时间,保证本次连接的所有数据从网络中消失,避免出现粘包现像)后进入CLOSED状态,服务器收到ACK=1后进入CLOSED状态。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!