1、tcp协议用于传输层,通常linux内核将协议层实现,用户只需要在内核提供的接口上进行编程即可,之间讲述了socket网络编程的接口函数,接下来主要来描述tcp协议里面的几个重要机制
2、三次握手
在了解三次握手前,需要了解tcp协议的数据结构。
首先我们需要记住几个标识位,一个是SYN、一个是ACK、一个是FIN
建立连接的过程中需要进行三次握手,这时,客户端发起连接请求,随机生成一个32位的确认序列号,也就是随机生成一个SYN+data_len,发给服务器端,这时候,服务器收到请求后,确认标识位为1,这时候,它会主动发送一个SYN+ACK的请求报文,ACK位32位的确认序号,是SYN+data_len+1,同时服务器端也会随机产生一个SYN,客户端收到后,它会返回一个ACK,为服务器的SYN+1,服务器确认后,连接建立。
2、四次挥手
四次挥手很简单,主要用到FIN和ACK,客户端和服务器的任何一方都可以主动请求断开链接,这时候,比如客户端会发送一个断开链接请求,这时候它会发送一个FIN+ACK,其中ACK为上次发送的确认ACK,这时候,服务器收到会回一个ACK,然后服务器也会发送一个FIN+ACK,再次确认是否断开链接,客户端再次回一个ACK,收到后链接断开,四次挥手完成。
3、滑动窗口
滑动窗口,其实很简单,就是每次tcp传输过程中,server和client会携带一个滑动窗口大小,意味着此时它能一次接受多少数据,因为数据在客户端和服务器之间是有缓存的,滑动窗口也就相当于对方告诉自己目前缓冲区的大小,不需要每次发一个数据包就回一个ACK,通过滑动窗口来进行简单的拥塞控制。