网络编程
g33_N
这个作者很懒,什么都没留下…
展开
-
基于TCP的服务器/客户端通信
简易TCP服务器/客户端 服务器端: 1、创建套接字 int socket( int af, int type, int protocol); af:一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式。 type:指定socket类型。新套接口的类型描述类型, TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)。常用的socket类型原创 2017-05-25 13:55:28 · 804 阅读 · 0 评论 -
I/O多路转接之epoll
所谓epoll 就是为处理大批量句柄⽽而作了改进的poll。epoll只有epoll_create,epoll_ctl,epoll_wait 3个系统调用。 1、int epoll_create(int size); 创建⼀一个epoll的句柄。当创建好epoll句柄后,它就是会占用一个fd值,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。 2、int epol原创 2017-06-09 16:56:24 · 305 阅读 · 0 评论 -
I/O多路转接之poll
poll()函数:这个函数是某些Linux系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明:#include <poll.h>int poll(struct pollfd fds[], nfds_t nfds, int timeout);参数说明: fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个函数之后原创 2017-06-15 11:16:15 · 332 阅读 · 0 评论 -
解析线程池
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远原创 2017-06-02 17:59:28 · 344 阅读 · 0 评论 -
多线程服务器
基于TCP实现多进程服务器 服务器端: 1、创建套接字: #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);domain:一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式。 type:指定soc原创 2017-06-02 17:45:30 · 483 阅读 · 0 评论 -
多进程服务器
基于TCP实现多进程服务器 服务器端: 1、创建套接字: #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);domain:一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式。 type:指定soc原创 2017-06-02 17:15:39 · 399 阅读 · 0 评论 -
I/O多路转接之select
系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、std原创 2017-06-06 12:11:45 · 377 阅读 · 0 评论 -
使用dup/dup2进行文件描述符重定向
当一个进程运行时,会有相应的文件描述符(Linux一切皆文件),一般会有3个默认的文件描述符: 0:与标准输入关联 1:与标准输出关联 2:与标准错误输出关联dup\dup2函数,对文件描述符重定向 close(1);//关闭要重定向的文件描述符 dup(fd,1);//将标准输出重定向到打开的文件 dup2(fd,1);//将打开的文件fd复制到标准输出1 代码:#include原创 2017-06-06 12:01:09 · 1077 阅读 · 0 评论 -
TCP连接建立和释放过程中状态机的变化
TCP是面向连接的协议,TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。 运输连接有三个阶段:连接建立,数据传送和连接释放。 TCP连接采用的是客户服务器方式。主动发起连接建立请求的应用进程叫客户,而被动等待连接建立的应用进程叫服务器。TCP的连接建立:三次握手 如下图所示TCP连接建立的过程。假定A主机运行的是TCP客户程序,而B主机运行的是TCP服务器程序。最初两端都处于原创 2017-05-19 21:37:43 · 1963 阅读 · 0 评论 -
数据链路层循环冗余(CRC)检验
数据链路层有许多协议,但有三个基本问题是相同的:封装成帧、透明传输和差错检验。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检验措施,目前广泛使用的是循环冗余(CRC)检验的检错技术。 CRC检验原理: 在发送端,先把数据划分为组,假定每个组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M后面添加供差错检验用的n位冗余码,然后构成一个帧发送出去,原创 2017-05-11 13:01:49 · 5654 阅读 · 0 评论 -
ARP协议和RARP协议的使用场景
地址解析协议ARP:知道IP地址请求硬件地址(MAC) 使用ARP的四中典型场景: 1、发送方是主机H1,要把IP数据报发送到另一个网络上的另一个主机H2.这时H1发送ARP请求分组(在网1上广播),找到目的主句H2的硬件地址; 2、发送方是主机H1,要把IP数据报发送到另一个网络上的另一个主机H2.这时H1发送ARP请求分组(在网1上广播),找到网1的一个路由器R1,剩下的工作由路由器R1来原创 2017-05-11 13:35:56 · 4914 阅读 · 0 评论 -
NAT(网络地址转换)&&代理服务器
网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。NAT有三种类型:静态NAT(Static NAT)、原创 2017-05-17 13:25:17 · 477 阅读 · 0 评论 -
路由表的生成及其算法
路由表:在计算机网络中,路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。在现代路由器构造中,路由表不直接参与数据包的传输,而是用于生成一个小型指向表,这个指向表仅仅包含由路由算法选择的数据原创 2017-05-17 13:50:21 · 1682 阅读 · 0 评论 -
网络端口号的类型
什么是端口? 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。如何查看端口号? 使用Netstat命令: 打开原创 2017-05-18 10:25:06 · 1364 阅读 · 0 评论 -
TCP报文首部中URG和PSH的作用
1、URG(紧急指针URGent) 当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送,例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行。因此用户从键盘发出中断命令(Ctrl+C)。如果不使用紧急指针数据,那么这两个字符将存储在接收TCP的缓存末尾。只有在所有的原创 2017-05-18 10:48:13 · 3563 阅读 · 1 评论 -
TCP的四种定时器
TCP在建立连接后会启动四个定时器:重传计时器:Retransmission Timer 坚持计时器:Persistent Timer 保活计时器:Keeplive Timer 2MSL定时器:Time_Wait Timer1、重传计时器 TCP的发送方没有在规定的时间内收到确认就要重传已发送的报文段。这种重传概念很容易理解,但重传时间的选择却不简单。 如果吧超时重传的时间原创 2017-05-18 11:33:35 · 981 阅读 · 0 评论 -
基于UDP的服务器和客户端之间的通信
服务器: 1、创建套接字 sock=socket(AF_INET,SOCK_DGRAM,0) 2、绑定 0.0.0.0:8080 让操作系统自由分配一个有效的IP 3、收数据ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen原创 2017-05-25 17:49:18 · 2212 阅读 · 0 评论 -
基于UDP的网络群聊系统
本系统所涉及到的知识与技术 1、了解Linux操作系统,熟悉基本指令的使用。 2、熟悉Linux开发环境,熟练使用vim, gcc/g++, gdb, make/makefile 等开发工具的使用,学会编写基本的Makefile文件。 3、了解网络, 熟悉数据封包,路由过程。了解协议分层。熟悉udp协议。了解tcp可靠性和udp协议特点。 4、熟练掌握C/C++语⾔言,熟练使⽤用C++ ST原创 2017-07-27 22:16:13 · 1200 阅读 · 1 评论