TCP从连接到释放过程全解
2015-06-03 18:35
477 查看
参考书籍:《计算机网络第5版》
TCP是面向连接的协议,采用C/S模型建立连接,由客户端主动发起连接请求,服务器端允许请求的模式建立连接,通常称为三次握手建立TCP连接。
准备条件:B的服务器端先创建传输控制块TCB,准备接受客户端进程的连接请求,此时服务器进程处于LISTEN(监听)状态。
1、A的客户端进程首先创建传输控制块TCB,然后向服务器端发出连接请求报文段(SYN=1,seq=x)。此时客户端进入SYN-SENT(同步已发送)状态。
2、服务器端收到客户端的连接请求报文段后,如同意连接,则向客户端发送确认(SYN=1,ACK=1,seq=y,ack=x+1)。此时服务端进入SYN-RCVD(同步接收)状态。
3、客户端进程收到服务器端的确认后,还要向服务器端给出确认(ACK=1,seq=x+1,ack=y+1)。A进入ESTABLISHED(已建立连接)状态。
当B收到确认后,服务器端进程也进入ESTABLISHED状态。至此,TCP连接已经完全建立。
同样关于TCP连接释放的过程也存在四次握手经过,简述如下。
初始状态:客户端与服务器端均处于ESTABLISHED状态。
1、客户端进程向服务器端发出连接释放报文段(FIN=1,seq=u),并停止发送数据,主动关闭TCP连接。此时进入FIN-WAIT-1(终止等待1)状态,等待服务器端的确认
2、服务器端收到客户端的连接释放报文段后,发出确认(ACK=1,seq=v,ack=u+1)。然后服务器端进入CLOSE-WAIT(关闭等待)状态,A收到来自B的确认后,进入FIN-WAIT-2(终止等待2)状态。此时TCP连接处于半关闭(half-close)状态。即A已经不能再发数据给B了,但B依然可以发数据给A。
3、若B没有要向A发送的数据,此时服务器端向客户端发出连接释放报文段(FIN=1,seq=w,ack=u+1)。此时服务器端进入LAST-ACK(最后确认)状态,等待A的确认。
4、客户端收到服务器端的连接释放报文段后,发出确认(ACK=1,seq=u+1,ack=w+1)。此时客户端进入TIME-WAIT(时间等待)状态。服务器端收到确认后,随即关闭连接(CLOSED)。客户端经过2MSL后关闭TCP连接。
至此,整个TCP连接释放。
TCP是面向连接的协议,采用C/S模型建立连接,由客户端主动发起连接请求,服务器端允许请求的模式建立连接,通常称为三次握手建立TCP连接。
准备条件:B的服务器端先创建传输控制块TCB,准备接受客户端进程的连接请求,此时服务器进程处于LISTEN(监听)状态。
1、A的客户端进程首先创建传输控制块TCB,然后向服务器端发出连接请求报文段(SYN=1,seq=x)。此时客户端进入SYN-SENT(同步已发送)状态。
2、服务器端收到客户端的连接请求报文段后,如同意连接,则向客户端发送确认(SYN=1,ACK=1,seq=y,ack=x+1)。此时服务端进入SYN-RCVD(同步接收)状态。
3、客户端进程收到服务器端的确认后,还要向服务器端给出确认(ACK=1,seq=x+1,ack=y+1)。A进入ESTABLISHED(已建立连接)状态。
当B收到确认后,服务器端进程也进入ESTABLISHED状态。至此,TCP连接已经完全建立。
同样关于TCP连接释放的过程也存在四次握手经过,简述如下。
初始状态:客户端与服务器端均处于ESTABLISHED状态。
1、客户端进程向服务器端发出连接释放报文段(FIN=1,seq=u),并停止发送数据,主动关闭TCP连接。此时进入FIN-WAIT-1(终止等待1)状态,等待服务器端的确认
2、服务器端收到客户端的连接释放报文段后,发出确认(ACK=1,seq=v,ack=u+1)。然后服务器端进入CLOSE-WAIT(关闭等待)状态,A收到来自B的确认后,进入FIN-WAIT-2(终止等待2)状态。此时TCP连接处于半关闭(half-close)状态。即A已经不能再发数据给B了,但B依然可以发数据给A。
3、若B没有要向A发送的数据,此时服务器端向客户端发出连接释放报文段(FIN=1,seq=w,ack=u+1)。此时服务器端进入LAST-ACK(最后确认)状态,等待A的确认。
4、客户端收到服务器端的连接释放报文段后,发出确认(ACK=1,seq=u+1,ack=w+1)。此时客户端进入TIME-WAIT(时间等待)状态。服务器端收到确认后,随即关闭连接(CLOSED)。客户端经过2MSL后关闭TCP连接。
至此,整个TCP连接释放。
相关文章推荐
- http、浏览器---工作原理讲解-----阿冬专栏!!!!
- Android网络通信的六种方式示例代码
- Android中使用HTTP服务
- 使用vbs脚本添加域网络共享驱动器
- iOS开发网络数据之AFNetworking使用
- github出现HTTP request failed
- java中的一些网络知识
- TCP协议中的三次握手和四次挥手(图解)
- Android中的volley_4_执行网络请求的接口Network及其实现类BasicNetwork
- TOMCAT起步内存溢出问题Exception in thread ""http-bio-8080"
- Android ListView从网络获取图片及文字显示
- HttpClient 中的三个超时详解
- 模拟浏览器以HTTP请求方式用JUnit4完成功能接口的单元测试
- Android手机tcpdump抓包
- 面试笔记10(计算机网络基础)
- Android之Http通信——3.Android HTTP请求方式:HttpURLConnection
- Linux常用网络工具:fping主机扫描
- 【转】 Nginx深入详解之多进程网络模型
- 数据包头分析---网络字节序与主机字节序
- 基本的http压力测试工具