參考书籍:《计算机网络第5版》

TCP是面向连接的协议,採用C/S模型建立连接,由client主动发起连接请求,server端允许请求的模式建立连接,通常称为三次握手建立TCP连接。

准备条件:B的server端先创建传输控制块TCB。准备接受client进程的连接请求,此时server进程处于LISTEN(监听)状态。

SYN(synchronous):同步的

1、A的client进程首先创建传输控制块TCB,然后向server端发出连接请求报文段(SYN=1,seq=x)。

此时client进入SYN-SENT(同步已发送)状态。

2、server端收到client的连接请求报文段后,如允许连接,则向client发送确认(SYN=1,ACK=1,seq=y,ack=x+1)。此时服务端进入SYN-RCVD(同步接收)状态。

3、client进程收到server端的确认后。还要向server端给出确认(ACK=1,seq=x+1,ack=y+1)。

A进入ESTABLISHED(已建立连接)状态。

当B收到确认后,server端进程也进入ESTABLISHED状态。

至此。TCP连接已经全然建立。

相同关于TCP连接释放的过程也存在四次握手经过,简述例如以下。

初始状态:client与server端均处于ESTABLISHED状态。

1、client进程向server端发出连接释放报文段(FIN=1,seq=u)。并停止发送数据。主动关闭TCP连接。

此时进入FIN-WAIT-1(终止等待1)状态。等待server端的确认

2、server端收到client的连接释放报文段后。发出确认(ACK=1,seq=v,ack=u+1)。然后server端进入CLOSE-WAIT(关闭等待)状态。A收到来自B的确认后。进入FIN-WAIT-2(终止等待2)状态。此时TCP连接处于半关闭(half-close)状态。即A已经不能再发数据给B了。但B依旧能够发数据给A。

3、若B没有要向A发送的数据,此时server端向client发出连接释放报文段(FIN=1,seq=w,ack=u+1)。此时server端进入LAST-ACK(最后确认)状态。等待A的确认。

4、client收到server端的连接释放报文段后,发出确认(ACK=1。seq=u+1。ack=w+1)。此时client进入TIME-WAIT(时间等待)状态。server端收到确认后,随即关闭连接(CLOSED)。client经过2MSL后关闭TCP连接。

至此,整个TCP连接释放。

TCP从连接到释放过程全解的更多相关文章

  1. TCP的连接和释放过程

    TCP的连接和释放过程 1.三次握手的过程 1)主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x.(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接 ...

  2. TCP建立连接和释放连接过程

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP建立连接需要三次握手,释放连接需要四次握手. 1.TCP整 ...

  3. TCP建立连接与释放连接过程中的几个问题

    TCP为何采用三次握手来建立连接,若采用两次握手可以吗,请说明理由? 不可以.采用三次握手是为了防止失效的连接请求报文段突然又传送到服务器,从而发生错误.当客户端发出的连接请求报文段由于某些原因没有及 ...

  4. TCP建立连接和释放的过程,及TCP状态变迁图

    一.TCP报文格式 下面是TCP报文格式图: 重要字段介绍: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占 ...

  5. TCP建立连接与释放连接

    1.建立连接:(三次握手) (1)客户端发送一个SYN包给服务器,然后等待应答. (2)服务器端回应给客户端一个ACK=1.SYN=1的TCP数据段. (3)客户必须再次回应服务器端一个ACK确认数据 ...

  6. TCP/IP协议的数据传输过程详解——IP与以太网的包收发操作

    MTU:一个网络包的最大长度,以太网中一般是1500字节:(含有头部长度,包括IP头部,TCP头部,不包括MAC头部) MSS:除去头部后,一个网络包所能容纳的TCP的数据的最大长度 下图为TCP/I ...

  7. 专家揭秘:STM32启动过程全解

    电子发烧友网核心提示:本文主要阐述了STM32启动过程全面解析,包括启动过程的介绍.启动代码的陈列以及深入解析. 相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方 ...

  8. TCP传输连接建立与释放详解

    一直以来有许多读者朋友对TCP的传输连接建立和释放过程不是很理解,而这又是几乎网络认证中必考的知识点,包括软考.CCNA\CCNP.H3CNA\H3CNE等,为此再把笔者年度巨作,广受好评的——< ...

  9. TCP建立连接三次握手和释放连接四次握手

    TCP建立连接三次握手和释放连接四次握手     [转载]http://blog.csdn.net/guyuealian/article/details/52535294   在谈及TCP建立连接和释 ...

随机推荐

  1. C 语言指针 5 分钟教程

    指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里“引用”表示计算机内存地址.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具 ...

  2. python类访问限制

    1.类的访问限制:要让内部属性不被外部访问,可以把在属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问 ...

  3. P1387 最大正方形&&P1736 创意吃鱼法

    P1387 最大正方形 P1736 创意吃鱼法 两道类似的$DP$ 转移方程基本上类似于$f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))$ 考虑构成 ...

  4. C++操作MYSQL遇到的一些问题

    首先 我使用的是 vcpkg<不知道的可以进行百度 可以剧透一下,这个对Visual Studio使用一些C++的轮子太方便了, 上面是我装的一些库<大大安利vcpkg 安装时一定要使用p ...

  5. thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO

    为大家分享一个阿里大于短信发送接口: 首先创建一个发送模型(Send.php): <?php namespace app\index\model; use think\Validate; cla ...

  6. C#基础学习(二)

    ---恢复内容开始--- 面向对象 (类是不占内存,实例占内存) C#与python不用可以直接从另一个文件直接实例化一个类,不需要导包:                                ...

  7. shell脚本语言基本命令

    shell脚本语言基本命令脚本:可运行,不需要编译 #vi 1.sh[编写:i(顶格)或o(换一行)]#! /bin/bash##this is a test shell script##Writte ...

  8. 树莓派 - 通过sysfs操控GPIO

    点亮或熄灭LED 硬件上,一个LED灯接在pi的Pin-25.  该引脚为BCM的GPIO26 $ gpio readall +-----+-----+---------+------+---+--- ...

  9. c++基础_字符串对比

    #include <iostream> #include <string.h> #include <algorithm> using namespace std; ...

  10. Python实现图片切割

    import os from PIL import Image def splitimage(src, rownum, colnum, dstpath): img = Image.open(src) ...