TCP/IP的三次握手和四次放手
2016-08-14 17:28
197 查看
一开始个人对于三次握手和四次挥手这个东西还是有时候会忘记,可能理解的不是非常深刻,所以今天就自己动手来记录一下这个知识点,方便以后查看。总结完之后发现总结的还是可以的哈哈。
三次握手建立连接
第一次:客户端和服务器端一开始都是关闭的。①:当想建立连接的时候,客户端首先主动打开,然后服务器端被动打开。
②:服务器首先得先创建好需要的pcb传输控制块(参照socket编程中的,先得建立一些服务器所需要的信息,包括套接字之类的,创建套接字,绑定套接字,),之后进入listen状态,等待客户端来连接自己。客户端也得建立好自己的PCB结构(创建套接字)。
③:第一次连接开始:客户端发出连接请求,发出请求报文(SYN:握手信号=1,ACK:确认机制=0,SEQ:连接序列=随机数X),
客户端状态:SYN-SENT(同步已发送)
第二次:同意连接,发送同意报文(SYN:握手信号=1,ACK:确认机制=1,ack:确认信号=X+1,SEQ:连接序号=随机数Y),这里有重新产生一个序列号Y,服务器状态:SYN-RCVD(同步已收到)
第三次:客户端收到服务器的连接确认后,必须返回确认连接信号给服务器(ACK:确认机制=1, ack:确认信号=Y+1, SEQ:连接序号=随机数X+1(在上一条请求信号的基础上加1))
客户端状态:ESTAB-LISHED(连接已建立)。当服务器收到之后,服务器状态:ESTAB-LISHED(连接已建立)
注意:第三次握手的意义:为了防止已经失效的连接请求报文段突然又传送到了B。
![](https://images2015.cnblogs.com/blog/923388/201608/923388-20160814172544906-1138790559.jpg)
四次挥手释放连接
第一次:客户端首先发送连接释放报文段(FIN:终止连接标志=1,seq:序号=X),FIN=1向服务器提出分手。客户端状态:FIN-WAIT-1(终止连接等待状态1)
第二次:因TCP的连接是全双工的双向连接,关闭也是要从两边关闭;当服务器收到客户端发来的FIN=1的标志位后,服务器不会立刻向客户端发送FIND=1的请求关闭信息,而是先向客户端发送一个ACK=1的应答信息,表示:你请求关闭的请求我已经收到,但我可能还有数据没有完成传送,你再等下,等我数据传输完成了我就告诉你;确认报文(ACK:确认机制=1,ack:确认信号=X+1,seq:序号=Y)
服务器状态:CLOSE-WAIT(关闭等待),这样客户端到服务器端的连接就释放了
客户端状态:FIN-WAIT-2(终止连接等待状态2)
第三次:服务器端数据传输完成,没有动洗传输了,服务器这边提出释放连接要求(FIN:终止连接标志=1,ACK:确认机制=1,seq:序号=Z,ack:确认信号=X+1)
服务器状态:LAST-ACK(最后确认)
第四次:host1收到FIN=1后,host1还是怕由于网络不稳定的原因,怕host2不知道他要断开连接,于是向host2发送ACK=1确认信息进行确认,把自己设置成TIME_WAIT状态并启动定时器,如果host2没有收到ACK,host2端TCP的定时器到达后,会要求host1重新发送ACK,当host2收到ACK后,host2就断开连接;当host1等待2MLS(2倍报文最大生存时间)后,没有收到host2的重传请求后,他就知道host2已收到了ACK,所以host1此时才关闭自己的连接。这一点我觉得设计得非常巧妙
三次握手建立连接
第一次:客户端和服务器端一开始都是关闭的。①:当想建立连接的时候,客户端首先主动打开,然后服务器端被动打开。
②:服务器首先得先创建好需要的pcb传输控制块(参照socket编程中的,先得建立一些服务器所需要的信息,包括套接字之类的,创建套接字,绑定套接字,),之后进入listen状态,等待客户端来连接自己。客户端也得建立好自己的PCB结构(创建套接字)。
③:第一次连接开始:客户端发出连接请求,发出请求报文(SYN:握手信号=1,ACK:确认机制=0,SEQ:连接序列=随机数X),
客户端状态:SYN-SENT(同步已发送)
第二次:同意连接,发送同意报文(SYN:握手信号=1,ACK:确认机制=1,ack:确认信号=X+1,SEQ:连接序号=随机数Y),这里有重新产生一个序列号Y,服务器状态:SYN-RCVD(同步已收到)
第三次:客户端收到服务器的连接确认后,必须返回确认连接信号给服务器(ACK:确认机制=1, ack:确认信号=Y+1, SEQ:连接序号=随机数X+1(在上一条请求信号的基础上加1))
客户端状态:ESTAB-LISHED(连接已建立)。当服务器收到之后,服务器状态:ESTAB-LISHED(连接已建立)
注意:第三次握手的意义:为了防止已经失效的连接请求报文段突然又传送到了B。
![](https://images2015.cnblogs.com/blog/923388/201608/923388-20160814172544906-1138790559.jpg)
四次挥手释放连接
第一次:客户端首先发送连接释放报文段(FIN:终止连接标志=1,seq:序号=X),FIN=1向服务器提出分手。客户端状态:FIN-WAIT-1(终止连接等待状态1)
第二次:因TCP的连接是全双工的双向连接,关闭也是要从两边关闭;当服务器收到客户端发来的FIN=1的标志位后,服务器不会立刻向客户端发送FIND=1的请求关闭信息,而是先向客户端发送一个ACK=1的应答信息,表示:你请求关闭的请求我已经收到,但我可能还有数据没有完成传送,你再等下,等我数据传输完成了我就告诉你;确认报文(ACK:确认机制=1,ack:确认信号=X+1,seq:序号=Y)
服务器状态:CLOSE-WAIT(关闭等待),这样客户端到服务器端的连接就释放了
客户端状态:FIN-WAIT-2(终止连接等待状态2)
第三次:服务器端数据传输完成,没有动洗传输了,服务器这边提出释放连接要求(FIN:终止连接标志=1,ACK:确认机制=1,seq:序号=Z,ack:确认信号=X+1)
服务器状态:LAST-ACK(最后确认)
第四次:host1收到FIN=1后,host1还是怕由于网络不稳定的原因,怕host2不知道他要断开连接,于是向host2发送ACK=1确认信息进行确认,把自己设置成TIME_WAIT状态并启动定时器,如果host2没有收到ACK,host2端TCP的定时器到达后,会要求host1重新发送ACK,当host2收到ACK后,host2就断开连接;当host1等待2MLS(2倍报文最大生存时间)后,没有收到host2的重传请求后,他就知道host2已收到了ACK,所以host1此时才关闭自己的连接。这一点我觉得设计得非常巧妙
![](https://images2015.cnblogs.com/blog/923388/201608/923388-20160814172554468-1452363003.png)
相关文章推荐
- TCP/IP 三次握手协议与四次放手协议
- tcp/ip的三次握手和四次挥手图解
- TCP/IP三次握手与四次挥手
- 理解TCP/IP三次握手与四次挥手的正确姿势
- TCP/IP三次握手,四次分手
- TCP/IP的三次握手,四次分手。
- TCP/IP三次握手与四次挥手
- TCP/IP之间的三次握手以及四次挥手
- 【精】TCP/IP的三次握手和四次挥手
- TCP/IP三次握手与四次挥手(转)
- TCP/IP三次握手,四次挥手
- TCP、IP的三次握手和四次挥手解析
- TCP/IP 三次握手与四次挥手
- TCP/IP的三次握手与四次挥手详解
- TCP/IP的三次握手与四次挥手
- TCPIP三次握手与四次挥手
- TCP/IP三次握手、四次挥手总结
- TCP/IP 三次握手 四次分手
- TCP/IP 三次握手四次分手
- TCP/IP三次握手和四次挥手