TCP建立连接和释放连接
2015-07-18 09:29
351 查看
运输连接有三个阶段:连接建立、数据传送、连接释放。
在TCP连接建立过程中要解决以下三个问题:
1、要使每一方能够知对方的存在;
2、要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
3、能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP连接的建立:
1、三次握手
SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
2、完成三次握手,客户端与服务器开始传送数据.
3、释放连接
第一次挥手:数据传输结束后,通信的双方都可释放连接.现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接(A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认
第二次挥手:B
发出确认,确认号 ack = u+1,而这个报文段自己的序号 seq = v(TCP 服务器进程通知高层应用进程.从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态.B 若发送数据,A 仍要接收)
第三次挥手:若
B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接
第四次挥手:A 收到连接释放报文段后,必须发出确认,在确认报文段中
ACK = 1,确认号 ack=w﹢1,自己的序号 seq = u + 1
question:1、为什么建立连接协议时三次握手,而关闭连接确实四次握手呢?
2、为什么TIME_WAIT状态还需要登2MSL后才能返回到CLOSE状态?
在TCP连接建立过程中要解决以下三个问题:
1、要使每一方能够知对方的存在;
2、要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
3、能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP连接的建立:
1、三次握手
SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
2、完成三次握手,客户端与服务器开始传送数据.
3、释放连接
第一次挥手:数据传输结束后,通信的双方都可释放连接.现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接(A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认
第二次挥手:B
发出确认,确认号 ack = u+1,而这个报文段自己的序号 seq = v(TCP 服务器进程通知高层应用进程.从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态.B 若发送数据,A 仍要接收)
第三次挥手:若
B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接
第四次挥手:A 收到连接释放报文段后,必须发出确认,在确认报文段中
ACK = 1,确认号 ack=w﹢1,自己的序号 seq = u + 1
question:1、为什么建立连接协议时三次握手,而关闭连接确实四次握手呢?
2、为什么TIME_WAIT状态还需要登2MSL后才能返回到CLOSE状态?
相关文章推荐
- Unity带有网络功能——创建服务,并连接到一个特定的服务
- 在ASP.Net和IIS中删除不必要的HTTP响应头
- 微软“小冰”识狗与人工神经网络(III)
- Linux环境下使用C/C++编写CGI(httpd)
- WebService接口与HTTP接口的联系
- 黑马程序员----java网络编程基础
- 一次对HTTPS页面抓取的报错发现过程
- 请解释下列HTTP状态码的含义:201、301、401、403、500、503。
- Http API笔记
- Volley完全解析
- linux网络编程之udp的connect趣谈
- 神经网络(Neural Networks,NN)
- Cisco网络方面的书籍
- OkHttp使用进阶 译自OkHttp Github官方教程
- 基于三层网络的音频传输技术
- HttpServlet 笔记
- Linux网络接口配置文件ifcfg-eth0解析
- sk_buff结构分析
- 黑马程序员----网络编程
- 超级详细Tcpdump 的用法