centos做网站服务器,企业解决方案案例,有没有网站专门做cnc招聘,购买一个网站域名需要多少钱#xff08;1#xff09;TCP状态转换图 其中图中分为三种状态#xff1a;实线代表的主动发起连接#xff0c;虚线代表的被动发起连接#xff0c;细实线代表的可以双向发起连接的状态。
主动发起连接方状态变化#xff1a;1#xff09;主动发起连接的一方发送SYN标志位1TCP状态转换图 其中图中分为三种状态实线代表的主动发起连接虚线代表的被动发起连接细实线代表的可以双向发起连接的状态。
主动发起连接方状态变化1主动发起连接的一方发送SYN标志位进入SYN_SENT状态等待接收被发起连接方发送ACK应答和数据包序号接收到ACK应答后同时向被被发起连接方发送ACK应答表示数据已经接收到同一发起连接此时进入ESTABLISHED状态表示三次握手完成。2主动发起连接的一方向另一方发送FIN标志位请求关闭连接立即进入FIN_WATI_1等待被动发起连接方发送ACK应答信号主动发起连接方接收到ACK应答信号后进入FIN_WATI_2状态代表主动发起连接端半关闭完成。此时如果被动连接方发送FIN信号请求关闭连接主动发起连接的一方会发送一个ACK应答信号同意关闭但是此时不确定被动发起连接方是否收到信号因为主动发起连接方已经关闭所以要等待一个2MSL时间确保最后发送的一个ACK应答信号被接收到2MSL时间一到被动连接方关闭四次挥手完成。
被动发起连接方状态变化1被动发起连接方处于监听状态等待连接当被动发起连接方接收到主动方SYN状态请求连接时被动发起连接方会发送一个ACK应答同时携带自己的数据报序号给主动方进入SYN_RCVD状态等待主动方发送ACK应答信号当接收到主动方发起的ACK应答信号时被动发起连接方进入ESTABLISHED状态表示三次握手完成。2当主动方发送FIN请求关闭时被动连接方接收FIN并同时向主动方发送ACK应答同意关闭此时被动连接方进入CLOSE_WAIT状态。如果此时被动连接方发送FIN信号则进入LAST_ACK状态等待主动方的应答信号当接收到主动方的应答信号被动方关闭四次挥手完成。
双向连接状态1当被动发起连接方进入SYN_RCVD状态等待主动发起方发送ACK应答信号时此时如果网络中断则三次握手中断重新进行三次握手被接受方发送RST信号重新连接。2主动发起连接方接收到FIN信号进入FIN_WAIT_1状态此时如果主动接收到ACK和FIN信号同时给被动方发送ACK应答信号则主动方进入TIME_WAIT状态等待2MSL时间关闭文件。如果只收到ACK应答信号和FIN信号则会进入CLOSING状态当主动发送ACK应答信号时主动方进入TIME_WAIT状态等待2MSL时间关闭文件。
2C/S模型的TCP状态图 3半关闭 当TCP链接中A发送FIN请求关闭,B端回应ACK后A端进入FIN_WAIT_2状态B没有立即发送FIN给A此时A处于半关闭状态A可以接收B发送的数据但是A不能向B发送数据了。 使用close关闭文件描述符只是中止一个连接它减少的只是描述符的引用计数并不直接关闭连接当引用计数达到0时才关闭连接。而使用shutdown不考虑描述符的引用计数直接关闭描述符也可以中止一个方向的连接只中止读或者写。 #includesys/socket.h int shutdown(int sockfd,int how) 参数how SHUT_RD(0)关闭套接字读功能缓存区 SHUT_WR(1)关闭套接字写功能缓存区 SHUT_RDWR(2)关闭套接字读写功能缓存区
4端口复用 当服务器断开连接时实际上此时服务器使用的端口处于TIME_WAIT状态需要等待2MSL时间才能重新被利用。如果想要在服务器断开连接时端口可以被使用则需要使用端口复用功能具体方法是使用setsockopt()设置socket描述符选项的S0_REUSEADDR为1,表示允许创建端口号相同但IP地址不同的多个socket描述符。 在server代码中的socket()和bind()之间插入代码: int opt1; setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,opt,sizeof(opt));