【网络】TCP 三次握手和四次挥手

原创 2018年01月04日 15:49:13

      先给大家来一张包含 TCP 三次握手和四次挥手的图:


建立连接(三次握手)的过程:

           1.      客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的段1。

                     客户端发出段1,SYN位表示连接请求。序号是1000,这个序号在网络通讯中用作临时的地址,每发一个数据字

节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN位和FIN位也

要占一个序号,这次虽然没发数据,但是由于发了SYN位,因此下次再发送应该用序号1001。mss表示最大段尺寸,如果一个段

太大,封装成帧后超过了链路层的最大帧长度,就必须在IP层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服

务器端发来的段不要超过这个长度。

          2.      服务器端回应客户端,是三次握手中的第2个报文段,同时带ACK标志和SYN标志。它表示对刚才客户端SYN的回

应;同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯。服务器发出段2,也带有SYN位,同时置ACK位表示确

认,确认序号是1001,表示“我接收到序号1000及其以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端的

连接请求,同时也给客户端发出一个连接请求,同时声明最大尺寸为1024。

           3.      客户必须再次回应服务器端一个ACK报文,这是报文段3。

                    客户端发出段3,对服务器的连接请求进行应答,确认序号是8001。在这个过程中,客户端和服务器分别给对方发

了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为“三

次握手(three-way-handshake)”。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等。

在TCP通讯中,如果一方收到另一方发来的段,读出其中的目的端口号,发现本机并没有任何进程使用这个端口,就会应答一个

包含RST位的段给另一方。例如,服务器并没有任何进程使用8080端口,我们却用telnet客户端去连接它,服务器收到客户端发

来的SYN段就会应答一个RST段,客户端的telnet程序收到RST段后报告错误

           Connection refused:

            $ telnet 192.168.0.200 8080

            Trying 192.168.0.200...

            telnet: Unable to connect to remote host: Connection refused

数据传输的过程:

            1.      客户端发出段4,包含从序号1001开始的20个字节数据。

           2.      服务器发出段5,确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发送序号1021开始的数

据,服务器在应答的同时也向客户端发送从序号8001开始的10个字节数据,这称为piggyback。

            3.      客户端发出段6,对服务器发来的序号为8001-8010的数据表示确认收到,请求发送序号8011开始的数据。在数据

传输过程中,ACK和确认序号是非常重要的,应用程序交给TCP协议发送的数据会暂存在TCP层的发送缓冲区中,发出数据包给

对方之后,只有收到对方应答的ACK段才知道该数据包确实发到了对方,可以从发送缓冲区中释放掉了,如果因为网络故障丢失

了数据包或者丢失了对方发回的ACK段,经过等待超时后TCP协议自动将发送缓冲区中的数据包重发。

关闭连接(四次挥手)的过程:

     由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来

终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行

关闭的一方将执行主动关闭,而另一方执行被动关闭。

           1.      客户端发出段7,FIN位表示关闭连接的请求。

           2.      服务器发出段8,应答客户端的关闭连接请求。

           3.      服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求。

           4.      客户端发出段10,应答服务器的关闭连接请求。

      建立连接的过程是三次握手,而关闭连接通常需要4个段,服务器的应答和关闭连接请求通常不合并在一个段中,因为有连接

半关闭的情况,这种情况下客户端关闭连接之后就不能再发送数据给服务器了,但是服务器还可以发送数据给客户端,直到服务

器也关闭连接为止。


版权声明:本文为博主原创文章,未经博主允许不得转载。

计算机网络——TCP协议中的三次握手四次挥手以及11种状态转换

TCP的传输连接分为3个阶段:连接建立(三次握手)、数据传送和连接释放(四次挥手)。TCP传输连接的管理就是使传输连接的建立和释放都能正常地进行。...
  • a987073381
  • a987073381
  • 2016年08月14日 20:37
  • 10847

Linux网络编程——浅谈 TCP 三次握手和四次挥手

三次握手 在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。   第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEN...
  • lianghe_work
  • lianghe_work
  • 2015年06月11日 16:12
  • 3712

理论经典:TCP协议的3次握手与4次挥手过程详解

摘要: 本文将分别讲解经典的TCP协议建立连接(所谓的“3次握手”)和断开连接(所谓的“4次挥手”)的过程。 1、前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与...
  • omnispace
  • omnispace
  • 2016年09月29日 14:42
  • 7637

TCP三次握手和四次挥手

  • 2016年09月16日 22:55
  • 378KB
  • 下载

【计算机网络】TCP三次握手和四次挥手

一、TCP简介         TCP(传输控制协议,transmission control protocol)是可靠的、面向连接的数据传输协议,需要通过三次握手建立通信信道,他会把长数据切分成小...
  • reliveIT
  • reliveIT
  • 2015年04月07日 16:14
  • 1150

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

TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,即在收发数据钱 ,都需要与对面建立可靠的链接,这也是面试经常会问到的TCP的三次握手以及TCP的四次...
  • u012758088
  • u012758088
  • 2017年04月08日 14:43
  • 361

计算机网络基础(四)TCP协议中的三次握手和四次挥手(图解)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的。 首先Client端发送连接请求报文,Server段接受连接后回...
  • wuseyukui
  • wuseyukui
  • 2014年04月23日 22:46
  • 1419

Linux网络编程——浅谈 TCP 三次握手和四次挥手

一、tcp协议格式 二、三次握手 在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。  ...
  • shixin_0125
  • shixin_0125
  • 2017年12月26日 00:04
  • 71

linux网络编程之tcp的三次握手和四次挥手

一 .tcp协议的通信tcp的通信过程分为三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道下图为tcp的通信过程示意图: 建立tcp连接通道:三次握手 断开tcp连接通道:四次挥手二...
  • someday1314
  • someday1314
  • 2017年06月20日 15:29
  • 286

Linux网络编程——浅谈 TCP 三次握手和四次挥手

三次握手(three times handshake;three-way handshake)所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确...
  • tennysonsky
  • tennysonsky
  • 2015年05月10日 17:27
  • 4411
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【网络】TCP 三次握手和四次挥手
举报原因:
原因补充:

(最多只允许输入30个字)