TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图
tcp:ip.png1、握手3次原因:tcp中,一方接收到syn报文后,需向对方回应一个ack。三次握手中,第一个是sync报文,第二个是ack、sync报文,第三个ack报文。这样就都回应了ack,需要3次。
2、挥手4次原因:tcp中,一方接收到fin报文后,需向对方回应一个ack,并且tcp可以实现半关闭。4次挥手中,第一个fin报文,第二个ack报文(它可能还要继续传送数据),第三个是fin报文(它已经不需要继续传送数据了),第四个ack报文。这样就都回应了ack,需要4次(实际中可能只有3个报文,见下文)。
3、能否握手2次:如上所述,不能。t/tcp协议,可以在握手时,直接携带要传送的数据。
4、能否挥手5次:如上所述,5次多余。
5、能否挥手3次:能。收到第一个fin报文后,它自己也不需要传送数据了,回应fin、ack报文,对方再回应ack,总共三次,挥手完毕。实际中抓报文,有很多这样的情况。
(1)三次握手建立连接
a.请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN,在这个例子中为1415531521)。这个SYN段为报文段1。
b.服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号
c.客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)
这三个报文段完成连接的建立。这个过程也称为三次握手(three-way handshake)
(2)四次挥手断开连接
26833883_1367053486Dqub.pnga.现在的网络通信都是基于socket实现的,当客户端将自己的socket进行关闭时,内核协议栈会向服务器自动发送一个FIN置位的包,请求断开连接。我们称首先发起断开请求的一方称为主动断开方。
b.服务器端收到请客端的FIN断开请求后,内核协议栈会立即发送一个ACK包作为应答,表示已经收到客户端的请求
c.服务器运行一段时间后,关闭了自己的socket。这个时候内核协议栈会向客户端发送一个FIN置位的包,请求断开连接
d.客户端收到服务端发来的FIN断开请求后,会发送一个ACK做出应答,表示已经收到服务端的请求
网友评论