TCP连接的建立和关闭

时间:2024-03-16 11:20:35

TCP通过三次握手建立连接,通过四次挥手挥手关闭连接

1、三次握手

                                           TCP连接的建立和关闭

第一个TCP报文段包含SYN标志,因此它是一个同步报文段,即ernest -lapyop(客户端)向Kongming20(服务器)发起连接请求,同时,该同步报文段包含一个ISN值为535734930的序号。第2个TCP发送一个同步报文段,同样包含一个ISN值为2159701207的序号,并且给第一个报文段回复确认,确认号为上个报文发的序号值加1,即535734931。上一篇博客说过,序号值是用来标识TCP数据流中的每一个字节的,但是同步报文比较特殊,即使它并没有携带任何应用程序数据,,它也要占用一个序号值。第3个TCP报文段是ernest -laptop对第二个同步报文段的确认,至此,TCP报文段连接就建立起来了,这三个步骤就是TCP建立连接的三次握手。通俗的说,ernest -laptop给Kongming20发送了一个报文说我要建立连接,然后Kongming20收到后也给ernest -laptop发送了一个报文说可以,并且给ernest -laptop确认回复收到消息了,然后ernest -laptop也给它确认回复收到。

从第3个TCP报文段开始,tcpdump输出的序号值和确认值都是相对初始ISN值得偏移,我们可以通过tcpdump -S来选择打印序号得绝对值

2、四次握手            

                              TCP连接的建立和关闭                

                               TCP连接的建立和关闭             

第4个TCP发送报文段包含FIN标志,因此它是一个结束报文段,即ernesr -laptop要求关闭连接,结束报文段和同步报文段一样,也要占用一个序号值,Konming20用TCP报文段5发送确认报文段,确认结束,然后Kongming20也发送自己得结束报文段,紧接着ernest -laptop发送报文段7回复确认。

其实四次挥手也可是三次,但是三次得条件是,恰好客户端和服务器端同时想要关闭连接得时候,客户端发送结束报文,服务器端将自己的结束报文和确认号同时发送给客户端,然后客户端给服务器端回复最后一次确认

3、半关闭状态:TCP连接时全双工的,所以允许两个方y的数据传输被独立关闭。也就是说,通信的一端可以发送结束报文段给对方,告诉它本端已经完成了数据的发送,但允许继续接收来自对方的数据,直到对方也发送结束报文段以关闭连接

                                                         TCP连接的建立和关闭 

注:上图中,服务器端和客户端判断对方是否关闭连接的方法时:read系统调用返回0(收到结束报文段)

socket网络编程接口通过shutdown函数提供了对半关闭的支持