网站开发工资有多少,重庆特种作业证件查询,怎样做网站开发,做网站用的什么软件TCP 协议简述
TCP 提供面向有连接的通信传输#xff0c;面向有连接是指在传送数据之前必须先建立连接#xff0c;数据传送完成后要释放连接。
无论哪一方向另一方发送数据之前#xff0c;都必须先在双方之间建立一条连接。在TCP/IP协议中#xff0c;TCP协议提供可靠的连接…TCP 协议简述
TCP 提供面向有连接的通信传输面向有连接是指在传送数据之前必须先建立连接数据传送完成后要释放连接。
无论哪一方向另一方发送数据之前都必须先在双方之间建立一条连接。在TCP/IP协议中TCP协议提供可靠的连接服务连接是通过三次握手进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议TCP是全双工模式所以需要四次挥手关闭连接。
TCP 三次握手建立连接
所谓三次握手(Three-way Handshake)是指建立一个 TCP 连接时需要客户端和服务器总共发送3个报文。
三次握手的目的是连接服务器指定端口建立 TCP 连接并同步连接双方的序列号和确认号交换 TCP 窗口大小信息。在 socket 编程中客户端执行 connect() 时。将触发三次握手。
三次握手过程的示意图如下 第一次握手 客户端将TCP报文标志位SYN置为1随机产生一个序号值seqJ保存在TCP首部的序列号(Sequence Number)字段里指明客户端打算连接的服务器的端口并将该数据包发送给服务器端发送完毕后客户端进入SYN_SENT状态等待服务器端确认。 第二次握手 服务器端收到数据包后由标志位SYN1知道客户端请求建立连接服务器端将TCP报文标志位SYN和ACK都置为1ackJ1随机产生一个序号值seqK并将该数据包发送给客户端以确认连接请求服务器端进入SYN_RCVD状态。 第三次握手 客户端收到确认后检查ack是否为J1ACK是否为1如果正确则将标志位ACK置为1ackK1并将该数据包发送给服务器端服务器端检查ack是否为K1ACK是否为1如果正确则连接建立成功客户端和服务器端进入ESTABLISHED状态完成三次握手随后客户端与服务器端之间可以开始传输数据了。
为什么需要三次握手
我们假设client发出的第一个连接请求报文段并没有丢失而是在某个网络结点长时间的滞留了以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段同意建立连接。
假设不采用“三次握手”那么只要server发出确认新的连接就建立了。由于现在client并没有发出建立连接的请求因此不会理睬server的确认也不会向server发送数据。但server却以为新的运输连接已经建立并一直等待client发来数据。这样server的很多资源就白白浪费掉了。
所以采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况client不会向server的确认发出确认。server由于收不到确认就知道client并没有要求建立连接。
TCP 四次挥手关闭连接
四次挥手即终止TCP连接就是指断开一个TCP连接时需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中这一过程由客户端或服务端任一方执行close来触发。由于TCP连接是全双工的因此每个方向都必须要单独进行关闭这一原则是当一方完成数据发送任务后发送一个FIN来终止这一方向的连接收到一个FIN只是意味着这一方向上没有数据流动了即不会再收到数据了但是在这个TCP连接上仍然能够发送数据直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭而另一方则执行被动关闭。
四次挥手过程的示意图如下 挥手请求可以是Client端也可以是Server端发起的我们假设是Client端发起
第一次挥手 Client端发起挥手请求向Server端发送标志位是FIN报文段设置序列号seq此时Client端进入FIN_WAIT_1状态这表示Client端没有数据要发送给Server端了。第二次分手Server端收到了Client端发送的FIN报文段向Client端返回一个标志位是ACK的报文段ack设为seq加1Client端进入FIN_WAIT_2状态Server端告诉Client端我确认并同意你的关闭请求。第三次分手 Server端向Client端发送标志位是FIN的报文段请求关闭连接同时Client端进入LAST_ACK状态。第四次分手 Client端收到Server端发送的FIN报文段向Server端发送标志位是ACK的报文段然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后就关闭连接。此时Client端等待2MSL的时间后依然没有收到回复则证明Server端已正常关闭那好Client端也可以关闭连接了。
为什么连接的时候是三次握手关闭的时候却是四次握手
建立连接时因为当Server端收到Client端的SYN连接请求报文后可以直接发送SYNACK报文。其中ACK报文是用来应答的SYN报文是用来同步的。所以建立连接只需要三次握手。
由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议TCP是全双工模式。这就意味着关闭连接时当Client端发出FIN报文段时只是表示Client端告诉Server端数据已经发送完毕了。当Server端收到FIN报文并返回ACK报文段表示它已经知道Client端没有数据发送了但是Server端还是可以发送数据到Client端的所以Server很可能并不会立即关闭SOCKET直到Server端把数据也发送完毕。当Server端也发送了FIN报文段时这个时候就表示Server端也没有数据要发送了就会告诉Client端我也没有数据要发送了之后彼此就会愉快的中断这次TCP连接。