1.客户端发送SYN包请求建立TCP链接,SYN包中携带了初始化的sequence num,它不能携带数据,但是,会消耗一个序列号.
2.不携带数据的ACK报文则不会消耗序列号.
3.半链接是服务器在收到客户端发送的SYN包之后,双方还没有建立全连接的状态.服务器会将此连接存放到半连接队列内.
4.服务器在发送SYN-ACK报文后,会等待客户端发送ACK报文.如果未收到客户端的ACK包,服务器会等待一段时间重新发送ACK包.如果收到客户端的ACK包,则将此连接从半连接队列中删除,存放到全连接队列内.
5.服务器重传SYN-ACK包的次数超过系统规定的最大值后,停止重传,同时将其从半连接队列中删除.每次等待的时间通常会以指数增长.
6.服务器和客户端都可以主动发起断开连接的操作.如果客户端主动发起断开连接的操作,会发送一个fin包,同时进入FIN_WAIT1状态,等待服务器的ACK包.服务器发送的ACK报文,会在收到的FIN包的seq_num基础上加1,也就是说FIN包会占用一个序列号.同时服务器会进入CLOSE_WAIT状态.TCP连接处于半连接状态.
7.客户端在收到服务器的ACK包之后,会从FIN_WAIT1进入FIN_WAIT2,等待服务器发送FIN包.当服务器主动向断开连接时,会发送FIN包,同时进入LAST_ACK状态.客户端在收到FIN包之后,会发送ACK报文,进入TIME_WAIT状态.
8.RTT(ROUND TRIP TIME)即数据包从一端发送到另一端,然后再从另一端返回本端的时间,也就是数据包往返需要的时间.RTO(RETRANSMITTION TIMEOUT)超时重传的时间.
9.快速重传机制是当本端收到连续三个相同的ACK报文时,会重新发送相应的报文.快速重传解决了超时时间的问题,即避免了超时时间到来时才重传数据.
10.SACK(selective acknowledgement)选择性确认,它借助于TCP头部的option选项,将已经接收到的数据段存放到里面,发送方根据这些信息决定重传哪些数据.如果要是用选择性确认,那么收发双方都必须支持.
11.duplicate SACK(D-SACK)它使用SACK的功能告诉发送方哪些数据被重复接收了.
12.接收端通过TCP头部中的windows大小告诉发送端本端还有多少缓冲区可以存放数据.如果发送端发送的数据超过了缓冲区的大小,会导致接收端处理不过来.



