随笔分类 -  网络及UNP

TCP_NODELAY 和 TCP_CORK主要区别
摘要:一句话总结:tcp_nodelay:禁止nagle算法,有需要发送的就立即发送,比较常见tcp_cork:它是一种加强的nagle算法,过程和nagle算法类似,都是累计数据然后发送。但它没有 nagle中1的限制,所以,在设置cork后,即使所有ack都已经收到,但我还是不想发送数据,我还想继续等... 阅读全文

posted @ 2015-07-23 14:55 as_ 阅读(9923) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 2 传输层:TCP、UDP和SCTP
摘要:注,总结中暂时忽略SCTP1.总图虽然称为“TCP/IP”协议族,但是本协议族还有许多其他成员,见下图2.用户数据包协议(UDP)UDP 套接字写入一个消息,该消息接着被封装(encapsulating)进一个UDP数据报,该UDP数据报又进而被封装成一个IP数据报,然后发送到目的地。UDP不保证UDP数据报到达其最终目的地,不保证各个数据报的先后顺序跨网络保持不变,也不保证每个数据报只到达一次。用UDP进行网络编程所碰到的问题是缺乏可靠性,我们也称UDP提供无连接的(connectionless)服务,因为UDP客户与服务器不必存在长期的关系。3.传输控制协议(TCP)首先,TCP提供客户与 阅读全文

posted @ 2012-08-11 10:43 as_ 阅读(1567) 评论(0) 推荐(1) 编辑

UNP总结 Chapter 26~29 线程、IP选项、原始套接字、数据链路访问
摘要:此为UNP最后一段总结 Chapter30主要为代码实践 请参考UNP一、线程这里UNP的线程与APUE中讲得线程基本一致,但是APUE讲得更加细致,所以这里只列出主要内容(线程数据会稍微详细) 详细见APUE线程相关章节 或者本博文中的APUE专题1.基本线程函数:创建与终止2.线程特定数据使用线程特定数据是使现成函数线程安全的常用技巧这里重点提一下的是1).每个系统支持有限数量的线程特定数据项。系统(很可能是线程库)为每个进程维护一个数据结构,我们称之为Key结构,如下图2).Key结构中的标志指示这个数组元素是否正在使用,所有的标志初始化为"不在使用"。当一个线程调用 阅读全文

posted @ 2012-08-07 21:53 as_ 阅读(1052) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 22~25 高级UDP套接字编程、高级SCTP 套接字编程、带外数据、信号驱动I/O
摘要:一、高级UDP套接字编程1.接收标志、目的IP地址和接口索引作为recvmsg的一个例子,我们将要写一个名为recvfrom_flags的函数,它与recvfrom类似,但他还返回:返回的msg_flags值收到的数据报的目的地址(通过设置IP_RECVDSTADDR套接口选项)接收数据报接口的索引(通过设置IP_RECIF套机口选项)相关详细代码 见UNP P4632.何时用UDP代替TCP使用广播或者多播时候,因为UDP支持广播或多播类似实时音频应用的程序应使用UDP对于简单的请求-应答应用程序应使用UDP对于海量数据传输(例如文件传输)不应该使用UDP3.给UDP应用增加可靠性如果我们想 阅读全文

