美文网首页
计算机网络以及网络编程面试题(不断补充)

计算机网络以及网络编程面试题(不断补充)

作者: wayyyy | 来源:发表于2021-03-18 00:01 被阅读0次
TCP/IP网络协议栈层次
协议栈.png
TCP 和 UDP 应用场景

TCP 和 UDP 不同

  • 为什么TCP是可靠的?
    • 超时重传
    • 包有序
    • TCP建立链接
  • UDP是不可靠的

针对可靠否的特点:
视频直播用的UDP

写一个程序判断当前机器的大小端
必须掌握的函数
#include <sys/socket.h>

int socket(int family, int type, int protocol)  
  返回值:成功返回非负描述符,出错返回-1

int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen)
  返回值:成功返回0, 出错返回-1

int bind(int sockfd, const struct sockaddr *myaddr, socklen_ addrlen);    
  返回值:成功返回0, 出错返回-1

int listen(int sockfd, int backlog);  
  返回值:成功返回0, 出错返回-1

int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
  返回值:成功返回非负描述符,出错返回-1

int close(int sockfd);      
  返回值:成功返回0, 出错返回-1

#include <unistd.h>

int shutdown(int sockfd, int howto);  
  返回值:成功返回0, 出错返回-1
send/write,receive/read 在阻塞和非阻塞模式下的不同返回值

send/write
阻塞socket:阻塞
非阻塞socket:立刻返回:返回值是-1,errno = EAGAIN

receive/read
阻塞socket:阻塞
非阻塞socket:立刻返回:返回值是-1,errno = EAGAIN

send 返回值100,就是发给对端100个字节了吗?
答案是否定的,这个值100只是表示把字节送到了TCP/IP协议栈内部缓冲区。

connect 设置阻塞和非阻塞
accept 设置阻塞和非阻塞
为什么非阻塞要搭配IO复用?
为什么非阻塞网络编程中应用层Buffer是必须的?
什么是time_wait ?
close_wait ?
TCP连接关闭状态图.png

如上图所示:close_wait 状态应该是在被动关闭连接情况下,在已经接收到对端所发的FIN,但是我们还没有发送自己的FIN的时刻,通常来讲,CLOSE_WAIT状态的持续时间应该很短。

出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket链接,但是我方忙与读或者写,没有关闭连接,应该正确的去检查代码逻辑。

简述一下select poll epoll 演进过程,各自优缺点
什么是 reactor 模型 ?
SIGPIPIPE 信号?

已经关闭了,在在这个连接上调用 send 或者 write,不处理这个信号,会直接崩溃。所以在网络编程中我们需要捕捉这个信号。

定时器设计
为什么需要应用层心跳?Tcp Keepalive 能不能代替心跳?UDP需要心跳吗?

相关文章

网友评论

      本文标题:计算机网络以及网络编程面试题(不断补充)

      本文链接:https://www.haomeiwen.com/subject/jvahyhtx.html