TCP三次握手 和四次挥手

1 .TCP三次握手(重点)

1.1         TCP报文字段详细说明

1.     【源端口】 ---字段说明(占用16bit,即2个字节),表示网络访问来源处的端口号,即指定了发送端的端口。

2.     【目的端口】---字段说明(占用16bit,即2个字节):表示网络访问目的处的端口号,即指定了接受段的端口号。

说明:由上面可以看出,源端口和目标端口都是占用了16bit/2字节,因此也可以通过计算得知源目标端口范围是2的16次方=65536。

3.     【序列号】---字段说明(占用32bit,即4字节):每一个TCP报文段都会有一个序号,序号字段的值其实是本报文段所发送的数据的第一个字节的序号。这是因为TCP是面向连接的可靠服务,其每一个字节都会对应一个序号,通过序号来确保服务的可靠性和有序性。标识数据包传输的顺序,便于数据包拆分后,进行重新组装。

4.     【确认号】---字段说明(占用32bit,即4字节),确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。简单理解就是发送端发送一个seq序列号x,接收端需要回复一个确认号x+1;并发送一个序列号Y,发送端接收一个seq序列号Y,接收端需要回复一个确认号y+1。

5.     【数据偏移】---字段说明(占用4bit):其实他本质上就是“首部长度”,因为“数据偏移”是指TCP报文段的数据部分的起始处距离TCP报文段的起始处的距离,数据偏移总共占用4bit,因此最大能表示的数值为15,而数据偏移的单位是“4字节”。

置位概念:根据TCP的包头字段,存在三个重要的标识ACK SYN FIN

  • ACK:位数字为1,表示确认收到发送请求,表示确认位。
  • SYN :位数字为1,表达式建立TCP连接。
  • FIN:数字为1,表示断开TCP连接。
  • TCP三次握手建立过程简单说明:

1)       由主机A发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中SYN字段置位1,表示需要建立TCP连接请求。

2)       主机B会回复A 发送的TCP连接请求报文,其中包含seq序列号,也是由回复段随机生成的,并且将回复报文的SYN字段置1,而且会产生ACK验证字段,ack验证字段数值是在A发过来的seq序列号基础上加1进行回复;并且还会回复ack确认控制字段,以便A收到信息时,知晓自己的TCP建立请求已得到确认。

3)       A端收到B端发送的TCP建立请求后,会使自己的原有序列号加1进行再次发送序列号,并且再次回复ACK验证请求,在B段发送过来的seq基础上加1进行回复;同时也会回复ack确认控制字段以便B收到信息时,知晓自己的TCP建立请求已经得到了确认。

1.3         TCP三次握手状态转换说明:

  • 首先,建立连接之前的服务器和客户端的状态都为CLOSED。
  • 服务器创建socket后开始监听,变为LISTEN状态。
  • 客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT。
  • 服务端收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD。
  • 然后,客户端收到ACK,SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED。
  • 服务器收到客户端的ACK后也变为ESTABLISHED。

此时3次握手完成,连接建立。

2 TCP四次挥手过程(重点记忆)

2.1         TCP四次挥手状态转换简单说明:

由于tcp连接时全双工的,断开连接会比建立连接麻烦点。

  • 客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1。
  • 服务端收到FIN后向客户端发送ACK,服务器状态变为CLOSE_AWIT。
  • 客户端收到ACK后就进入FIN_WAIT2的状态,此时连接已经断开了一半,如果服务器还有数据要发送给客户端,就会继续发送。
  • 直到发送完了,就发送FIN报文,此时服务器就进入LAST_ACK状态。
  • 客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态,再过了2MSL时间后进入CLOSED状态,服务器收到客户端的ACK就进入CLOSED状态。

1. 2MSL介绍

主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime

(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。

MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。

 2. time_wait状态作用说明

TIME_WAIT状态存在的理由:

1)可靠地实现TCP全双工连接的终止

在进行关闭连接四路握手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN。

因此客户端必须维护状态信息允许它重发最终的ACK。如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出connectionreset的SocketException)。

因而,要实现TCP全双工连接的正常终止,必须处理终止序列四个分节中任何一个分节的丢失情况,主动关闭的客户端必须维持状态信息进入TIME_WAIT状态。

2)允许老的重复分节在网络中消逝

TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后 也会被送到最终目的地,这个原来的迷途分节就称为lost duplicate。

