TCP的三次握手建立连接与四次挥手释放连接
2016-04-11 21:41
721 查看
一、TCP的三次握手建立连接
三次握手,指通信双方建立TCP连接时,需要发送三次包,其执行过程如下图所示:第一次握手:Client端联系Server端(SYN=1,seqc=x),意思是告诉对方“我想跟你建立连接”,同步信号SYN=1及我的初始序号为Seqc=x;
第二次握手:Server端回复Client端(SYN=1,ACK=1,ackc=x+1,seqs=y),意思是“好的,已收到,我同意建立连接”,同步信号SYN=1,确认信号ACK=1,对对方的初始序号的确认ackx+1我的初始序号Seqs=y;
第三次握手:Client回复Server端(ACK=1,acks=y+1,seqc=x+1),意思是“好的,已收到,我准备发送数据了”,确认信号ACK=1,对对方的序列号确认acks=y+1,如果自己这一端发送数据则Seqc=x+1
二、TCP四次挥手释放连接
四次挥手,指的是通信双方结束本次通话需要发送四次数据包,其过程如下图所示:第一次挥手:主动方回复另一方(ACK=1,FIN=1,seq1=u),意思是“你刚才发的东西我已收到,我没有数据发送了”,所以ACK=1是对上一报文的确认,FIN=1表示自己这边已没有数据了;
第二次挥手:被动方回复主动方(ACK=1,ack1=u+1,seq2=v),意思是“收到你的信息,我可能还有数据要发”,所以ACK=1,ack1=m+1是对报文的确认,同时自己这边的序号到Seq2=n了;
第三次挥手:因为主动方没有数据了,一直处于等待状态,所以这一次由被动方发起(ACK=1,FIN=1,ack1=u+1,seq2=w),意思是“我也没有数据发送了,可以结束连接了”;
第四次挥手:主动方回复被动方(ACK=1,ack2=w+1,seq1=u+1),意思是“收到”。
然后主动方等待一定时间,如果没有收到对方重发的FIN报文则表示对方已成功关闭连接,自己这边也可以关闭连接了;如果对方等待超时仍没有收到ACK报文则肯定会重新发送FIN报文,所以这个一定时间就是指TIME_WAIT状态,所以等待是否重新发送ACK报文
三、为什么建立连接需要三次握手,而释放连接需要四次握手?
答:因为建立连接时,服务端一直就处于Listen状态下,当收到客户端的SYN请求后,就将ACK和SYN放在一个报文中发送给客户端;而释放连接时,主动方发送FIN报文只表示当前自己已没有数据发送了,但对方可能还有数据发送,所以被动方先回复一个ACK报文确认收到该报文,然后当被动方也没有数据发送时就会再发起一个FIN报文报告自己没有数据发送时,然后再被主动方确认后释放连接。四、为什么TIME_WAIT状态需要等待一定时间才能真正释放连接?
答:首先这个一定时间跟具体实现有关,而需要等待这段时间是为了确认主动方发送的ACK报文被对方收到了并且对方已关闭了连接,否则主动方直接关闭了连接而发送的ACK报文由于网络不可靠中途丢失了,那么另一方就要不断重发FIN报文苦等ACK报文而不得,空浪费资源。相关文章推荐
- linux 下使用 tc 模拟网络延迟和丢包
- POJ 1274 The Perfect Stall 网络流 二分图匹配
- Java_SE11-TCP通信,UDP通信
- 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
- sigmoid
- android 使用OkHttp上传多张图片
- 使用java开源工具httpClient及jsoup抓取解析网页数据
- Python网络爬虫——模拟登陆爬取网站数据并加载到excl表格里
- acdream oj 1211 有上下界的网络流
- 计算机网络面试
- 使用HttpClient连接池进行https单双向验证
- 【C#】 知乎用户网络爬虫
- 4.传输控制协议(TCP):进程到进程的通信
- 流媒体传输协议(rtp/rtcp/rtsp/rtmp/mms/hls)
- Convolutional Neural Networks卷积神经网络 (该博主一系列都很好)
- 检测网络状态
- Java网络连接-URLConnection类的使用
- http理论之1
- 也谈http中get和post
- hdu 5443 The Water Problem(长春网络赛——暴力)