tcp详解学习笔记-tcp建立终止

tcp建立连接三次握手

初始化连接、数据传输、关闭连接

tcp建立连接三次握手

一般是由一端打开一个套接字,然后监听另一方的连接,服务器被动打开,客户端主动打开链接

1.客户端发送一个syn来创建主动打开,指明客户端需要创建链接的端口和时间序列号报文包
2.服务端回复客户端初始的syn和ack,ack为客户端传说的syn包的时间序列号+1
3.最后客户端再发一个ack包,服务端接收到链接进入已创建状态

tcp关闭连接四次握手

tcp连接全双工的
1.由任意一端发送fin请求关闭连接,另一方受到后执行被动关闭,然后返回一个fin的ack
2.再由被动关闭的一端发送fin请求,另一端收到返回给一个fin的ack
3.连接进入关闭状态

tcp的半关闭

也是因为tcp时全双工的,当一方请求关闭,接收到关闭的一方还能send数据,完成后进行关闭。

tcp状态变迁图

全组合形式

呼入请求队列(链接请求从内核到应用层的过程)

tcp如何处理呼入的链接请求?
1.正在等待连接请求的一端又一个固定的链接队列,队列中的链接已经被tcp接受,但还没有被应用层接收
2.应用层指明队列的长度,叫做积压值(0-5之间)
3.syn到达时,tcp使用一个算法,根据俄当前链接队列中的连接数来确定是否接受这个链接。积压值说明的是tcp监听的端点已被tcp接受而等待应用层接受的最大链接数
4.对于一个新的链接请求,改tcp监听的端点的链接队列中还有空间,tcp将对syn进行确认并完成链接的建立,但是应用层只有在三次握手中的第三个报文段收到后才会知道这个新链接
5.如果对于新的链接请求,链接队列中已经没有空间,tcp将不会理会收到的syn,也不会发任何报文段。如果饮用层不能及时接受已经被tcp接受的链接,这些链接可能占满整个队列,客户端的主动打开最终将超时