TCP连接的建立和关闭

摘要:
TCP连接的关闭TCP使用四握手协议来关闭连接。这是由TCP的半关闭引起的。由于TCP连接是全双工的,因此必须分别关闭每个方向。TCP在发送未处理的消息段后向另一TCP发送FIN消息,然后等待另一TCP确认FIN,并在收到确认后关闭连接。

TCP连接的建立

TCP连接的建立和关闭第1张

TCP使用三次握手( three-way handshake )协议来建立连接。三次握手协议可以完成两个重要功能:它确保连接双方做好传输准备,并使双方统一了初始顺序号。

这三次握手为:
1.请求端(通常称为客户)发送一个 SYN 报文段( SYN 为 1 )指明客户打算连接的服务器的端口,以及初始顺序号( ISN )。
2.服务器发回包含服务器的初始顺序号的 SYN 报文段( SYN 为 1 )作为应答。同时,将确认号设置为客户的 ISN 加 1 以对客户的 SYN 报文段进行确认( ACK 也为 1 )。
3.客户必须将确认号设置为服务器的 ISN 加 1 以对服务器的 SYN 报文段进行确认( ACK 为 1 ),该报文通知目的主机双方已完成连接建立。

TCP连接的关闭

TCP连接的建立和关闭第2张
TCP使用四次握手( four-way handshake )协议来关闭连接。这是因为 TCP 的半关闭( half-close )造成的。

由于一个 TCP 连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。关闭的原则就是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向连接。当一端收到一个 FIN ,它必须通知应用层另一端已经终止了那个方向的数据传送。

从一方的 TCP 来说,连接的关闭有三种情况:

1.本方启动关闭
  收到本方应用进程的关闭命令后, TCP 在发送完尚未处理的报文段后,发 FIN = 1 的报文段给对方,且 TCP 不再受理本方应用进程的数据发送。在 FIN 以前发送的数据字节,包括 FIN ,都需要对方确认,否则要重传。注意 FIN 也占一个顺序号。一旦收到对方对 FIN 的确认以及对方的 FIN 报文段,本方 TCP 就对该 FIN 进行确认,在等待一段时间,然后关闭连接。等待是为了防止本方的确认报文丢失,避免对方的重传报文干扰新的连接。

2.对方启动关闭
  当 TCP 收到对方发来的 FIN 报文时,发 ACK 确认此 FIN 报文,并通知应用进程连接正在关闭。应用进程将以关闭命令响 应。 TCP 在发送完尚未处理的报文段后,发一个 FIN 报文给对方 TCP ,然后等待对方对 FIN 的确认,收到确认后关闭连接。若对方的确认未及时到达,在等待一段时间后也关闭连接。

3.双方同时启动关闭
  连接双方的应用进程同时发关闭命令,则双方 TCP 在发送完尚未处理的报文段后,发送 FIN 报文。各方 TCP 在 FIN 前所发报文都得到确认后,发 ACK 确认它收到的 FIN 。各方在收到对方对 FIN 的确认后,同样等待一段时间再关闭连接。这称之为同时关闭( simultaneous close )。

TCP连接的状态变迁

TCP连接的建立和关闭第3张

状 态           描 述

CLOSED          关闭状态,没有连接活动或正在进行

LISTEN          监听状态,服务器正在等待连接进入

SYN RCVD        收到一个连接请求,尚未确认

SYN SENT        已经发出连接请求,等待确认

ESTABLISHED     连接建立,正常数据传输状态

FIN WAIT 1      (主动关闭)已经发送关闭请求,等待确认

FIN WAIT 2      (主动关闭)收到对方关闭确认,等待对方关闭请求

TIMED WAIT      完成双向关闭,等待所有分组死掉

CLOSING         双方同时尝试关闭,等待对方确认

CLOSE WAIT      (被动关闭)收到对方关闭请求,已经确认

LAST ACK        (被动关闭)等待最后一个关闭确认,并等待所有分组死掉

转自:http://hi.baidu.com/age2cn/blog/item/dbd1f0f200aa05c97831aa2d.html

免责声明:文章转载自《TCP连接的建立和关闭》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇appium+selenium自动化测试UI踩坑记录之--判断元素是否存在创建telegram 机器人 并发送消息下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从输入url到显示页面,都经历了什么?

我们在打开浏览器访问一个网站时 究竟都发生了什么 第一步:我们会在浏览器地址栏中输入一个url 第二步:浏览器会先查看浏览器缓存系统缓存 -> 路由器缓存 如果缓存中存有先前访问过的数据,则会直接显示在屏幕中;没有的话,则进行第三步操作 第三步:在发送http请求前,需要域名解析(DNS解析)【DNS域名系统】[可以将域名和IP地址相互映射的...

TCP keepalive长连接心跳保活

比如:客户端与服务端进行握手时,经常无法握手成功,收不到回复; 需要建立保活机制。 1. 服务端Linux服务器新增系统内核参数配置。 在/etc/sysctl.conf文件中再添加如: #允许的持续空闲时长,在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期,默认值为7200s...

TCP接收窗口的调整算法(下)

本文内容:分析TCP接收窗口的调整算法,主要是接收窗口的调整算法和总结。 内核版本:3.2.12 作者:zhangskd @ csdn blog 接收窗口的调整算法 经过一系列的前奏,我们终于到了最关键的地方。接下来我们可以看到,接收窗口的大小 主要取决于剩余的接收缓存,以及接收窗口当前阈值。 决定接收窗口大小的函数tcp_select_window()在...

Linux下查看Nginx的并发连接数和连接状态-乾颐堂

Linux下查看Nginx等的并发连接数和连接状态。 1、查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 或者: netstat -n | awk '/^tcp/ {++state[$NF...

nmap 高级扫描用法

nmap提供了四项基本功能(主机发现、端口扫描、服务与版本侦测、OS侦测)及丰富的脚本库。Nmap既能应用于简单的网络信息扫描,也能用在高级、复杂、特定的环境中:例如扫描互联网上大量的主机;绕开防火墙/IDS/IPS;扫描Web站点;扫描路由器等等。简要回顾Nmap简单的扫描方式:全面扫描:nmap-T4 -A targetip主机发现:nmap-T4 -...

Python 网络通信协议(互联网协议)

一. 操作系统基础 操作系统(Operatin System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在"裸机"上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行. 计算机组成: 硬件-->操作系统(OS)-->应用软件 二. 网络通信原理(参考文档) 2.1 互联网的本质就是一系列网络协议(1)概述当...