(UNP)问题小结
2016-01-17 11:38
387 查看
写在前面:
主要概论和一些具体疑问以及更多的提问式思考。UNP和TCP/IP详解
一.TCP三路握手,连接终止:
1.tcp可靠性实现之一。三个分组()确保服务器和客户端的确认信息都会有回应。
2.每次回应序号加一防止被延时的分组又被重传的情况下,导致错误。
3.连接终止,服务端半关闭,服务端close套接字,也会发送一个FIN,为四个分组。
4.建立连接的超时机制。connect后发送FIN无响应,6s->24s->75s无响应返回出错。
5.listen()把未连接套接字编程被动套接字(提示内核接受指向该套接字的请求)。
成功返回listening socket
6.accept()从已完成连接队列头(三路握手完成)返回下一个已完成连接。
成功返回connected socket
一个服务器仅仅创建一个监听套接字 listening socket
生命周期内存在。
服务器进程接受的客户
已连接套接字 connected socket
完成服务被关闭。
二.TCP和UDP区别:
TCP传输控制协议 (Transmission Control Protocol)
面向连接协议; 全双工字节流->stream socket;
关注确认,超时,重传细节。
UDP
用户数据报协议 (User Datagram Protocol)
无连接协议; 数据包套接字->datagram socket;
无法保证能否到达目的地。
大多数tcp服务器并发,udp服务器迭代
三.五种I/O模型
四.select和epoll区别:
selecy 和epoll。功能类似,用IO复用。允许进程提示内核等待多个事件的任何的其中一个发生,并只有在一个或者多个事件发生或经历后,才唤醒它。int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
需要使用描述符集来指定fd_set参数值,如下四个宏:
void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);
最大描述符固定!
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
struct pollfd {
int fd; /* file descriptor */
short events; /* requested events */
short revents; /* returned events */
};
这样只需管理pollfd结构体,如分配一个数组,而不用关系最大描述符问题。
相关文章推荐
- 小心服务器内存居高不下的元凶--WebAPI服务
- 运维入门
- 利用开源软件打造自己的全功能远程工具
- Linux5.9无人值守安装
- 数据中心和云未来的十二大趋势
- 用vsftp快速搭建ftp服务器
- Linux快速构建apache web服务器
- 服务器监控策略浅谈
- 如何降低服务器采购成本 原理分析
- 建议的服务器分区办法
- 服务器托管六大优势分析
- Erlang实现的一个Web服务器代码实例
- 服务器技术全面解析
- 保护DNS服务器的几点方法小结
- 我国成为全球第二大服务器消费国
- 服务器 安全检查要点[星外提供]
- C#基于UDP实现的P2P语音聊天工具
- 服务器应用自动重新启动IIS批处理[原创]_DOS/BAT_脚本之家
- FTP 服务器关于权限的问题