TCP传输连接管理

一、传输连接的三个阶段

1.1.概述

  • 传输连接就有三个阶段,即:连接建立数据传送连接释放

  • 连接建立过程中要解决以下三个问题:

    • 要使每一方能够确知对方的存在。
    • 要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
    • 能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。
  • TCP 连接的建立都是采用客户服务器方式

  • 主动发起连接建立的应用进程叫做客户(client)。

  • 被动等待连接建立的应用进程叫做服务器(server)。


二、TCP 的连接建立

2.1.用三次握手建立 TCP 连接

当客户端A想要访问服务器B上的服务,需要与B建立连接了,就要经历如下三次握手过程:

  • 第一次握手:A先向B发送一个同步数据包(报文)。

    在报文的TCP首部中:标志位:同步SYN为1,表示这是一个请求建立连接的数据包;确认标记位ACK为0,说明该数据包的确认号无效,所以该标志位可省略;序号Seq=xx为所传送数据的第一个字节的序号。

  • 第二次握手:B收到A发送的第一个数据包后,根据标志位SYN=1与ACK=1,判断出为主动建立连接的数据包。若B同意连接,则B发送一个数据包进行回应。

    在数据包的TCP首部中:标志位:同步SYN=1;标志位:确认ACK=1;序号seq=y,y的值由B指定表示B发送数据时的第一个数据字节的序号;确认号ack=x+1,表示已经收到A发送的x个字节数据,并告诉A下次应从数据的第x+1个字节开始发送。

注意区分ACK和ack:在TCP首部中前者为标志位确认 ACK ——占 1 字节,只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。;后者为确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

  • 第三次握手:A收到B的确认之后,再给A发送一个数据包。

    在数据包的TCP首部中:已经没有有效的标志位:同步SYN了(即SYN=0),表示双方已同意建立连接;标志位确认ACK=1,表示收到B的确认数据包;序号seq=x+1,表示发出的数据包就是数据的第x+1个字节;确认号ack=y+1,表示收到了B发送y字节数据,并告诉B下次应从数据的第y+1个字节开始发送。

2.2.为何有第三次握手?

客户端向服务器发出建立连接的请求以及服务器向客户端确认这个请求,这两个数据包(前两次握手)足以证明客户端与服务器之间的网络是畅通的,并且协商数据通信所需要的参数。比如协商接收窗口大小,所支持的数据包最大字节数等。

如果没有最后一个数据包确认(第三次握手),A先发出一个建立连接的请求数据包,由于网络原因绕远路了。A经过设定的超时时间后还未收到B的确认数据包,于是发出第二个建立连接的请求数据包,这次网路通畅,数据包很快到达B,B的确认数据包也很快就到达A。于是A与B开始传输数据,过了一会A第一次发出的建立连接的请求数据包到达了B,B以为是再次建立连接,所以又发出一个确认数据包。由于A已经收到了一个确认数据包,所以会忽略B发来的第二个确认数据包,但是B发出确认数据包之后就要一直等待A的回复,而A永远也不会回复。由此造成服务器资源浪费,这种情况多了B计算机可能就停止响应了。

第三次握手(第三个数据包)作用在于,告诉B计算机,B第二次握手发给A的确认数据包A收到了,是有效的。避免B计算机等待造成资源浪费。随后A与B可进行下一步的通信。

2.3.三次握手建立TCP连接过程的各状态

  • A发出请求建立连接的数据包之后进入SYN-SENT状态,表示发送了请求建立连接的同步数据包。

  • B收到A发出的请求建立连接的数据包之后,结束LISTEN状态,进入SYN-RCVD状态并向A发出确认数据包。

  • A收到确认数据包之后,结束SYN-SENT状态,进入ESTABLISHED状态,并向B发送确认数据包。

  • B收到A的确认数据包之后,结束SYN-RCVD状态,进入ESTABLISHED状态。

A与B都进入ESTABLISHED状态之后,开始传输数据,由此完成三次握手。

查看这些状态

可通过:

netstat -n

在命令行窗口查看计算机建立的会话的装态。由于建立TCP连接的三次握手过程非常快,我们可以通过访问一个不存在的网址来查看:比如http://192.168.80.200

可以看到建立TCP连接时,本计算机访问了该地址的80端口(对应Web服务),并且TCP连接状态为SYN-SENT。此外本计算机还有其他已经建立的TCP连接,状态为ESTABLISHED。

如何查看SYN-RCVD状态呢?可通过模拟SYN攻击(大量模拟虚构地址与本计算机建立会话)即可查看该状态:

框内为SYN攻击虚构的地址,可看到建立TCP连接的会话都处于SYN-RECEIVED状态。

那么平常如果看到计算机有大量处于SYN-RECEIVED状态的会话说明有人利用SYN攻击器在攻击你的电脑。


三、TCP的连接释放

3.1.使用四次挥手释放TCP连接

