TCP的三次握手与四次释放

TCP的三次握手与四次释放

一、名词解释

    序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
    确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
    确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
    同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
    终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

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

二、三次握手过程

1)主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x);
   2)主机B收到请求后,会发回连接确认数据包。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始序列号seq(B)=y,以及主机B对主机A初始序列号的确认号ack(B)=seq(A)+1=x+1)
   3)第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个序列号seq(A)=x+1;确认号为ack(A)=y+1的报文;

三、四次释放

假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下:

1) 关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u

  2) 服务器收到这个FIN,它发回一个ACK,确认号ack为收到的序号加1。
   3) 关闭服务器到客户端的连接:也是发送一个FIN给客户端。
   4) 客户段收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加1。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭

主机A发送FIN后,进入终止等待状态, 服务器B收到主机A连接释放报文段后,就立即给主机A发送确认,然后服务器B就进入close-wait状态,此时TCP服务器进程就通知高层应用进程,因而从A到B的连接就释放了。此时是“半关闭”状态。即A不可以发送给B,但是B可以发送给A。
  此时,若B没有数据报要发送给A了,其应用进程就通知TCP释放连接,然后发送给A连接释放报文段,并等待确认。A发送确认后,进入time-wait,注意,此时TCP连接还没有释放掉,然后经过时间等待计时器设置的2MSL后,A才进入到close状态。

时间: 2024-10-20 14:56:49

TCP的三次握手与四次释放的相关文章

TCP/IP 三次握手,四次断开

TCP/IP 三次握手,四次断开 一.TCP报文格式                     TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷 本. 下面是TCP报文格式图: 图1-1 TCP报文格式 上图中有几个字段需要重点介绍下:1.序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.2.确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效(Ack=Seq+1).3.标志位:共6个,即URG.ACK.PSH.R

抓包分析TCP的三次握手和四次握手

问题描写叙述: 在上一篇<怎样对Android设备进行抓包>中提到了,server的开发者须要我bug重现然后提供抓包给他们分析.所以抓好包自己也试着分析了一下.发现里面全是一些TCP协议和HTTP协议.所以要想进行抓包分析,必须先了解TCP的原理.这里介绍了TCP的建立连接的三次握手和断开连接的四次握手. 问题分析: 1.TCP建立连接的三次握手 1.1前言:介绍三次握手之前,先介绍TCP层的几个FLAGS字段,这个字段有例如以下的几种标示 SYN表示建立连接, FIN表示关闭连接. ACK

TCP的三次握手与四次挥手

最近在看一些Tcp网络编程方面的内容,不免涉及客户端和服务器交互的内容,其中最经典的应该是TCP的三次握手和四次挥手了. 背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信.但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据.IP协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程.而端到端的通信才应该是应用进程之间的通信. UDP,在传送数据前不需要先建立连接,远地的主机在

TCP/IP三次握手与四次挥手的正确姿势

A 理解TCP/IP三次握手与四次挥手的正确姿势https://www.cnblogs.com/lms0755/p/9053119.html B 四次挥手过程理解 https://blog.csdn.net/qq_38950316/article/details/81087809 C TCP三次握手四次挥手详解http://www.cnblogs.com/zmlctt/p/3690998.html 原文地址:https://www.cnblogs.com/kelelipeng/p/1021678

C/S架构,osi五层协议,TCP的三次握手与四次挥手

1.C/S B/S架构 C:client 客户端 B:Browser 浏览器 S:server 服务端 C/S 客户端与服务器之间的架构:QQ,微信,游戏,App的都属于C/S架构 优点:安全性高,个性化设置,功能全面,响应速度快 缺点:开发成本高,维护成本高,面向的客户固定 B/S 浏览器与服务器之间的架构:属于C/S架构,最近几年比较流行的特殊的C/S架构 优点:开发维护成本低,面向用户广泛 缺点:安全性相对低,响应速度相对慢,个性化的设置单一 2.互联网通信的原理 1.物理连接介质将两台电

三次握手与四次释放

2016-06-13 21:17 TCP/IP协议是一个协议簇,里面包括很多协议的,UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了. UDP(User Data Protocol,用户数据报协议) (1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上.在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度.计算机的能力和传输带宽的限制:在接收端

简析TCP的三次握手与四次分手

TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功.首先来看看OSI的七层模型: 我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层:在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Se

TCP协议三次握手和四次挥手

http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

HTTP协议中TCP的三次握手,四次挥手总结

建立TCP需要三次握手才能建立,而断开连接则需要四次挥手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,