关于常见面试题TCP三次握手和四次挥手

TCP三次握手和四次断开

TCP三次握手和四次挥手是一道面试官常问的问题,其实这个问题可以有很多种角度的回答,当面试官问起你时,你要用的理解把这段通信和断开给他解释明白,你只要能把一个不懂的it的人说的都能听懂了什么是三次握手四次断开,那么恭喜你,你终于学会了。


首先,我们上一张TCP报文段的首部格式图,
关于常见面试题TCP三次握手和四次挥手_第1张图片
我们先简单介绍一下控制位(图中六个缩写单词)中的几个重要的,首先是
ACK(确认序号位):为1时表示确认号有效,为0时表示没有确认信息,忽略确认号字段
SYN(同步序号位):在建立连接请求时,此位置为1
FIN(断开位):释放连接时,发送fin=1表示已经没有数据发送了,即要关闭数据流

长话短说,进入主题

三次握手

首先三次握手的含义是主机电脑向服务器发送的建立连接请求,它们之间有三次互动,因为TCP传输协议是双向的可靠传输协议,所以它要在通信前进行多次确认。

关于常见面试题TCP三次握手和四次挥手_第2张图片

第一次握手:首先PC1向PC2发送建立连接请求,发送SYN报文,所以自己的SYN同步序号位置为1,SYN=1,同时还需要带上自己的随机序列号x,以便验证自己的身份,所以Seq=x。
第二次握手:PC2接收到PC1的请求,向PC1进行回复,它要回复的内容是SYN和ACK报文,首先ACK=1,是因为PC2确定收到建立连接请求,Ack=x+1,这里是确定对PC1 x序列号的确定,确定我是收到的PC1的连接请求,还有同步位SYN置为1,SYN=1,同时PC2也要带上自己的随机序列号y,以便证明自己的身份。
第三次握手:PC1收到消息,再次回复的时候就只发送ACK确认报文就可以了,PC1收到消息,ACK确认位置为1,ACK=1,确认收到的是PC2对自己的回复,Ack=y+1,同时PC1自己的随机序列号x要更新成x+1,本来自己的序列号是x,但是它已经被PC2确认接收过自己的第一次发送建立连接请求,所以变成Seq=x+1。至此,三次握手完成,TCP完成建立连接。

四次挥手

前面三次握手时说到TCP传输是双向的,提供全双工服务,所以关闭的时候也要双方都关闭通道。

关于常见面试题TCP三次握手和四次挥手_第3张图片

第一次挥手:首先PC1向PC2发送断开请求,FIN断开位=1,发送完事PC1立马进入fin_wait_1 第一次半关闭状态。
第二次挥手:PC2向PC1进行回复,ACK确定位置为1,ACK=1,发送确定完自身进入close_wait关闭等待状态。PC1收到后就等待PC2向自己发起断开请求了,自己进入第二次半关闭状态。
第三次挥手:PC2向PC1发起断开请求,发送FIN=1,自己进入last_ack,最后确认半关闭状态。
第四次挥手:PC1收到消息后进行回复,ACK确认位=1,发送完自身进入time_wait等待,此时不论对方有没有接收到确认信息,自身都会等待4分钟才能断开,而PC2假如立即收到确认消息,会立马断开,如果没有收到消息,会继续接收,直到接收到PC1的确认消息或4分钟后跟PC1一块自动断开。


TCP建立连接和断开连接就讲完了,因为TCP协议是传输中可靠的进程到进程协议,为了保证数据传输的正确性和安全性,所以还提供了全双工服务,建立连接和断开都需要双方都同意才行。

你可能感兴趣的:(关于常见面试题TCP三次握手和四次挥手)