
网络学习笔记
「已注销」
这个作者很懒,什么都没留下…
展开
-
服务器编程框架
虽然服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理。 该图既能用来描述一台服务器,也能用来描述一个服务器机群。 I/O处理单元是服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收客户数据,将服务器响应数据返回给客户端。但是,数据的收发不一定在I/O处理单元中执行,也可能在逻辑单元中执行,具体在何处执行取决于事件处理模式。对于一个服务器机群来说,I/O处理单原创 2015-05-20 16:14:19 · 1180 阅读 · 0 评论 -
sendfile函数
sendfile函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,这被称为零拷贝。sendfile函数的定义如下:#include <sys/sendfile.h>ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count);in_fd参数是待读出内容的文件原创 2015-05-19 15:18:36 · 3299 阅读 · 0 评论 -
Linux系统日志
rsyslogd守护进程既能接收用户进程输出的日志,又能接收内核日志。用户进程是通过调用syslog函数生成系统日志的。该函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log中,rsyslogd则监听该文件以获取用户进程的输出。内核日志在老的系统上是通过另外一个守护进程rklogd来管理的,rsyslogd利用额外的模块实现了相同的功能。内核日志由printk等原创 2015-05-19 21:08:23 · 714 阅读 · 0 评论 -
getaddrinfo
getaddrinfo函数既能通过主机名获得IP地址(内部使用的是gethostbyname函数),也能通过服务名获得端口号(内部使用的是getservbyname函数)。它是否可重入取决于其内部调用的gethostbyname和getservbyname函数是否是它们的可重入版本。该函数的定义如下:#include <netdb.h>int getaddrinfo(const char* hos原创 2015-05-19 10:21:06 · 2621 阅读 · 0 评论 -
mmap函数和munmap函数
mmap函数用于申请一段内存空间。我们可以将这段内存作为进程间通信的共享内存,也可以将文件直接映射到其中。munmap函数则释放由mmap创建的这段内存空间。它们的定义如下:#include <sys/mman.h>void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset);int munma原创 2015-05-19 16:33:17 · 5219 阅读 · 0 评论 -
SO_RCVLOWAT和SO_SNDLOWAT选项
SO_RCVLOWAT和SO_SNDLOWAT选项分别表示TCP接收缓冲区和发送缓冲区的低水位标记。它们一般被I/O复用系统调用用来判断socket是否可读或可写。当TCP接收缓冲区中可读数据的总数大于其低水位标记时,I/O复用系统调用将通知应用程序可以从对应的socket上读取数据;当TCP发送缓冲区中的空闲空间(可以写入数据的空间)大于其低水位标记时,I/O复用系统调用将通知应用程序可以往对应的原创 2015-05-18 20:21:09 · 2434 阅读 · 0 评论 -
网络信息API
gethostbyname和gethostbyaddr gethostbyname函数根据主机名称获取主机的完整信息,gethostbyaddr函数根据IP地址获取主机的完整信息。gethostbyname函数通过先在本地的/etc/hosts配置文件中查找主机,如果没有找到,再去访问DNS服务器。#include <netdb.h>struct hostent* gethostbyname(c原创 2015-05-18 21:18:32 · 422 阅读 · 0 评论 -
HTTP代理服务器的工作原理
在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问。一个HTTP请求可能被多个代理服务器转发,后面的服务器称为前面服务器的上游服务器。代理服务器按照其使用方式和作用,分为正向代理服务器、反向代理服务器、透明代理服务器。正向代理要求客户端自己设置代理服务器的地址。客户的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。比如处于防火墙内的局原创 2015-05-17 20:52:58 · 4464 阅读 · 0 评论 -
本地名称查询
一般来说,通过域名来访问Internet上的某台主机时,需要使用DNS服务来获取该主机的IP地址。但如果我们通过主机名来访问本地局域网上的机器,则可通过本地的静态文件来获得该机器的IP地址。Linux将目标主机名及其对应的IP地址存储在/etc/hosts配置文件中。当需要查询某个主机名对应的IP地址时,程序将首先检查这个文件。如果程序在/etc/hosts文件中未找到目标机器名对应的IP地址,它将原创 2015-05-17 21:17:07 · 472 阅读 · 0 评论 -
TCP拥塞控制机制
原文地址:http://blog.sina.com.cn/s/blog_48ebca64010003t0.html研究TCP的拥塞机制,不仅仅是想了解TCP如何的精巧,更多的是领悟其设计思想,即在一般情况下,我们该怎样处理问题。一.拥塞的发生与其不可避免 拥塞发生的主要原因在于网络能够提供的资源不足以满足用户的需求,这些资源包括缓存空间、链路带宽容量和中间节点的处理能力。由于互联网的设计机制导转载 2015-05-17 19:19:32 · 891 阅读 · 0 评论 -
监听socket
socket被命名(与socket地址绑定)之后,还不能马上接受客户连接,我们需要使用如下系统调用来创建一个监听队列以存放待处理的客户连接:#include <sys/socket.h>int listen(int sockfd, int backlog);sockfd参数指定被监听的socket。backlog参数提示内核监听队列的最大长度。监听队列的长度如果超过backlog,服务器将不受理新原创 2015-05-18 09:38:22 · 418 阅读 · 0 评论 -
SO_LINGER选项
SO_LINGER选项用于控制close系统调用在关闭TCP连接时的行为。默认情况下,当我们使用close系统调用来关闭一个socket时,close将立即返回,TCP模块负责把该socket对应的TCP发送缓冲区中残留的数据发送给对方。设置(获取)SO_LINGER选项的值时,我们需要给setsockopt(getsockopt)系统调用传递一个linger类型的结构体,其定义如下:#includ原创 2015-05-18 20:56:53 · 3554 阅读 · 0 评论