TCP/IP网络协议栈层次

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 ?

如上图所示:close_wait 状态应该是在被动关闭连接情况下,在已经接收到对端所发的FIN,但是我们还没有发送自己的FIN的时刻,通常来讲,CLOSE_WAIT状态的持续时间应该很短。
出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket链接,但是我方忙与读或者写,没有关闭连接,应该正确的去检查代码逻辑。
简述一下select poll epoll 演进过程,各自优缺点
什么是 reactor 模型 ?
SIGPIPIPE 信号?
已经关闭了,在在这个连接上调用 send 或者 write,不处理这个信号,会直接崩溃。所以在网络编程中我们需要捕捉这个信号。
网友评论