zoukankan      html  css  js  c++  java
  • TCP/IP三次握手与四次挥手

     

    TCP/IP三次握手与四次挥手

    (1)TCP和UDP对比

    1、TCP面向连接(如打电话要先拨号建立连接)。UDP是无连接的,即发送数据之前不需要建立连接;

    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达(进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控    制),UDP尽最大努力交付,即不保证可靠交付;

    3、TCP面向字节流。实际上是TCP把数据看成一连串无结构的字节流,UDP是面向报文的;

    4、TCP有拥塞控制。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);

    5、TCP首部开销20字节UDP的首部开销小,只有8个字节;

    6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道;

    7、TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信。

    (2)TCP报文格式

      

      (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
      (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
      (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
                    (A)URG:紧急指针(urgent pointer)有效。
                    (B)ACK:确认序号有效。
                    (C)PSH:接收方应该尽快将这个报文交给应用层。
                    (D)RST:重置连接。
                    (E)SYN:在连接建立时对序号进行同步。
                    (F)FIN:终止连接连接。

     确认方Ack=发起方Req+1

     

    (3)三次握手

      所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:

     

    (1)第一次握手:

        Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认;
    (2)第二次握手:

        Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态;
    (3)第三次握手:

        Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

    (4)四次挥手

    由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
    (1)第一次挥手:

        Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;
    (2)第二次挥手:

        Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态;
    (3)第三次挥手:

        Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态;
    (4)第四次挥手:

        Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

    能让一个男孩子热血的,不仅有梦想,还有姑娘。
  • 相关阅读:
    leetcode5 Longest Palindromic Substring
    leetcode17 Letter Combinations of a Phone Number
    leetcode13 Roman to Integer
    leetcode14 Longest Common Prefix
    leetcode20 Valid Parentheses
    leetcode392 Is Subsequence
    leetcode121 Best Time to Buy and Sell Stock
    leetcode198 House Robber
    leetcode746 Min Cost Climbing Stairs
    tomcat下使用druid配置jnid数据源
  • 原文地址:https://www.cnblogs.com/Mr24/p/6515171.html
Copyright © 2011-2022 走看看