网络编程总结

本文介绍了网络基础,包括OSI模型中的数据传递过程,对比了TCP与UDP的区别,详细阐述了TCP的三次握手和四次挥手机制。此外,还讨论了网络编程中的socket套接字,字节序的概念,以及不同网络IO模型如阻塞IO、非阻塞IO、信号驱动IO和IO多路复用(select、poll、epoll)。最后,提到了服务器类型的循环服务器和并发服务器(进程并发、线程并发)。
摘要由CSDN通过智能技术生成

网络基础

OSI模型

OSI七层

数据传递过程

数据传递过程

应用层协议

传输层协议TCP&UDP

TCP头部
TCP与UDP异同:
1.面向连接&无连接
2.可靠性高&可靠性低(准确性)
3.协议头大(最少20byte最多80byte)&协议头小(固定8byte)
4.传输效率低&效率高

UDP可靠性设计一般在应用层做,包括丢包重传和乱序处理机制。
如果发送数据量过大,会在IP层分片,如果某片丢失,UDP会重传整个数据包

TCP的三次握手

TCP三次握手

TCP的四次挥手

TCP四次挥手

TCP如何保证可靠性

在这里插入图片描述

网络编程

socket套接字

在这里插入图片描述

字节序

网络字节序:大端序
主机字节序:取决于CPU架构
在这里插入图片描述

网络IO模型

1.阻塞IO(BIO)
缺省情况下,套接字创建后所处的IO模式就是阻塞IO。
对于接收函数,如果对端没有发送数据,接收函数就会阻塞不返回。
对于发送函数,如果发送数据大小大于发送缓冲区剩余空间大小,发送函数就会阻塞不返回。
优点:简单,常用。
缺点:如果对端不发送消息,或者对端崩溃了,接收函数就会挂住不返回,不能处理其他业务。
2.非阻塞IO (NIO)
对于接收函数,如果对端没有发送数据,接收函数会返回错误。
对于发送函数,如果发送数据大小大于发送缓冲区剩余空间大小,发送函数会返回错误。

while (1) {
	ret = recv();
	if (ret < 0 && errno == EAGAIN) {
		// 没有数据可读
        continue;
}
// 对读取到的数据做处理
……………
}

优点:可防止进程阻塞在I/O操作上。
缺点:需要循环不停检测是否有数据,很浪费CPU资源。
3.信号驱动IO

void sig_handler(int signo)
{
	recv();
}
signal(SIGIO, sig_handler);

4.IO多路复用
Linux进程默认能打开1024个文件,对应1024个文件描述符。
文件描述符的特点:
a)文件描述符都是非负的整数
b)文件描述符一般从小到大分配

IO多路复用的实现方式:
a)select
b)poll
c)epoll

select的IO多路复用的思想分为三步:
1.创建一个文件描述符集合,集合里有1024个bit位,对应1024个文件描述符。每一个文件描述符对应一路IO通道。将关注的.文件描述符加入文件描述符集合,就是将文件描述符对应的bit位置1,其余文件描述符对应的bit位置为0。

2.调用select监控文件描述符集合,如果关注的文件描述符上有数据发生,将文件描述符对应的bit位置1,其余bit位置0,返回有数据发生的文件描述符的数量。
如果关注的文件描述符上都没有数据发生,select阻塞不返回。

3.循环遍历select返回的文件描述符集合,用FD_ISSET判断关注的文件描述符上是否有数据发生,如果有数据发生,处理对应文件描述符IO通道上的数据。

服务器类型

循环服务器

TCP循环服务器一次只能接入一个客户端,为一个客户端提供消息处理服务,该客户端退出之前,其他他客户端无法接入服务器,服务器不能为其提供服务。TCP循环服务器不常用。

listenFd = socket();
bind(listenFd,);
listen(listenFd,);
while (1) {
	// 接受客户端的连接
connFd = accept(listenFd,);

// 消息处理
while (1) {
    recv(connFd,);
    process();
    send(connFd,);
}
}

2)UDP循环服务器
只要UDP循环服务器对每个客户端消息处理的时间不长,UDP循环服务器可以为多个客户端提供服务,UDP循环服务器可以使用。

sockFd = socket();
bind(sockFd,);

// 循环处理消息
while (1) {
	recvfrom(sockFd,);
	process(sockFd,);
	sendto(sockFd,);
}

并发服务器(进程并发,线程并发)

1)TCP多线程并发服务器
当客户端连接到服务器时,服务器为该客户端分配独立的线程,为其提供服务。当客户端断开与服务器的连接时,服务器回收为该客户端分配的线程资源。
在这里插入图片描述

IO多路复用服务器

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值