本文首发于个人博客
基本特点
面向连接的可靠字节流服务。
建立连接——三次握手
TCP建立连接时,需要经历下图所示的三次握手过程。
每一次握手都可以反映出不同的信息。
第一次握手
SYN标志提示TCP连接的服务端检查序列编号(seq),该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。客户端通过SYN=1来告诉服务端它想要建立连接。SYN=1的报文段不携带数据,但是也要消耗一个序号。
seq是基于时钟生成一个序号,每4微秒加1,到2^32-1时又从0开始。tcp提供全双工服务,客户端和服务端都有各自的序号。编号是为了解决网络包乱序的问题。
第一次握手成功后,服务器可以知道客户端的发送能力是正常的,服务器自己的接收能力是正常的。
第二次握手
服务端用SYN=1和ACK=1来表示这条数据报是针对之前的连接请求的应答。
ack=m+1表示服务端已经收到了到m为止的报文,期待的下一个报文是m+1。
第二次握手成功后