您的位置:首页 > 理论基础 > 计算机网络

(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结构体,如分配一个数组,而不用关系最大描述符问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UDP 服务器 TCP