TCP
Wavesgf
这个作者很懒,什么都没留下…
展开
-
TCP协议及编程流程
TCP协议报头 三次握手 关于三次握手: A端发送请求后,B端确认后,还要A端也回复B确认,因为网络的拓扑结构,有时候发送的包会在网络中滞留,延迟到达,A要是一段时间收不到回复,会再次发送一个,B收到第二个包回复确认,如果此时A不回复确认,当第一个包到达B,B会认为有两个请求连接,但实际只有一个连接请求,但是在B端会为两个请求分配资源,会浪费资源;或者一个端不断发送SYN请求报文段,但是是恶意行为,做第二次确认回复,如果没有第三次确认,服务器每收到一个请求就分配资源,服务器资源就会被耗费最后奔溃;至于更原创 2020-10-13 17:32:47 · 428 阅读 · 0 评论 -
I/O复用 之 epoll
在I/O复用中,epoll的性能就比select和poll要更好了,但是epoll仅Linux独有 epoll有三个接口 int epoll_create(int size); 创建一个epoll内核事件表(记录文件描述符和事件类型),底层是一颗红黑树,size象征性的给一个大小,但是具体并不由size限制,知识提示内核大概需要这么大 int epoll_ctl(int epfd, int op, struct epoll_event * event); 操作内核事件表,op操作对应插入EPOLL_原创 2020-10-10 19:23:21 · 159 阅读 · 0 评论 -
I/O复用 -- poll
在I/O复用中,相比较select,poll就要聪明一些,先看一下poll原型 int poll(struct pollfd * fds, int nfds, int timeout); fds:传入的是数组 nfds:数组长度 timeout:定时时间,设为-1,永久阻塞 返回值>0表示就绪文件个数,为零说明无就绪,<0表示出错 从参数可以看出,poll传入的文件描述符个数并不受限制 struct pollfd { int fd//文件描述符 short events;//事件类型 sho原创 2020-10-10 18:53:34 · 163 阅读 · 0 评论 -
I/O复用 -- select
在TCP服务编程模块,在处理客户端连接时候,仅能一次处理一个连接,而且当一个连接建立后,就不能和其他连接交互(仅一个进程),若连接的客户端并没有交互,但是其他客户端需要发送数据,此时就不能和服务器进行交互,所以逻辑处理性能并不好。我们通过I/O复用技术,来改善TCP服务编程 I/O复用技术:在一定时间内可以将很多个套接字进行统一监听,每次只处理有事件发生的套接字 从图中可以看出,我们在服务器端需要一个容器来放置所有需要监听的套接字,每次只对有事件发生的套接字进行处理 select方法本身是一个系统调用原创 2020-10-10 15:29:21 · 135 阅读 · 0 评论