TCP服务 尽管TCP和UDP都使用相同的网络层( IP),TCP却向应用层提供与UDP完全不同的服务。 在一个TCP连接中,仅有两方进行彼此通信。TCP提供一种面向连接的、可靠的字节流服务。 面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。 这个过程类似向别人打电话,先拨号等待,在等待对方接听说“喂”,然后才说明是谁。 TCP包头 每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接 顺序号用来标识从TCP发端向TCP收端发送的数据字节流,TCP传送的字节流的每一个字节都会按顺序标号 确认号用来确认收到发送者发送的顺序序号为x的数据,并告诉发送者下次发送顺序序号为x+1的数据 首部长度给出首部中32 bit字的数目。需要这个值是因为任选字段的长度是可变的。这个字段占4 bit,因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节。 在T C P首部中有6个标志比特。它们中的多个可同时被设置为1 U R G 紧急指针 A C K 确认序号有效。 P S H 接收方应该尽快将这个报文段交给应用层。 R S T 重建连接。 S Y N 同步序号用来发起一个连接 F I N 发端完成发送任务。 连接的建立和终止 TCP的三次握手 第一次握手:客户端发送建立连接请求报文,SYN=1,seq=x,客户端进入SYN_SEND状态,等待服务器确定 第二次握手:服务器收到客户端SYN报文段,对这个SYN报文段进行确认,ack=x+1 ,同时服务端自己还要发送SYN请求信息,SYN=1,ACK=1,seq=y,服务器进入SYN_RECV状态 第三次握手:客户端收到服务器的SYN+ACK报文段,ack=y+1,向服务器发送ACK报文段,ACK=1,seq=x+1,这个报文发送完毕后客户端和服务器都进入ESTABLISHED状态,完成TCP三次握手

TCP的四次挥手 第一次挥手:主机A向主机B发送一个FIN=1报文段,seq=u,发起断开连接请求,表示没有数据要发送给主机B了 第二次挥手:主机B收到FIN报文段并向主机B回ACK=1报文段,seq=v,ack=u+1,进入CLOSE_WAIT状态,主机B告诉主机A,同意主机A的关闭请求 第三次挥手:主机B向主机A发送FIN=1报文段,ACK=1 ,seq=w,acl=u+1,请求关闭连接,同时进入LAST_ACK状态 第四次挥手:主机A收到主机B发送的FIN报文段,向主机B发送ACK=1报文段,seq=u+1,ack=w+1,然后主机A进入TIME_WAIT状态,主机B收到主机A的ACK报文段后,就关闭连接,此时,主机A等待2MSL(最大的数据生存段时间)后依然没有收到回复,则证明主机B以正常关闭,那么,主机A也可以关闭连接了