posted @ 2012-08-07 17:40 as_ 阅读(1320) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 18~21 路由套接字、密钥管理套接字、广播、多播
摘要:一、路由套接字1.概述在路由器接口中支持三种类型的操作1). 进程能通过写路由套接口向内核发消息。2). 进程能在路由套接口上从内核读消息,这是核心通知进程已收到一个ICMP重定向消息并进行了处理的方式。3). 进程可以用sysctl函数得到路由表或列出所有已配置的接口。2.数据链路套接口地址结构在路由套接口上返回的一些消息中包含数据链路套接口地址结构,他在<net/if_dl.h>定义struct sockaddr_dl { uint8_t sdl_len; sa_family_t sdl_family; /* AF_LINK */ uint16_t sdl_i... 阅读全文

posted @ 2012-08-07 15:52 as_ 阅读(2664) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 15~17 Unix域协议、非阻塞式I/O、ioctl操作
摘要:一、Unix域协议Unix域协议并不是一个实际的协议族,它只是在同一台主机上进行客户-服务器通信时,使用与在不同主机上的客户和服务器间通信时相同的API(套接口或XTI)的一种方法。当客户和服务器在同一台主机上时,Unix域协议是IPC通信方式的一种替代品。Unix域提供了两种类型的套接口:字节流套接口(与TCP类似)和数据报套接口(与UDP类似)。1.Unix域套接口地址结构struct sockaddr_un { sa_family_t sun_family; /* AF_LOCAL */ char sun_path[104]; /* null-terminat... 阅读全文

posted @ 2012-08-07 12:59 as_ 阅读(1283) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 12~14 IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
摘要:一、IPv4与IPv6的互操作性1.IPv4客户与IPv6服务器拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户。这是通过使用IPv4映射的IPv6地址实现的。要求,ipv6服务器必须具有双重协议栈,即服务器必须同时拥有ipv4地址和ipv6地址,称其为ipv6服务器是因为开放的网络套接口为ipv6类型。当ipv4客户欲连接ipv6服务器时,通过gethostbyname获得服务器主机的A记录(即ipv4地址),并通过网络发送ipv4数据包。ipv6服务器接受这个ipv4数据包,并通过内核将客户ipv4地址映射为ipv6地址返回。2.I 阅读全文

posted @ 2012-08-06 22:20 as_ 阅读(897) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 11 名字与地址转换
摘要:本章讲述在名字和数值地址间进行转换的函数:gethostbyname和gethostbyaddr在主机名字与IP地址间进行转换,getservbyname和getservbyport在服务器名字和端口号间进行转换。1.域名系统域名系统(Domain Name System,DNS)主要用于主机名与IP地址间的映射。主机名可以是简单名字,如solaris或bsdi,也可以是全限定域名FQDN(Fully Qualified Domain Name),如solaris.kohala.com1).资源记录DNS中的条目称为资源记录RR(resource record),一般感兴趣的有如下几个:A A 阅读全文

posted @ 2012-08-06 21:05 as_ 阅读(1966) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 9~10 基本SCTP套接字编程及C/S程序例子
摘要:这里简要列出内容 不做详细总结1.接口模型1).一到一形式2).一到多形式2.涉及函数sctp_bindx函数sctp_connectx函数sctp_getpaddrs函数sctp_freepaddrs函数sctp_getladdrs函数sctp_freeladdrs函数sctp_sendmsg函数sctp_recvmsg函数sctp_opt_info函数sctp_peeloff函数shutdown函数3.头端阻塞4.控制总结程序代码示例详见UNP 阅读全文

posted @ 2012-08-06 17:14 as_ 阅读(792) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 8 基本UDP套接字编程
摘要:1.概述使用UDP编写的一些常用应用程序有:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)下图给出典型的UDP客户/服务器程序的函数调用:2.recvfrom和sendto函数两个函数类似于标准的read和write函数,不过需要三个额外的参数#include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); ssize_t sendto(int sockf 阅读全文

posted @ 2012-08-06 17:03 as_ 阅读(1023) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 7 套接字选项
摘要:1.getsockopt和setsockopt函数这两个函数仅用于套接字:#include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const void *optval socklen_t optlen);//均返回:若成功为0,出错为-1其中sockfd必须指向一个打开套接字描述符,level(级别)指定系统中解释选项的代 阅读全文

posted @ 2012-08-06 15:22 as_ 阅读(1032) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 6 I/O复用:select和poll函数
摘要:有些进程需要一种预先告知内核的能力,使得内核一旦发现进程指定的一个或多个I/O条件就绪(也就是说输入已准备好被读取,或者描述符已能承受更多的输出),他就通知进程,这个能力成为I/O复用1.I/O模型5种基本I/O模型阻塞式I/O非阻塞式I/OI/O复用(select和poll)信号驱动式I/O(SIGIO)异步I/O一个输入操作通常包括两个不同的阶段等待数据准备从内核向进程复制数据对于一个套接口上的输入操作,第一步一般是等待数据到达网络,当分组到达时,它被拷贝到内核中的某个缓冲区,第二步是将数据从内核缓冲区拷贝到应用缓冲区。1).阻塞式I/O最流行的I/O模型是阻塞式I/O(blocking 阅读全文

posted @ 2012-08-06 00:14 as_ 阅读(1252) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 5 TCP客户/服务器程序实例
摘要:1.概述这章的TCP客户/服务器模型2.TCP回射服务器程序1).main函数#include "unp.h"int main(int argc, char **argv){ int listenfd, connfd; pid_t childpid; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; listenfd = Socket (AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); serva... 阅读全文

posted @ 2012-08-05 17:58 as_ 阅读(750) 评论(0) 推荐(1) 编辑

UNP总结 Chapter 4 基本TCP套接字编程
摘要:1.socket函数为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型#include <sys/socket.h> int socket (int family, int type, int protocol);//返回:若成功则为非负描述符,若出错则为-1其中family指明协议族,type参数指明套接字类型,protocol参数应该设为某个(见下图)协议类型常值,或者设为0,以选择所给定family和type组合的系统默认值socket函数的family常值family说 明AF_INETAF_INETAF_LOCALAF_ROUTE 阅读全文

posted @ 2012-08-05 16:41 as_ 阅读(1249) 评论(0) 推荐(1) 编辑

UNP总结 Chapter 3 套接字编程简介
摘要:1.套接字地址结构1).IPv4套接字地址结构IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet.h>头文件中,如下所示struct in_addr{ in_addr_t s_addr; //32位的IPv4网络字节序} struct sockaddr_in{ uint8_t sin_len; //带符号8位整数地址结构长度 sa_family_t sin_family; //协议族,IPv4为AF_INET ... 阅读全文

posted @ 2012-08-05 13:40 as_ 阅读(3537) 评论(0) 推荐(0) 编辑

UNP总结 Chapter 1 简介
摘要:写在开头 UNP总结只列出相对重要的内容 简化细节 如想详细了解 见UNP socket API 第三版1.客户与服务器处于同一个以太网,有如下所示的通信层次2.一个简单TCP时间获取客户程序#include "unp.h"int main(int argc, char **argv){ int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_quit("usage: a.out <IPaddress>"); ... 阅读全文

posted @ 2012-08-05 01:59 as_ 阅读(918) 评论(0) 推荐(0) 编辑

HTTP请求报文和HTTP响应报文
摘要:HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。HTTP请求报文一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。or<request-line><headers><blank line>[<request-body>1.请求头请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。HTTP协议的请求方法有GET、POST、HEAD、P 阅读全文

posted @ 2012-07-28 14:17 as_ 阅读(180845) 评论(12) 推荐(33) 编辑

HTTP协议通信过程汇总
摘要:来源网络 原创不详当我们在浏览器的地址栏输入“www.baidu.com”然后按回车,这之后发生了什么事,我们直接看到的是打开了对应的网页,那么内部客户端和服务端是如何通信的呢?1、1、URL自动解析HTTP URL包含了用于查找某个资源的足够信息,基本格式如下:HTTP://host[“:”port][abs_path],其中HTTP表示桶盖HTTP协议来定位网络资源;host表示合法的主机域名或IP地址,port指定一个端口号,缺省80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们 阅读全文

posted @ 2012-07-28 10:06 as_ 阅读(4264) 评论(1) 推荐(2) 编辑

Linux/Unix select函数 及select/poll与epoll的对比
摘要:select()是Linux/Unix 网络编程中的一个重要函数,通过调用select函数可以确定一个或者多个套接字(描述符)的状态,判断套接字上是否有数据需要读出或者写入 #include<sys/select.h> #include<sys/time.h> int select(int max_fd_p_1, fd_set *readset, fd_set* writeset, fd_set* exceptset, struct timeval* timeout); 返回:就绪描述字的个数,0——超时,-1——出错select函数有5个参数,我们会介绍每一个参数。参 阅读全文

posted @ 2012-07-12 19:15 as_ 阅读(2826) 评论(0) 推荐(0) 编辑

导航