TCP的三次握手和四次挥手
2016-07-26 17:13
375 查看
TCP协议提供可靠的数据传输连接,三次握手用于建立连接,四次挥手用于断开连接。
三次握手:
第一次、建立连接时,客户端向服务器发送SYN包(syn=j),即握手信号,进入SYN_SEND状态,等待服务器的响应。
第二次、服务器收到SYN包,确认客户端的SYN(ack=j+1),同时向客户端发送一个SYN包(syn=k),即发送SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次、客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),发送完毕后,客户端与服务端进入ESTABLISHED状态,建立连接,完成三次握手。
四次挥手:
断开连接时不区分客户端和服务器,假设客户端发起中断请求。
第一次、客户端完成数据传输后,向服务器发送FIN报文,即中断连接请求。
第二次、服务器收到FIN报文后,如果当前仍有数据没有发送完成,则可以不用关闭连接,继续发送数据,同时向客户端发送ACK报文,通知客户端,关闭请求已收到,但服务器数据未发送完,请继续等待。客户端收到ACK报文后进入FIN_WAIT状态,等待服务器的FIN报文。
第三次、服务器数据发送完成后,向客户端发送FIN报文,通知客户端,服务器数据已传输完成,可以关闭连接。
第四次、客户端收到FIN报文后,向服务器发送ACK确认报文,进入TIME_WAIT状态,服务器收到ACK确认报文后断开连接,客户端等待了2MSL(Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”)后没有收到回复,证明服务器已正常关闭,此时客户端关闭连接。如果服务器没有收到ACK报文,则可以重传。
三次握手:
第一次、建立连接时,客户端向服务器发送SYN包(syn=j),即握手信号,进入SYN_SEND状态,等待服务器的响应。
第二次、服务器收到SYN包,确认客户端的SYN(ack=j+1),同时向客户端发送一个SYN包(syn=k),即发送SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次、客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),发送完毕后,客户端与服务端进入ESTABLISHED状态,建立连接,完成三次握手。
四次挥手:
断开连接时不区分客户端和服务器,假设客户端发起中断请求。
第一次、客户端完成数据传输后,向服务器发送FIN报文,即中断连接请求。
第二次、服务器收到FIN报文后,如果当前仍有数据没有发送完成,则可以不用关闭连接,继续发送数据,同时向客户端发送ACK报文,通知客户端,关闭请求已收到,但服务器数据未发送完,请继续等待。客户端收到ACK报文后进入FIN_WAIT状态,等待服务器的FIN报文。
第三次、服务器数据发送完成后,向客户端发送FIN报文,通知客户端,服务器数据已传输完成,可以关闭连接。
第四次、客户端收到FIN报文后,向服务器发送ACK确认报文,进入TIME_WAIT状态,服务器收到ACK确认报文后断开连接,客户端等待了2MSL(Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”)后没有收到回复,证明服务器已正常关闭,此时客户端关闭连接。如果服务器没有收到ACK报文,则可以重传。
相关文章推荐
- socket与tcp/ip编程
- Android网络请求的架构之路
- HTTP的get_post请求方法
- iOS开发(OC)——网络状态的检测
- TCP与UDP的区别
- 快速可靠网络传输协议 KCP(转)
- TCP连接断开过程-四次握手
- HttpServletRequest获取URL、URI
- javaweb学习总结(八)——HttpServletResponse对象(二)
- HTTP meta 设置方法
- ASIHTTPRequest实现https双向认证请求
- 启用不安全的HTTP方法解决方案
- 使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据) (3)
- HTTP状态码
- Ubuntu使任何用户都有设置图形网络权限的方法
- Ubuntu设置固定ip后网络图标消失且无法查看ip解决办法
- qt 下UDP消息的接收和发送和TCP发送文件
- Http Post请求 带Header和Body
- HTTP 错误 404.3 - Not Found(在下载.apk文件时出现错误)
- Android 网络爬虫demo