1.抓包分析三次握手和四次挥手
- 安装wireshark
- 启动wireshark
- 启动wireshark
2.UDP协议
TCP是有连接的,可靠的传输层协议。
UDP是无连接的,不保证可靠的传输层协议。
UDP的使用场景:
- 对传输效率要求高,对可靠性要求不高的场景,比如视频聊天。
- 对于小尺寸数据,广播、组播场景。
UDP为啥不可靠:
- 丢包不会重发
- UDP校验和允许关闭。
可靠性 > 实时性:选TCP
实时性 > 可靠性:选UDP
UDP的缺点:
- 不保证可靠
- UDP有长度限制。
UDP的优点:
- 实时性高。
如果想用UDP,又想要保证可靠性,需要应用层自己做响应确认。
- UDP的服务器和客户端模型
3.IO模型
- 阻塞IO
对于接收消息:如果没有消息可读,函数挂住不返回。
对于发送消息:如果发送缓冲区不足,发送函数挂住不返回。
优点:简单,常用。
缺点:如果通道损坏,程序就挂死了。
- 非阻塞IO
while (1) {
ret = read();
if (ret < 0 && errno == xxx) {
// 没有读到数据处理
continue;
}
// 读到数据处理
}
对于接收消息:不管有没有读到消息,函数都会返回,需要调用自己做判断处理。
缺点:不常用,效率低,消耗CPU资源。
优点:可以防止进程阻塞在IO上。
非阻塞套接字设置方法:
- 信号驱动IO
void sigFunc(int signo)
{
read();
}
signal(SIGIO, sigFunc);
// 继续处理其他业务
- I/O 多路复用
Linux进程默认最多能打开1024个文件描述符。0代表标准输入,1代表标准输出。2标准错误。
1秒=10^3毫秒=10^6微秒