TCP的连接建立是一个三次握手过程,目的是为了通信双方确认开始序号,以便后续通信的有序进行。主要步骤如下:
连接开始时,连接建立方(Client)发送SYN包,并包含了自己的初始序号a;
连接接受方(Server)收到SYN包以后会回复一个SYN+ACK包,其中包含了对上一个a包的回应信息ACK,回应的序号为下一个希望收到包的序号,即a+1,然后还包含了自己的初始序号b;
连接建立方(Client)收到回应的SYN包以后,回复一个ACK包做响应,其中包含了下一个希望收到包的序号即b+1。
 
 

TCP终止连接的四次挥手过程如下:
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=a(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态;
服务器收到连接释放报文,发出确认报文,ACK=1,ack=a+1,并且带上自己的序列号seq=b,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态;
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文;
服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=a+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=c,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认;
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=c+1,而自己的序列号是seq=a+1,此时,客户端就进入了TIME-WAIT(时间等待)状态;
服务器只要收到了客户端发出的确认,立即进入CLOSED状态,就结束了这次的TCP连接。
 
 

TCP协议的三次握手-4次挥手的更多相关文章

  1. python摸爬滚打之----tcp协议的三次握手四次挥手

    TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...

  2. tcp协议:三次握手四次挥手详解-转

    https://www.cnblogs.com/welan/p/9925119.html

  3. OSI七层协议&TCP协议(三次握手四次挥手)

    今日内容 python 基础回顾 软件开发架构 网络理论前戏 OSI 七层协议(五层) TCP协议 三次握手与四次挥手 UDP协议 内容详细 一.python 基础回顾 1.基本数据类型 整型 int ...

  4. TCP协议中三次握手

    TCP/IP是互联网相关的各类协议族的总称 TCP/IP协议族分为:应用层,传输层,网络层,数据链路层 应用层:向用户提供应用服务时的通讯的活动 传输层:提供处于网络连接中的两台计算机之间的数据传输 ...

  5. 网络编程——TCP协议的三次握手和四次挥手

    三次握手原理解析 TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND ...

  6. TCP协议的三次握手和四次挥手

    暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...

  7. 深入浅出TCP协议的三次握手过程

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 每一次TCP连接都需要三个阶段:连接建立.数据传送和连接释放.“三次握手”就发生在连接建立阶段. 1.三次握手( ...

  8. TCP协议的三次握手和四次分手

    HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. ...

  9. 通俗大白话来理解TCP协议的三次握手和四次断开

    from : https://blog.csdn.net/Neo233/article/details/72866230?locationNum=15&fps=1%20HTTP%E6%8F%A ...

  10. TCP协议 连接三次握手

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

随机推荐

  1. px转换为rem,响应式js

    (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...

  2. 使用CANAL同步数据

    1.概要 canal 是阿里发布的一个mysql 同步工具,它是模拟 mysql slave 的方式读取binlog,并可以将数据写入到队列中. 如下图:是官方提供的架构图. 2.下载CANAL 下载 ...

  3. 使用Maps SDK添加本地slpk

    SceneView m_sceneView; public void LoadSceneLayerFromSLPK(SceneView sceneView, string slpkPath) { if ...

  4. 如何优雅地让 ASP.NET Core 支持异步模型验证

    前言 在ASP.NET Core官方仓库中有个一直很受关注的问题Please reconsider allowing async model validation.FluentValidation的作 ...

  5. 08C++选择结构(2)

    一.逻辑变量 教学视频 存储类似灯亮或灯灭.是男还是女等结果只有两种可能的数据时,可以使用逻辑型变量. 逻辑型变量用关键字bool定义,所以又称为布尔变量,其值只有两个false(假)和true(真) ...

  6. 用SQL命令查看Mysql数据库大小 统计数据库空间占用

    -- 1. 进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; -- 2. 查询所有数据的大小: select concat( ...

  7. java - 正则表达式替换Spring @RequestMapping URL中的@PathVariable值

    我在接口(只是为了保存常量)中有Spring MVC URL的定义,例如: String URL_X = "/my-url/{id:[0-9]*}"; String URL_Y = ...

  8. ubuntu安装ps命令

    docker容器是debian的镜像,没有ps命令,查个进程没法查. 安装procps包 apt-get install procps

  9. 【转载】 DirectByteBuffer内存释放

    http://www.tianshouzhi.com/api/tutorials/netty/331 我们已经知道,在网络编程中,为了避免频繁的在用户空间与内核空间拷贝数据,通常会直接从内核空间中申请 ...

  10. Qt编写linux上视频流播放器(支持海康大华宇视等各种网络摄像机)

    一.前言 在windows上的视频流播放器有很多,而且各个监控厂家无论大厂还是小厂,基本上都提供了客户端,甚至很多第三方的监控平台软件厂商,也都提供了windows的版本,基本的都没有提供linux版 ...