TCP协议的"三次握手"和"四次挥手"

来源:互联网 发布:网络扣字大手排行榜 编辑:程序博客网 时间:2024/06/08 03:13

传输层是计算机网络体系结构中关键的一层,要了解传输层首先要深入了解两个协议:

1.用户数据报协议(UDP)
2.传输控制协议(TCP)
简单介绍一下UDP协议,重点介绍TPC协议:
UDP协议
UDP是一个快速高效的传输协议,传送数据之前不需要建立连接,是无连接传输,但有一个缺点就是,不能保证可靠性传输。
主要特点:
1.无连接的。
2.UDP尽最大努力交付,不能保证可靠交付。
3.UDP是面向报文的。
4.UDP没有拥塞控制,也就是说,网络出现阻塞的时候不会使源主机发送速率降低,允许传输过程中丢失一部分数据,但是却不能产生太大的延时。
5.UDP支持一对一、一对多、多对一、多对多传输
6.首部开销少。只有8字节,TCP协议首部20字节。
TCP协议:
TCP协议是TCP/IP体系中非常复杂的一个协议
主要特点:
1.TCP面向连接的。类似拨号一样,传输数据时,发送端和接收端首先要建立连接。有三次对话,后面详解
2.TCP是提供可靠性交付的服务,通过TCP传输的数据,无差错,不丢失,不重复,并且按顺序到达。
3.TCP提供全双工信道通信。
4.面向字节流。
TCP运输连接管理
TCP是面向连接的协议,运输连接是用来传送TCP报文的,运输连接分为三个阶段:连接建立、数据传送、连接释放。
在TCP连接的过程中要确立这几个问题:
①.要使一方知道另一方的存在。
②.要允许双方协商一些参数(窗口大小、时间戳等选项)。
③.能够对运输实体资源分配。
TCP的连接建立:
这里写图片描述
建立连接的过程:
客户client 主动请求连接,而服务器server则是被动打开连接。
三次握手:
一、服务器先创建TCB(传输控制块)来准备接受连接请求。处于LISTEN 状态,客户端也有TCB块 发出请求,这时候首部中的SYN字段变为1,同时选择一个序列号seq=x,TCP规定SYN报文段不能携带数据,但是要消耗一个序列号。TCP客户端进入SYN SENT状态。
二、服务器收到请求后,如果同意建立连接,则向客户发出确认,再确认报文段中应SYN=1,ACK=1,确认号ack=x+1,同时也要为自己选一个序列号seq=y,这是同样要消耗一个序列号。
TCP服务器进程进入SYN-RCVD状态。
三、TCP客户端接收到服务器端的确认后,还要给服务器发送确认,确认报文段ACK=1,确认序列号ack=y+1,自己的序列号seq=x+1。此时TCP连接已建立,服务器、客户端同时进入ESTABLISHED状态。开始传输数据。
问题:
为什么,最后客户端还要确认一次?主要是防止已经被确认失效的连接突然有传送到服务器端,产生错误。
例如下面这种情况:
client 发送了一个请求,由于各种原因为抵达,那么会重新发送,和server建立连接后传输数据。到最后释放。完成传输后,这是第一次的请求突然被接收到了,如果没有第三次确认,这是server误以为是又要重新建立一个新的连接,来传输数据,产生异常。
建立三次握手就可以避免上述异常产生,而为什么不建立四次、五次,三次就能完成,没必要浪费资源。
四次挥手:
这里写图片描述

一、客户端向服务器端发送连接释放报文段。FIN置为1,序列号seq=u,等待回应。TCP连接处于半关闭状态,这时表示客户端已没有要发送的数据,但是服务器端还能发送,客户仍需接受。
二、服务器端收到请求,回应 ACK置1,确认序列号ack=u+1,自己的序列号seq=v。客户端收到服务器确认后进入半关闭状态FIN-WAIT2状态。等待服务器的连接释放请求报文段。
三、此时,服务器已不再向客户端发数据,服务器发起释放连接请求。FIN置1,ACK=1,确认序列号ack=u+1,自己的序列号seq=w,进入LAST-ACK状态等待客户端的确认
四、客户端发送确认释放报文段,ACK置1,确认序列号ack=w+1,seq=u+1。
问题:为什么客户端在第一次收到确认后进入FIN-WAIT2状态?
为了保证最后一次发送的ACK报文段能到达服务器端。还有就是保证上面说到的已失效连接请求报文段。
上述就是四次挥手。

原创粉丝点击