首页 > 代码库 > TCP/IP协议 三次握手四次断开的讲解

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为什么慢了?但是正是这样才提高了数据传输的可靠性。当然,三次握手和四次断开也不是我这寥寥数语能说清楚的,自己的理解还很浅显,以后会继续完善。

TCP/IP协议 三次握手四次断开的讲解