zoukankan      html  css  js  c++  java
  • TCP/IP协议 三次握手四次断开的讲解

    一、面向连接的协议

    UDP是一种无连接的协议,而TCP则是一种面向连接的协议。所谓面向连接的协议,就是在两个对等端内部网之间直接建立逻辑连接。

    它通过跟踪数据的传送,并确认和跟踪序号来确保它成功到达接收方。简单来说,TCP传输数据比UDP安全。

    二、TCP握手

    TCP面向连接的传输是以两个主机间的握手开始的。一个主机发送到另一个主机之间的握手有以下三个作用:

    1、确保目的主机可用

    2、确保目的主机正在侦听目标端口号

    3、通知给目的主机发出者的序号,是双方在传输数据时可以进行跟踪。

    三、TCP数据包

    TCP主机之间通过握手进程互相建立起来一种虚拟连接。在握手期间,主机之间交换序号,当数据从一台主机发送到另一台主机时序号便跟踪这些数据。

    TCP把数据转换成连续的字节流,但是不能分辨出字节流的基础消息和消息边界。接收到字节流后,上层应用程序再把字节流解释成消息。

    可以这么说:发送方将数据按协议封装成TCP数据包,接收方也按协议读取TCP数据包中的数据。

    TCP数据包的最大值为65495字节。65495 = 总长度 - IP题头(20字节)- TCP题头(20字节)

    下图描述了数据是怎么分割的和怎么在数据开始部分加上题头(IP题头、TCP题头、以太网题头):

    (根据协议层的不同,封装在数据包中的信息有不同的名称)

    四、TCP建立连接:三次握手

    1、建立连接时,客户机向服务器发送一个TCP数据包,这个数据包中不含有任何数据,只有客户机的启动顺序、使用的目的端口号和TCP数据包的

    最大分段大小(MSS),还包含一个同步标识——SYN(同步序号,假设SYN值为A);

    2、服务器对自己的启动序号和最大分段大小进行回复,即首先确认客户机的SYN:发送一个ACK数据包,ACK数据包中的值为(A+1);

    再发送一个SYN(里面是自己的序列号,假设为B),并定义MSS的大小。然后设置认领位,承认已接收到第一个数据包。

    3、客户机接收到了服务器的序号和分段大小信息,就发送一个ACK(B+1)来确认自己已收到,第三个数据包用来结束握手进程。

    (三次握手只是我自己的初步理解,以后会逐步完善)

    五、TCP终止连接:四次断开

    为什么建立连接要三次握手,而终止连接就要进行四次呢?

    只是因为TCP连接是全双工的,即数据可在两个方向上同时传递,所以关闭时每个方向上都要单独关闭,这种单方向的关闭就叫半关闭。

    4次断开的基本流程:

    (1)、当主机一完成数据传输后,将FIN置为1,提出停止TCP连接的请求;

    (2)、主机二收到主机一发来的FIN后,关闭连接,并将ACK置为1;

    (3)、主机二反向提出终止连接,将FIN置为1;

    (4)、主机一收到消息后,停止连接,并将ACK置为1,双方向的关闭结束。

    由以上可见,光是建立连接与终止连接就这么多步骤,终于知道TCP为什么慢了?但是正是这样才提高了数据传输的可靠性。当然,三次握手和四次断开也不是我这寥寥数语能说清楚的,自己的理解还很浅显,以后会继续完善。
  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/qiehaoleng/p/3960111.html
Copyright © 2011-2022 走看看