TCP有关原理笔记

  • Post author:
  • Post category:其他


tcp 中使用到的原理,从三次握手到四次挥手的状态转移,到流量控制的滑动窗口,还有拥塞控制的方法。

主要参考文章:

TCP那些事(上)



tcp那些事(下)

1,三次握手

1,服务器处在listen状态,客户端处在closed状态,当客户端发送第一次请求SYN位置为1,随机序列数为x(这也是第一次握手的主要目的,告诉服务器客户端的序列数),发送请求后客户端处在SYN_SENT状态,第一次握手

2,服务器收到第一次次请求后,服务器会回复一个ack包,目的是告诉客户端收到了第一次握手的包,并把自己的序列数告诉客户端(ack=x+1,seq = y),发送回包后服务器处在SYN_RECD,第二次握手。

3,客户端收到服务器回复的包后,也要发送一个包(ack= y+1),目的是告诉服务器收到了第二次握手的回报,发送后客户端就完成链接了(established),服务器收到后也处在established,第三次握手。

当服务器收到客户端的第一次请求后就会保存一个信息,这个信息会被加入半连接队列,当完成三次握手时,服务器会去半链接队列找到之前保存的信息,把它移动到全链接队列里,当服务器调用accept()后,服务器会把这个信息移动到每个tcp链接的tcb中。int listen( int sockfd, int backlog)中的backlog就时代表着半连接对列+全链接对列的最大节点数。那么这里会有一个问题,如果有人恶意攻击服务器,只发生第一次握手信息,服务器会怎么处理呢?服务器会重试发送第二次握手信息,linux下重试5次(我的服务器是2次,centOS6.9),1s,2s,4s,8s,16s,总共31s,第5次还要在等32s,总共63s后tcp才会把这个连接信息从半连接队列删除。面对这



版权声明:本文为wesion666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。