在关闭一个TCP连接后,马上又重新建立起一个相同的IP地址和端口之间的TCP连接,后一个连接被称为前一个连接的化身  (incarnation),那么有可能出现这种情况,前一个连接的迷途重复分组在前一个连接终止后出现,从而被误解成从属于新的化身。

为了避免这个情况,TCP不允许处于TIME_WAIT状态的连接启动一个新的化身,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时候,来自连接先前化身的重复分组已经在网络中消逝。

图1-1 TCP11种状态集转换图

时间: 07-18

TCP三次握手 和四次挥手的相关文章

TCP三次握手和四次挥手

TCP三次握手和四次挥手 在了解TCP三次握手和四次挥手之前我们先来了解一下TCP的标志位,这样有助于我们理解TCP三次握手和四次挥手的过程 TCP标志位: URG:表示TCP包的紧急指针域有效,用来保证TCP连接不被中断 ACK:表示确认序号有效 PSH:表示Push操作; 所谓Push操作就是指在数据包到达接收端以后, 立即传送给应用程序,不在缓冲区排队 RST:表示连接复位请求; 用来复位那些产生错误的连接 SYN:表示同步序号, 用来建立连接;SYN和ACK搭配使用,请求连接时,SYN=

网络通信 --> TCP三次握手和四次挥手

TCP三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 一.TCP报文格式 如下图: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.(3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含义如下:               (A)URG:紧急指针(urgent

应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题

重要性:必考 一.TCP与UDP的优缺点 ①TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端的可靠传输.对可靠性要求较高的应用层协议,如FTP.Telnet.SMTP.HTTP.POP3 ②UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去

TCP三次握手和四次挥手以及11种状态

TCP三次握手和四次挥手以及11种状态 1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: 1.由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接.(SYN=1,seq=x,x为随机生成数值)2.由服务端回复客户端发送的TCP连接请求报文,其中包含seq

TCP三次握手与四次挥手详解

TCP三次握手与四次挥手详解 @(TCP/IP) [TOC] 1.TCP报文格式 TCP(Transmission Control Protocol) 传输控制协议.TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接. 我们需要知道TCP在网络OSI的七层模型中的第四层(Transport层),IP在第三层(Network层),第二层(Data Link层),在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment. TC

Python中的TCP三次握手和四次挥手过程

tcp三次握手和四次挥手 首先先介绍什么是传输层: 1.三次握手 1) 三次握手的详述 首先Client(客户)端发送连接请求报文,Server(服务器)段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接.(A.B关闭状态CLOSED--B收听状态LISTEN--A同步已发送状态SYN-SENT--B同步收到状态S

[转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道"三次"和"四次",但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方式,来对这个知识点进行"脑残式"讲解(哈哈),期望读者们可以更加简单.直观地理解TCP网络通信交互的本

TCP‘三次握手’和‘四次挥手’(通俗易懂)

概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通过我们 wireshark 抓包工具来分析三次握手 三次握手数据包 第一次握手 建立连接.客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x:(x 是随机生成的一个 int 数值)然后,客户端进入SYN_SEND状态,等待服务器的确认: 第二次握手 服务器收到SYN报文段.服

理解TCP三次握手和四次挥手

TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协议作为运输层协议,但是因为HTTP协议对可靠性的的要求,默认HTTP是基于TCP协议的.若是使用UDP这种不可靠的.尽最大努力交付的运传输层协议来实现HTTP的话,那么TCP协议的流量控制.可靠性保障机制等等功能就必须全部放到应用层来实现)而相比网络层更进一步,传输层着眼于应用进程间的通信,而不是网

浅谈浏览器解析 URL+DNS 域名解析+TCP 三次握手与四次挥手+浏览器渲染页面

(1)浏览器解析 URL 为了能让我们的知识层面看起来更有深度,我们应该考虑下面两个问题了: 从浏览器输入 URL 到渲染成功的过程中,究竟发生了什么? 浏览器渲染过程中,发生了什么,是不是也有重绘与回流? OK,兴致来了,我们就先从 浏览器解析 URL 看起,先来看看当用户输入 URL,到浏览器呈现给用户页面,经历了以下过程: 版本 A: 用户输入 URL 地址. 对 URL 地址进行 DNS 域名解析. 建立 TCP 连接(三次握手). 浏览器发起 HTTP 请求报文. 服务器返回 HTTP