一、TCP协议简述

TCP协议位于传输层用来建立传输数据的通道以及传输数据,那么在这一层的tcp协议就涉及到客户端与服务端通信的连接,数据的传输、关闭连接。

  通信的连接使用的就是客户端与服务端的三次握手,一旦三次握手成功就建立了双方的通信通道;接着就可以互相通信传输数据了;最后传输数据完成后断开双方通道,通过四次挥手。

  上图中简单的画出建连接的三次握手、数据传输、断开连接的四次挥手过程。上图中涉及到一些参数,这里做一些了解。

参数 含义
SYN 请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
seq 占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号
ACK 确认号是否有效,一般置为1。(ACK=0时,确认号无效)
FIN 用来释放(断开)一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

  注意:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

二、三次握手

  • 第一次握手

客户端发送发送SYN包到服务器,请求建立连接,并进入SYN_SENT状态,等待服务器确认;

  • 第二次握手

服务端收到客户端发送的SYN包后进行确认(将ACK的值置为收到的序号+1),并且服务端再给客户端发送ACK,告诉客户端自己已经收到并且确认了,然后服务端进入SYN_RCVD状态;

  • 第三次握手

客户端收到服务端的SYN和ACK包后,向服务器发送确认包ACK(ack=x+2),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

三、四次挥手

四次挥手是客户端和服务端数据交互完毕进行断开连接所需要做的工作。

  • 第一次挥手

客户端发送一个FIN,用来关闭客户端和服务端之间的数据传输,此时客户端进入FIN_WAIT_1状态。

  • 第二次挥手

服务端收到客户端的FIN后,发送一个ACK给客户端表示确认,确认号序号为收到序号+1(x+2),此时服务端进入CLOSE_WAIT状态。

  • 第三次挥手

服务端向客户端发送一个FIN,用来关闭服务端到客户端的数据传输,此时服务端进入LAST_ACK状态。

  • 第四次挥手

客户端收到服务端发送过来的FIN,进入TIME_WAIT状态,并且发送一个ACK给服务端,确认序号为收到序号+1(y+2),服务端进入CLOSED状态,完成四次挥手。

TCP协议之三次握手四次挥手的更多相关文章

  1. 软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)

    一.网络编程 软件开发架构 C/S架构 C:客户端 想体验服务的时候才会去找服务端体验服务 S:服务端   24小时不间断的提供服务,即时监听,随时待命 B/S架构 B:浏览器    想体验服务的时候 ...

  2. TCP协议—三次握手四次挥手的原理<转>

    三次握手四次挥手的原理   TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三 ...

  3. Tcp协议三次握手四次挥手

    一.什么是TCP TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的.可靠的. 基于IP的传输层协议.TCP在IP报文的协议号是6. 二.什 ...

  4. TCP协议 三次握手四次挥手

    当某个应用端想基于TCP协议与另一个应用端通信时,它会发送一个通信请求. 这个请求必须被送到一个确切的地址.在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) ...

  5. TCP协议之三次握手与四次挥手

    TCP协议是TCP/IP体系中核心一个协议,该协议比起IP协议,ICMP协议,UDP协议都更复杂,因此这篇文章主要分析TCP协议在建立连接和断开连接的时候,状态转移以及报文段的内容. 下面,先放一张T ...

  6. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  7. 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  8. [na]TCP的三次握手四次挥手/SYN泛洪

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

  9. TCP/IP协议 | TCP协议 | UDP协议 | 三次握手四次挥手

    TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP.SMTP.TCP.UDP.IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP ...

随机推荐

  1. ueditor 复制word里面带图文的文章,图片可以直接显示

    图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码 目前限chrome浏览器使用,但是项目要求需要支持所有的浏览器,包括Windows和macOS系统.没有办 ...

  2. Android签名机制之---签名验证过程详解

    一.前言 今天是元旦,也是Single Dog的嚎叫之日,只能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是如何验证一个Apk的签名.在前一篇文章中我们 ...

  3. stack1顺序栈

    顺序栈 #include<iostream> using namespace std; #define increasesize 10 template <class Object& ...

  4. sql语句insert into where 错误解析

    sql语句中,insert into 代表得是插入一条新得数据,全新得数据,所以你这样得写法是错误得,比如: "insert into klkl_Service_shop(name_real ...

  5. Oracle11g数据库在Win系统下的安装

    首先将从Oracle官网下载的两个安装包解压到同一个文件夹下,比如解压到database. 点击setup进行安装. (1)配置安全更新 选择是(不指定邮件) (2)安装选项,选择创建和配置数据库. ...

  6. 【转】 C语言深度解剖读书笔记(1.关键字的秘密)

    本文出处:http://blog.csdn.net/mbh_1991/article/details/10149805 开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有 ...

  7. JavaScript中的十种操作符

    ①   一元操作符(参与的只有一个变量) 前置递增递减(语句解析到递增/递减时值就被改变了) 后置递增递减(整个语句执行后值再改变) 递增递减也可用于字符串,布尔值,对象等,结果都将是数值:   ;v ...

  8. day37—javascript对表格table的操作应用(二)

    转行学开发,代码100天——2018-04-22 昨天学习了JavaScript对table的基本操作,包括表格的创建,表格元素的获取,隔行换色及鼠标动作等.今天主要学习table的搜索查询及排序操作 ...

  9. mysql定时备份shell脚本

    #!/bin/bash #每天早上4点, mysql备份数据 # backup.sh #crontab -e # * * * /home/erya/run/moniter/mysql_backup.s ...

  10. MySQL 查询语句--------------进阶5:分组查询

    #进阶5:分组查询 /* select 分组函数,列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [order by 子句] 注意: 查询 ...