`

HTTP TCP握手 (转载)

 
阅读更多
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:
      1.浏览器将自己支持的一套加密规则发送给网站。
      2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
      3.浏览器获得网站证书之后浏览器要做以下工作: 
    a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。 
    b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。 
    c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作: 
    a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。 
    b) 使用密码加密一段握手消息,发送给浏览器。 
    5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
      这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
                非对称加密算法:RSA,DSA/DSS 
          对称加密算法:AES,RC4,3DES 
          HASH算法:MD5,SHA1,SHA256
      HTTPS对应的通信时序图如下:


 
 
HTTPS协议和HTTP协议的区别: 
      https协议需要到ca申请证书,一般免费证书很少,需要交费。  
      http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。  
      http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。 
      http的连接很简单,是无状态的 。 
      HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议, 要比http协议安全。
TCP3次握手,4次挥手过程
 1、建立连接协议(三次握手)
(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。 
(2)服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。
     因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。 
(3)客户必须再次回应服务段一个ACK报文,这是报文段3。 


 
   为什么需要“三次握手”
   在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。这两种不用的表述其实阐明的是同一个问题。
   谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”。 主要目的防止server端一直等待,浪费资源。
2、连接终止协议(四次挥手)
   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。 
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。 
(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。 
(4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

 

 
 
为什么需要“四次挥手”
    那可能有人会有疑问,在tcp连接握手时为何ACK是和SYN一起发送,这里ACK却没有和FIN一起发送呢。原因是因为tcp是全双工模式,接收到FIN时意味将没有数据再发来,但是还是可以继续发送数据。
握手,挥手过程中各状态介绍(详见wiki:TCP
3次握手过程状态: 
    LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。 
    SYN_SENT: 当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。(发送端)
    SYN_RCVD: 这个状态与SYN_SENT遥想呼应这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。(服务器端) 
    ESTABLISHED:这个容易理解了,表示连接已经建立了。
4次挥手过程状态:(可参考上图) 
    FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。(主动方) 
    FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你(ACK信息),稍后再关闭连接。(主动方) 
    TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(主动方) 
    CLOSING(比较少见): 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。 
    CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。(被动方) 
    LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。(被动方)
    CLOSED: 表示连接中断。
TCP的具体状态图可参考:

 

 

 

  • 大小: 29.4 KB
  • 大小: 35.3 KB
  • 大小: 28.5 KB
  • 大小: 70.6 KB
分享到:
评论

相关推荐

    TCP.rar_TCP握手_tcp_tcp 发送数据_tcp 握手

    TCP通过三次握手建立连接,确保数据在不可靠的网络环境中也能准确无误地传输。 1. **TCP三次握手**: - 第一次握手:客户端发送一个SYN(同步序列编号)报文段到服务器,请求建立连接。这个报文段包含客户端的初始...

    TCP握手挥手的过程分析.doc

    TCP握手挥手的过程分析T

    TCP三次握手PPT课件.ppt

    标题中的“TCP三次握手PPT”指的是TCP协议在建立连接时执行的三次握手过程,这一过程是TCP可靠传输的基础。TCP是一种面向连接的传输层协议,确保数据在传输前双方已建立可靠的通信链路。 描述中提到的“TCP三次握手...

    tcp通讯协议握手分析.zip_Linux tcp通讯详细介绍_tcp 握手 源码_tcp 通讯_握手_通讯握手协议

    下面我们将深入探讨Linux环境下的TCP通讯机制,特别是TCP握手的过程和相关源码分析。 一、TCP三次握手 1. SYN (Synchronize Sequence Numbers):当客户端想要与服务器建立连接时,它会发送一个SYN包,包含一个随机...

    wireshark抓包分析tcp三次握手四次挥手

    总的来说,使用Wireshark进行TCP握手和挥手的分析,可以帮助我们深入理解TCP连接的生命周期,以及HTTP协议在TCP上的运作机制,这对于网络诊断、性能优化和安全分析都是非常有价值的。通过对网络封包的细致观察,我们...

    Wireshark入门 tcp三次握手

    ### Wireshark入门:TCP三次握手详解 #### 一、引言 在互联网技术领域,TCP/IP协议族作为网络通信的基础框架,对于保障数据传输的可靠性和安全性具有至关重要的作用。其中,TCP(Transmission Control Protocol)...

    TCP三次握手

    TCP三次握手,TCP三次握手是TCP连接建立过程的可靠性保证

    TCP三次握手.docx

    TCP 三次握手机制详解 TCP 三次握手机制是TCP/IP协议中的一种面向连接的可靠传输机制,它是传输层中的核心机制。在网络通信中,TCP 三次握手机制保证了数据的可靠传输和面向连接的通信。 什么是 TCP 三次握手机制...

    TCP三次握手4次挥手详解

    传输控制协议,TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,文档介绍TCP三次握手和4次挥手过程以及详细实例介绍,

    TCP.zip_tcp 握手

    本文将深入探讨TCP连接的建立过程——三次握手,以及断开连接时的四次挥手,这对于理解TCP协议的工作原理至关重要。 首先,我们来看TCP的三次握手。三次握手是为了确保数据的正确传递,防止已失效的连接请求报文...

    tcp3次握手实验报告

    捕获TCP连接的过程的数据包。 2)分析三次握手建立TCP连接的过程,描述数据包序列图。(包括 SYN标志和SEQ值) 1)检查FTP交互数据报文中用户名和密码是否用明文传送

    TCP协议握手挥手抓包分析.pdf

    TCP通过三次握手建立连接,四次挥手断开连接,确保数据在不可靠的网络环境中能够准确无误地传输。 **TCP三次握手** TCP连接的建立需要经过三次握手。这个过程确保了双方都有能力接收和发送数据,并且都同意建立...

    TCP握手详细过程以及抓包分析

    本文将深入探讨TCP连接的建立过程,即著名的“三次握手”,以及TCP连接的终止,通常被称为“四次挥手”。同时,我们还将简要介绍抓包分析的概念,这对于理解网络通信的实际过程至关重要。 TCP连接的建立始于客户端...

    模拟TCP三次握手

    ### 模拟TCP三次握手 在计算机网络领域中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它为应用层提供了一个可靠的通信服务,通过三次握手来建立一个全双工的可靠连接。 #### 三...

    flash作品:tcp三次握手动画演示

    flash作品:tcp三次握手动画演示 计算机网络、多媒体通信课堂大作业、课程设计等。

    TCP协议三次握手过程分析

    ### TCP协议三次握手过程分析 #### 一、TCP协议简介 传输控制协议(Transmission Control Protocol,简称TCP)是互联网中最核心的协议之一,它属于传输层协议,主要负责在网络环境中提供可靠的、面向连接的数据...

    tcp协议三次握手过程

    TCP 协议三次握手过程详解 TCP(Transmission Control Protocol)传输控制协议是指建立一个可靠的连接服务,采用三次握手确认建立一个连接。三次握手过程是 TCP 协议的核心部分,保证了数据传输的可靠性和正确性。 ...

    tcp握手状态图kkkkkkkkkkkkkkkkkkkkkkkkkkkkk

    tcp握手状态图 kkkkkkkkkkk kkkkk kkkk

    tcp三次握手与四次握手及SOCKE函数对应

    TCP通过“三次握手”和“四次握手”的过程来确保连接的建立和终止是可靠和有序的。同时,这些过程与编程中的socket函数紧密相关,帮助开发者在应用程序中实现网络通信。 首先,我们来看“TCP三次握手”。当两个设备...

    TCP_three_way_handshake.rar_tcp 握手

    TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层...在实际应用中,如HTTP、HTTPS、FTP等协议都是建立在TCP之上的,因此理解和掌握TCP的握手过程对于网络开发者和运维人员来说是必不可少的技能。

Global site tag (gtag.js) - Google Analytics