TCP/IP之TCP连接的建立与中止状态分析
TCP连接的建立可以简单的称为三次握手,而连接的中止则可以叫做四次握手。
1、连接的建立:
c端发起请求同步(用SYN段等于1的TCP报文),确认某个端口是否监听;
s端应答(用ACK段等于1的TCP报文),
c端收到s端的ACK,并回应s端一个ACK给s端;
经过上面三步连接的建立完成。这就叫做三次握手;
2、连接的中止:(TCP中有half-close,这是因为TCP的连接是全双工(可以同时发送和接收)连接,关闭的时候就需要在两个方向上都进行关闭,否则就是half-close)
c端发起关闭(FIN为1的TCP报文);
s端应答c端(用ACK段等于1的TCP报文);
上面两步完成就是半关闭(half-close)
s端发起关闭(FIN为1的TCP报文)
c端应答s端(用ACK段等于1的TCP报文)
经过上面四步,连接中止。这叫做四次挥手;
最大报文长度MSS
在建立连接的时候,通信的双方要互相确认对方的最大报文长度(MSS),以便通信。
一般这个MSS长度是MTU减去固定IP首部和TCP首部长度。对于一个以太网,一般可以达到1460字节。当然如果对于非本地的IP,这个MSS可能就只有536字节,而且,如果中间的传输网络的MSS更佳的小的话,这个值还会变得更小。
TCP的状态迁移图
TCP的状态图参见书P182页,这个图实在太精彩了(笔要偷懒,好好研究);
2MSL等待状态
TCP状态图中有一个TIME_WAIT等待状态,这个状态又叫做2MSL状态,说的是在TIME_WAIT2发送了最后一个ACK数据报以后,要进入TIME_WAIT状态,这个状态是防止最后一次握手的数据报没有传送到对方那里而准备的(注意这不是四次握手,这是第四次握手的保险状态)。这个状态在很大程度上保证了双方都可以正常结束,但是,问题也来了。
由于插口的2MSL状态(插口是IP和端口对的意思,socket),使得应用程序在2MSL时间内是无法再次使用同一个插口的,对于客户程序还好一些,但是对于服务程序,例如httpd,它总是要使用同一个端口来进行服务,而在2MSL时间内,启动httpd就会出现错误(插口被使用)。为了避免这个错误,服务器给出了一个平静时间的概念,这是说在2MSL时间内,虽然可以重新启动服务器,但是这个服务器还是要平静的等待2MSL时间的过去才能进行下一次连接。
4.5.FIN_WAIT_2状态
这就是著名的半关闭的状态了,这是在关闭连接时,客户端和服务器两次握手之后的状态。在这个状态下,应用程序还有接受数据的能力,但是已经无法发送数据,但是也有一种可能是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,而直到应用层来决定关闭这个状态。
TCP/IP之TCP连接的建立与中止状态分析相关推荐
- TCP/IP详解--学习笔记(10)-TCP连接的建立与中止
TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接.这和前面讲到的协议完全不同.前面讲的所有协议都只是发送数据而已,大多数都不关心发送的数据是不是送到,UDP尤其明显,从编 ...
- 深入理解TCP/IP协议-TCP建立与终止连接
转载自 深入理解TCP/IP协议-TCP建立与终止连接 一.引言 TCP 是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.连接创建与终止的状态变化图如下: ...
- mysql服务器是否支持tcp/ip连接,(3)MySQL客户端与服务端的TCP/IP及socket连接方式-Go语言中文社区...
MySQL客户端与服务端的TCP/IP及socket连接方式 客户端与服务器模型 客户端与服务端模型 TCP/IP方式连接 解释说明 TCP/IP套接字方式是MySQL在任何平台下都提供的连接方式,也 ...
- TCP连接的建立和中止
TCP连接的建立和中止 文章目录 TCP连接的建立和中止 TCP连接的建立 TCP连接的中止 TCP状态转换图 观察分组 TIME_WAIT状态 参考 理解TCP连接的建立和中止,有助于我们理解con ...
- DataSnap如何监控Tcp/IP客户端的连接情况
一个实例,如果客户端是TCP/IP是短连接的情况就没有必要了. 一.GlobVar.pas单元,定义应用系统全局数据类型及变量: 1 unit GlobVar; 2 3 interface 4 5 u ...
- TCP/IP 和 TCP/IP的 三/四次握手
什么是TCP/IP 首先来说,TCP/IP协议是浏览器与服务器链接因特网的协议.浏览器使用TCP/IP协议进入服务器,服务器使用TCP/IP协议来发送HTML文件到浏览器. TCP/IP的作用 TCP ...
- TCP/IP和TCP,UDP
1.TCP/IP协议: 1.1 TCP/IP协议是什么: 很多人认为tcp/ip就是tcp和ip组成的通信协议.其实tcp/ip协议不仅仅指代tcp/ip,它是指一个由FTP,SMTP,TCP,UDP ...
- TOE(TCP/IP Offload / TCP/IP卸载)技术及产品
TOE(TCP/IP Offload / TCP/IP卸载)技术及产品 技术原理 TOE 全称 TCP Offload Engine,是目前主要的网络加速技术,它可以显著的提高网络的数据处理能 力,降 ...
- TCP/IP协议 TCP包深入理解
详细解释TCP/IP标志位 TCP报格式 继续使用TCP/IP协议 TCP浅析中抓到的包进行分析. no Time Source Destination protocal Length info 3 ...
最新文章
- 01、DFT-全面了解如何测试一颗芯片
- logon dialog 的弹出逻辑debug出来了,有很多有用的代码片段
- android什么是回调,Android中的回调是什么?
- c++中的异常---2(异常接口声明,异常变量的生命周期,异常的多态使用)
- 重学java基础第七课:什么是计算机
- 机器学习问题总结(04)
- ECS 控制台诊断系统
- linux下硬盘测速工具hdparm
- iView 实现可编辑表格 1
- Android Multimedia框架总结(二十六)利用FFmpeg进行解码直播流
- python函数后面的点_对python函数后面有多个括号的理解?
- 粒子的自旋数,是否就是弦在膜上的关系
- java jtable 监听_【Java】在JTable中设置鼠标监听器,点击操作对应数据
- iOS中分段控制器与UIScrollView结合使用
- XJOI 9864 金字塔
- 到底是人穷志短,还是志短人穷?
- 7-1 计算π的值 (10分) java
- [week2]每周总结与工作计划
- 如何看待二手服务器?买个二手服务器划算吗?
- 防火墙SNMP服务器、日志服务器等配置(每天分享一些关于防火墙的基本配置,大家一起学习,一起交流下)
热门文章
- Java集合—Deque Stack
- android studio中创建、切换svn分支
- 2017-7-22 NOIP模拟赛
- Linux入门(10)——Ubuntu16.04使用pip3和pip安装numpy,scipy,matplotlib等第三方库
- [改善Java代码]减少HashMap中元素的数量
- [nRF51822] 3、 新年也来个总结——图解nRF51 SDK中的Button handling library和FIFO library...
- 无埋点实现监测的真相——革新还是噱头?
- matlab中特殊符号如希腊字符
- 读郭老师推荐书籍--《原则》
- 关于着色器LinearGradient的使用