网络_TCP连接的建立与释放
三报文握手
1.概述
TCP是面向连接的协议。TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段,即我们说的“三次握手”(严格讲是一次握手过程中交换了三个报文)。
2.过程
一开始客户端和服务器端中的TCP进程都处于关闭状态,假设客户端主动打开连接,服务器端被动打开连接;这时客户端TCP进程创建传输控制模块TCB,服务器端进程也创建传输控制模块TCB并监听客户请求,以便及时响应。
- 第一次
客户端打算建立TCP连接时,向服务器端发送连接请求报文段,其首部中的同步位SYN=1,ACK=0,并选择一个初始序号seq=x,这时客户端TCP进程进入同步已发送状态(SYN-SENT)。 - 第二次
服务器端收到连接请求报文段后,如果同意连接,则向客户端发送确认报文段,其首部中的同步位和ACK位都为1,确认号为ack=x+1,并选择一个初始序号为seq=y,这时服务器端TCP进程进入同步已收到状态(SYN-RCVD)。 - 第三次
客户端收到服务器端的确认后,还需要向服务器端发送确认报文段,其首部中的同步位和ACK位都为1,确认号为ack=y+1,自己的序号为seq=x+1,这时客户端TCP进程进入已建立连接状态(ESTABLISHED)。
当服务器端收到客户端的确认后,也进入已建立连接状态(ESTABLISHED)。
3.过程图示
4.四报文握手
在三报文握手中的第二次报文发送时,可以先发送一个确认报文段(ACK=1,ack=x+1),再发送一个同步报文段(SYN=1,seq=y),这就变成了四报文握手。
四报文挥手
1.概述
TCP释放连接的过程叫做挥手。挥手需要在客户和服务器之间交换四个TCP报文段。
2.过程
数据传输结束后,通信的双方都可释放连接。假设客户端停止发送数据,先主动关闭TCP连接。
- 第一次
客户端TCP进程发送连接释放报文段并进入终止等待1状态(FIN-WAIT-1),其中报文段首部的终止控制位FIN=1,其序号seq=u(u等于已传送过的数据的最后一个字节的序号加1)。 - 第二次
服务器端收到连接释放报文段后发出确认报文段并进入关闭等待状态(CLOSE-WAIT),其中报文段首部确认号为ack=u+1,其序号为seq=v(v等同于u)。
客户端收到服务器端的确认后,进入终止等待2状态(FIN-WAIT-2),等待服务器端发送连接释放报文段。
这时TCP连接处于半关闭状态,即客户端到服务器端的连接释放了,但是服务器端仍可发送数据,客户端仍可以接收数据。 - 第三次
当服务器端停止发送数据,其应用进程会通知TCP释放连接。
服务器端TCP进程发送连接释放报文段并进入最后确认状态(LAST-ACK),其中报文段首部的终止控制位FIN=1,其序号seq=w(半关闭状态时可能发送了数据),确认号ack=u+1。 - 第四次
客户端收到连接释放报文段后发出确认报文段并进入时间等待状态(TIME-WAIT),其中报文段首部的ACK=1,确认号ack=w+1,其序号为seq=u+1。
此时TCP连接还没有释放,等待时间等待计时器设置的2MSL时间后(建议四分钟),客户端才进入关闭状态。
3.图示
几个问题
- 1.三报文握手为什么客户端最后还要发送一次确认呢?
为了防止已失效的连接请求报文段又发给服务器端而产生错误。
比如客户端发送的第一个请求报文段在某些网络节点滞留了,导致连接释放后的某个时间才到达服务器端,服务器端会向客户端发送确认报文段。
如果不采用三报文握手,那么新的连接就建立了,但客户端不知道建立了连接,就不会发送数据导致服务器端一直等待;
而采用三报文握手,客户端不会向服务器端的确认发出确认,服务器端收不到确认,就不会建立连接。 - 2.为什么四报文挥手客户端在时间等待状态需要等待2MSL?
其一是为了保证客户端发送的最后一个确认报文段能到达服务器端。因为最后一个ACK报文段可能丢失,服务器端收不到这个报文段会超时重传FIN报文段,在2MSL时间内客户端能收到重传的FIN报文段并重传ACK报文段,保证客户端和服务器端正常关闭TCP连接。
其二是防止已失效的请求连接报文段出现在本次连接中。客户端在发送完最后一个ACK报文段后经过2MSL时间后,本次连接内的所有报文段将消失,下一次新的连接中就不会有本次的无效的请求连接报文段了。
网络_TCP连接的建立与释放的更多相关文章
- 简述TCP连接的建立与释放(三次握手、四次挥手)
在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...
- 计算机网络(11)-----TCP连接的建立和释放
TCP连接的建立和释放 概述 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程,运输连接有三个阶段:连接建立,数据传送和连接释放. TCP连接的建立 如图所示,假定A主机是客户端程序, ...
- TCP连接的建立与释放(三次握手与四次挥手)
TCP连接的建立与释放(三次握手与四次挥手) TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议 ...
- Wireshark-TCP协议分析(包结构以及连接的建立和释放)
原文:http://blog.csdn.net/ahafg/article/details/51039584 TCP:传输控制协议 TCP是一种面向连接的.可靠的.基于字节流的传输层通信协议. 面向 ...
- tcp连接的建立与释放
1.TCP是面向连接的协议. 运输连接时用来传送TCP报文的.TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程.因此,运输链接就有三个阶段,即:连接建立.数据传送和连接释放. 在TCP ...
- 【网络协议】TCP连接的建立和释放
转载请注明出处:http://blog.csdn.net/ns_code/article/details/29382883 TCP首部格式 先看TCP报文段的格式,例如以下; TCP报文段首部的前20 ...
- TCP连接的建立与释放(超详细)
前言:在计算机网络协议中,TCP只是其中一个,然而在网络使用中,TCP也是最离不开的协议之一,它的重要性毋庸置疑,最最重要的是,面试的重点就是它啊,呜呜~~,今天我们一起来看下TCP的连接建立与释放, ...
- 第三次作业:使用Packet Tracer分析TCP连接的建立与释放过程
0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 使用路由器连接不同的网络 使用命令行操作路由器 通过抓取HTTP报文,分析TCP连接建立的过程 2 实验内容 使用Packe ...
- TCP 连接的建立和释放
TCP(Transmission Control Protocol) 传输控制协议 1.三次握手协议(建立连接) TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...
随机推荐
- Mysql常规优化
一.SQL语句优化 (1)使用limit对查询结果的记录进行限定(2)避免select *,将需要查找的字段列出来(3)使用连接(join)来代替子查询(4)拆分大的delete或insert语句 二 ...
- 【转】Loadrunner 性能指标定位系统瓶颈
转至:http://www.51testing.com/html/63/n-1224463.html Loadrunner 性能指标定位系统瓶颈 判断CPU瓶颈 1, %processor time ...
- linux 安装 Python
一. 打开终端,输入:wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0b4.tgz 下载完毕后 输入解压命令:tar –zxvf Py ...
- Hive的join表连接查询的一些注意事项
Hive支持的表连接查询的语法: join_table: table_reference JOIN table_factor [join_condition] | table_reference {L ...
- linux dns
linux 用户相关的 root 相当于QQ群主 sudo QQ群管理员 普通用户 QQ群水军 root UID 是 0 组UID也是0 普通用户UID从1000开始 查看用户id 信 ...
- Python+OpenCV图像处理(六)—— ROI与泛洪填充
一.ROI ROI(region of interest),感兴趣区域.机器视觉.图像处理中,从被处理的图像以方框.圆.椭圆.不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI. 代码如下 ...
- 大数据学习路线:Hadoop集群同步技术分享
今天给大家带来的技术分享是——Hadoop集群同步. 一.同步方式 选择一个机器,作为时间服务器(这里选择hadoop01),所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间. ...
- Django框架----Ajax
一.Ajax准备知识:json 说起json,我们大家都了解,就是python中的json模块,那么json模块具体是什么呢?那我们现在详细的来说明一下 1.json(Javascript Obie ...
- 有登陆认证的情况下如何使用Wisdom RESTClient?
访问REST API时,很多系统需要登陆认证,登陆成功以后才允许访问API.下面介绍一下有登陆认证情况下如何使用 Wisdom RESTClient测试API的方法. 方法很简单即在浏览器上成功登录系 ...
- codevs——1003——电话连线
题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当然是双向的了),使得任意两个城市之间都直接或间接经过其他城市有电话线连接,你的程序应该能 ...