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. drf框架概况-resful接口规范-请求模块-渲染模块-Postman-drf请求生命周期

    drf框架 全称:django-rest- framework 知识点: """ 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码-基于restful ...

  2. Cell theory|Bulk RNA-seq|Cellar heterogeneity|Micromanipulation|Limiting dilution|LCM|FACS|MACS|Droplet|10X genomics|Human cell atlas|Spatially resolved transcriptomes|ST|Slide-seq|SeqFISH|MERFISH

    生物信息学 Cell theory:7个要点 All known living things are made up of one or more cells. All living cells ar ...

  3. bzoj2882工艺(最小表示法)

    O(nlogn)的做法十分显然,有三种可以做到O(nlogn)的:1.最容易的想法:把串扩展成两倍,然后跑一遍SA求后缀数组.2.求后缀同样也可以用SAM去求解,用map存一下.3.最暴力的方法:直接 ...

  4. Codeforces Round #556(Div.1)

    A 容易发现i,i+1至少有一个数出现,于是可以让尽量多的2和奇数出现 #include<bits/stdc++.h> using namespace std; int n,s1,s2; ...

  5. HDU-1828 Picture(扫描线 求矩形并的周长)

    http://acm.hdu.edu.cn/showproblem.php?pid=1828 Time Limit: 6000/2000 MS (Java/Others)    Memory Limi ...

  6. topological space

    \(\underline{Def:}\)A topology space \(\mathcal{X}=(\underline{X},\eth_{x})\)consists of a set \(\un ...

  7. Servlet&JSP复习笔记 04

    1.状态管理 因为HTTP协议是无状态协议,但很多时候需要将客户端和服务端的多次请求当做一个来对待.将多次交互中设计的数据进行保存. 状态:数据 管理:对数据的维护 2.Cookie 客户端向服务器发 ...

  8. ubuntu .bashrc文件添加jdk后无法登录的解决方案

    1. 快捷键(ctl-alt-f2)进入虚拟终端 2. 执行export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/ ...

  9. linux安装源码包报错

    报错代码1如下: [root@xiaoming nginx-]# ./configure --prefix=/soft/nginx- checking for OS + Linux -.el7.x86 ...

  10. webpack4的迁移

    引用于https://www.jianshu.com/p/7ae252f27f09 感觉是突然之间,webpack4的消息就满天飞了,听说打包速度提高了很多,还有最大的噱头是实现了零配置,leader ...