27 November 2017

TCP

TCP 是传输层的一个协议,用来提供可靠传输。

TCP 报文定义见下图:

tcp package

TCP 与 IP 协议一起工作,用于应用进程之间的通信。

TCP 的基本概念

三次握手与四次挥手

tcp package

三次握手

由客户端发起连接请求,服务端相应请求并向客户端发起请求确认,客户端返回确认请求。 此时连接建立。

  1. 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
  2. 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。 完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。

假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。 采用“三次握手”的办法可以防止server由于重传导致的老的报文一直等待client发来数据。这样,server的很多资源就白白浪费掉了现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”。主要目的防止server端一直等待,浪费资源。

四次挥手

tcp package

TOOD

Socket 各种状态分析

TODO

  • TIME_WAIT


blog comments powered by Disqus