区块链技术博客
www.b2bchain.cn

Linux C/C++面试之《网络编程系列》(5) 理解tcp半打开、半关闭、半连接求职学习资料

本文介绍了Linux C/C++面试之《网络编程系列》(5) 理解tcp半打开、半关闭、半连接求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

这些并非臆造出来的问题,而是实际会开发遇到的问题。对于一个健壮的网络服务器,应该考虑如何处理连接异常。

    • 一、半开连接
    • 二、半关连接
  • include

一、半开连接

TCP的半开连接是指TCP连接的一端异常崩溃,或者在未通知对端的情况下关闭连接,这种情况下不可以正常收发数据,否则会产生RST。比如一个常见的情况是TCP连接的一端异常断电,就会导致TCP的半开连接。如果没有数据传输,对端就不会知道本端的异常而一直处于ESTABLISHED状态(TCP有存活检测机制,后面内容我们会进行介绍)。

二、半关连接

当TCP连接中A发送FIN请求关闭,B端回应ACK后(A端进入FIN_WAIT_2状态),如果B没有立即发送FIN给A时,A方处在半连接状态,此时A可以接收B发送的数据,但是A已不能再向B发送数据。

如下图所示,在红色背景文本框标注的数据传输场景下就是TCP的半关连接:
Linux C/C++面试之《网络编程系列》(5) 理解tcp半打开、半关闭、半连接

从程序的角度,可以使用API来控制实现半连接状态。
“`c

include

int shutdown(int sockfd, int how);
sockfd: 需要关闭的socket的描述符
how: 允许为shutdown操作选择以下几种方式:
SHUT_RD(0): 关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。

这些并非臆造出来的问题,而是实际会开发遇到的问题。对于一个健壮的网络服务器,应该考虑如何处理连接异常。

    • 一、半开连接
    • 二、半关连接
  • include

一、半开连接

TCP的半开连接是指TCP连接的一端异常崩溃,或者在未通知对端的情况下关闭连接,这种情况下不可以正常收发数据,否则会产生RST。比如一个常见的情况是TCP连接的一端异常断电,就会导致TCP的半开连接。如果没有数据传输,对端就不会知道本端的异常而一直处于ESTABLISHED状态(TCP有存活检测机制,后面内容我们会进行介绍)。

二、半关连接

当TCP连接中A发送FIN请求关闭,B端回应ACK后(A端进入FIN_WAIT_2状态),如果B没有立即发送FIN给A时,A方处在半连接状态,此时A可以接收B发送的数据,但是A已不能再向B发送数据。

如下图所示,在红色背景文本框标注的数据传输场景下就是TCP的半关连接:
Linux C/C++面试之《网络编程系列》(5) 理解tcp半打开、半关闭、半连接

从程序的角度,可以使用API来控制实现半连接状态。
“`c

include

int shutdown(int sockfd, int how);
sockfd: 需要关闭的socket的描述符
how: 允许为shutdown操作选择以下几种方式:
SHUT_RD(0): 关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。

这些并非臆造出来的问题,而是实际会开发遇到的问题。对于一个健壮的网络服务器,应该考虑如何处理连接异常。

    • 一、半开连接
    • 二、半关连接
  • include

一、半开连接

TCP的半开连接是指TCP连接的一端异常崩溃,或者在未通知对端的情况下关闭连接,这种情况下不可以正常收发数据,否则会产生RST。比如一个常见的情况是TCP连接的一端异常断电,就会导致TCP的半开连接。如果没有数据传输,对端就不会知道本端的异常而一直处于ESTABLISHED状态(TCP有存活检测机制,后面内容我们会进行介绍)。

二、半关连接

当TCP连接中A发送FIN请求关闭,B端回应ACK后(A端进入FIN_WAIT_2状态),如果B没有立即发送FIN给A时,A方处在半连接状态,此时A可以接收B发送的数据,但是A已不能再向B发送数据。

如下图所示,在红色背景文本框标注的数据传输场景下就是TCP的半关连接:
Linux C/C++面试之《网络编程系列》(5) 理解tcp半打开、半关闭、半连接

从程序的角度,可以使用API来控制实现半连接状态。
“`c

include

int shutdown(int sockfd, int how);
sockfd: 需要关闭的socket的描述符
how: 允许为shutdown操作选择以下几种方式:
SHUT_RD(0): 关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Linux C/C++面试之《网络编程系列》(5) 理解tcp半打开、半关闭、半连接求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们