三次握手:
第一次握手:主机A发送建立连接的位码SYN=1,随机产生【序号】(Sequence number=123456)的数据包到主机B,主机A进入SYN_SENT状态,等待主机B确认。
(当SYN=1,而ACK=0时,表明这是一个连接请求报文段。若对方同意建立连接,则在响应的报文段中使SYN=1和ACK=1)。
第二次握手:主机B收到数据包由标志位SYN=1知道主机A请求建立连接,主机B将SYN和ACK都置1,【确认号】ack number = (主机A的seq number+1),并随机产生【序号】seq=7654321的包发送回A以确认连接请求,主机A进入SYN_RCVD状态。
第三次握手:主机A收到后检查【确认号】ack number是否正确,即第一次发送的seq number+1,以及位码SYN和ACK是否为1,若正确,将【确认号】ack number=(主机B的seq+1)和ACK=1并发送给主机B。主机B收到后检查【确认号】==自己发出的序号+1,并且ACK=1,如果正确则连接建立成功。主机A和主机B进入ESTABLISHED状态,完成三次握手。
四次挥手:(主机A已与主机B连接上)
第一次挥手:主机A发送一个FIN=1的报文段,关闭了主机A到主机B的数据传送,进入FIN_WAIT_1状态。
第二次挥手:主机B收到FIN后,发送一个ACK【确认】给主机A,确认序号为接到的【序号】+1,主机B进入CLOSE_WAIT状态。
第三次挥手:主机B发送一个FIN,确认号和第二次挥手是一样的,关闭了主机B到主机A的数据传送,主机B进入LAST_ACK状态。
第四次挥手:主机A收到FIN后,主机A进入TIME_WAIT状态,接着发送一个ACK【确认】给主机B,确认序号为收到序号+1,,主机B进入CLOSED状态,完成四次握手。
接着还有一些细节的东西:
2MSL wait state:当TCP执行一个主动关闭,并发回最后一个ACK,该链接必须在TIME_WAIT状态停留2倍MSL的时间。在此期间,两端的套接字不可用。
Half-Open:如果一方已经关闭或异常终止链接而另一方还不知道,这种情况成为半打开。
ACK,仅当ACK=1时确认号字段才有效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1.
通报窗口,MSS,TCP接收缓冲区和发送缓冲区。
MSS是一个TCP报文段中数据字段的最大长度。
通报窗口和TCP的接收缓冲区有关系;MSS和MTU有关系,通常MSS=MTU-40。
第19章:TCP的交互数据流
对于这些小的报文段,接收方通常经受时延的确认方法来判断确认是否可以推迟发送,以便与回送数据一起发送,这样通常会减少报文段的数目。
第20章:TCP的成块数据流
TCP可以累积确认。
TCP的滑动窗口协议。
TCP的PUSH表示。
第21章:TCP的超时与重传
1>.拥塞避免算法和慢启动算法:这是两个算法,拥塞避免算法是一种处理丢失分组的方法,慢启动算法是一种连接上发起数据流的方法。通常这两个算法放在一起使用。
当超时时,会使用慢启动接着拥塞避免。
在发生超时时,ssthresh被职位当前窗口的一半,即cwnd和接收方通告窗口的最小值。因为,如果不发生拥塞,cwnd大小将超过通告窗口大小,意味着通告窗口将对数据流进行限制。
2>.快速重传和快速恢复:
当发生重传时,会使用快速重传和快速恢复的算法。