数据传输结束后,通信的双方都可主动释放连接。下为A主动释放TCP连接。

  • 第一次挥手:首先A向B发送连接释放请求报文(数据包),并停止发送数据。

    在连接释放报文(数据包)的TCP首部中:标志位:终止FIN=1,意味着A要主动释放A—>B的TCP连接;序号位seq为u,u值由A指定。随后等待B的确认。

  • 第二次挥手:B收到连接释放报文之后,给A发送确认报文,此时TCP服务器进程通知高层应用进程,这样从A到B这个方向上的连接就释放了,TCP连接处于半关闭状态。此时A没有数据要发给B了,但是B还有数据要发送给A,A仍可以接收。

    在确认报文的TCP首部中:标志位:确认ACK=1,表示收到了A发送的数据包,同意A释放连接;序号位seq=v,v值由B指定;确认号ack=u+1,表示已经收到A发送的u个字节数据,并告诉A下次应从数据的第u+1个字节开始发送,下面同理;此时B还可以向A传输数据。

  • 第三次握手:若B已经没有向A发送的数据了,其应用进程就通知TCP释放连接,并向A发送确认报文。

    在确认报文的TCP首部中:标志位:确认ACK=1,表示B已经把需要发给A的数据发完了;标志位:终止FIN=1,意味着B要释放B—>A的TCP连接;序号seq=w,w值由B指定;确认号ack=u+1;此后B不再向A发送数据,但能接收数据。

  • 第四次挥手:A收到B的连接释放报文段后,向B发出确认报文。

    在确认报文的TCP首部中:标志位:确认ACK=1,表示收到B的确认报文,并同意B释放连接;序号seq=u+1;确认号ack=w+1;

由此通过四次挥手释放了TCP连接。

TCP传输连接管理的更多相关文章

  1. 运输层8——TCP运输连接管理

    目录 1. TCP的连接建立 2. TCP的连接释放 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控 ...

  2. 三报文握手 四报文握手 TCP运输连接管理

    三报文握手 四报文握手  TCP运输连接管理

  3. 【TCP】连接管理

    TCP连接管理   本节将介绍一条TCP连接是如何建立和拆除的.此处假设客户机A上面的一个进程想要和服务 器B上的一个进程建立一条TCP连接.本文前面介绍的是比较正常的连接和拆除,特殊的会在后面介绍. ...

  4. [TCP/IP] TCP的传输连接管理

    1.连接建立=>数据传输=>连接释放 2.主动发起连接的是客户端,被动接受连接的是服务器 3.三次握手 客户端 ==> SYN是1同步 ,ACK确认标志是0,seq序号是x ==&g ...

  5. TCP的连接管理

    创建连接:(三次握手) 第一步: 客户端向服务器发送一个报文,该报文不含有数据段,SYN=1,随机产生sequence number(随机产生可用于避免某些安全性攻击) 第二步: 服务器收到报文,为这 ...

  6. linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms

    changing a readonly file (linu single user mode)

  7. TCP连接管理(TCP Connection Management)

    在最近的求职面试过程中,关于"建立TCP连接的三次握手"不止一次被问到了,虽然我以前用同样的问题面试过别人,但感觉还是不能给面试官一个很清晰的回答.本文算是对整个TCP连接管理做一 ...

  8. TCP系列02—连接管理—1、三次握手与四次挥手

    一.TCP连接管理概述 正如我们在之前所说TCP是一个面向连接的通信协议,因此在进行数据传输前一般需要先建立连接(TFO除外),因此我们首先来介绍TCP的连接管理. 通常一次完整的TCP数据传输一般包 ...

  9. 前端学HTTP之连接管理

    前面的话 HTTP连接是HTTP报文传输的关键通道.要掌握HTTP就需要理解HTTP连接的来龙去脉以及如何使用这些连接 如果想查看一个网页,浏览器收到URL时,会执行下图所示的步骤.将服务器的IP地址 ...

随机推荐

  1. ZZJ_淘淘商城项目:day03(淘淘商城02 - 后台系统功能实现)

    1.   今日大纲 1.  学习Nginx的使用 2.  实现商品的管理 a)       新增商品 b)       查询商品列表 c)       编辑商品 d)       删除商品 e)    ...

  2. vue slot插槽v-show不控制显示隐藏

    vue中想控制插槽的显示隐藏,用v-show是不起任何作用的,改用v-if 可以生效.

  3. [LC] 207. Course Schedule

    There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...

  4. RHEL安装rails后启动报错

    [root@redhat7 demo]# rails server/usr/local/rvm/gems/ruby-2.4.1/gems/bundler-1.16.0.pre.2/lib/bundle ...

  5. day09-正侧表达式

    while True: phone_num = input('please input your phone_num:') if len(phone_num) == 11 \ and phone_nu ...

  6. crm项目-业务实现

    ###############  crm业务    ############### """ 校区管理,部门管理,课程管理, 这三个都比较简单 1,只需要展示校区名称,这是 ...

  7. Rearrangement

    In a two dimensional array of integers of size 2×n2 \times n2×n, is it possible to rearrange integer ...

  8. Redhat6更改yum源 (转)

    最近虚拟机中安装了redhat6.3企业版,自带的yum用不起来,软件都找不到. 网上搜了一下说是没付钱...,需要改下yum源.操作步骤如下: 1.切换到yum源存放目录[root@rhel6 ~] ...

  9. 网站爬取-案例三:今日头条抓取(ajax抓取JS数据)

    今日头条这类的网站制作,从数据形式,CSS样式都是通过数据接口的样式来决定的,所以它的抓取方法和其他网页的抓取方法不太一样,对它的抓取需要抓取后台传来的JSON数据,先来看一下今日头条的源码结构:我们 ...

  10. Fire-Fighting Hero(多源最短路和单源最短路)

    题:https://nanti.jisuanke.com/t/41349 分析:对于hero来说,走单源最短路,然后遍历dis数组中的最大值即可找到,对于消防员来说,走多源最短路,只需要建个超级起点连 ...