UNIX网络编程
最新书摘:
-
tinylambda2019-07-20历史上曾把backlog值指定为两个队列之和的最大值。在1996年间,因特网受到一种称之为SYN泛滥的新型攻击。黑客编写了一个以高速率给受害主机发送SYN的程序,用以填装一个或多个TCP端口的未完成连接队列。而且该程序的每个SYN的源IP地址都置成随机数,这样服务器的SYN/ACK就发往不知什么地方,同时防止受攻击服务器获悉黑客的真实IP地址。
-
angwer2015-09-08assuming that the IPV6_V6ONLY socket option is not set
-
angwer2015-09-08而不论是否设置了IPV6_V6ONLY套接字选项
-
[已注销]2013-07-02为何将结构大小由证书改为指向整数的指针呢?这是因为:当函数被调用的时候,结构大小是一个值,当函数返回时,结构大小又是一个结果,这种参数类型叫做值-结果参数。
-
[已注销]2013-06-08IPv4 网际协议,版本 4。... 它使用 32 位的地址。 IPv4 给 TCP、UDP、SCTP、ICMP 和 IGMP 提供递送分组的服务。IPv6 网际协议,版本 6. ... IPv6 给 TCP、UDP、SCTP 和 ICMPv6 提供递送分组的服务。TCP Transmission Control Protocol TCP 是一种面向连接的协议。它给用户进程提供可靠的全双工的字节流。TCP 套接口是流套接口的一种。TCP 关心注入确认、超时和重传等具体细节。UDP User Datagram Protocol UDP 是一种无连接协议。UDP 套接口是数据套接口的一种。UDP 数据报不能保证最终到达它们的目的地。ARP Address Resolution Protocol ARP 把 IPv4 地址映射倒硬件地址(如以太网地址)。ARP 一般用于广播网络,如以太网、令牌环网和 FDDI,而不用于点对点网络。RARP Reverse Address Protocol RARP 把硬件地址映射到 IPv4 地址。
-
赵亮亮亮亮亮亮2013-04-24每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。当应用进程调用write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有缓冲数据(或是应用进程的缓冲区大于套接口发送缓冲区,或者是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,它是通常的缺省设计(我们将在第16章阐述非阻塞的套接口)。内核将不从write系统调用返回,直到应用进程缓冲区中的所有数据都拷贝到套接口发送缓冲区。因此从写一个TCP套接口的write调用成功返回仅仅表示我们可以重新使用应用进程的缓冲区。它并不告诉我们对端的TCP或应用进程已接收到数据。TCP取套接口发送缓冲区的数据并把它发送给对端TCP,其过程基于TCP数据传送的所有规则。对端TCP必须确认收到数据,只有收到对端的ACK,本端TCP才能删除套接口发送缓冲区中已确认的数据。TCP必须保留数据拷贝直到对端确认为止。
-
赵亮亮亮亮亮亮2013-04-24注意,TCP并不保证数据一定会被对方端点接收,因为这是不可能做到的。如果可能的话,TCP就把数据投递到对方端点,否则就(通过放弃重传并中止连接这一手段)通知用户。这么说来,TCP也不能被描述成是100%可靠的协议;它提供的是数据的可靠投递或者故障的可靠通知。
-
m_vptr2013-01-16Posix并不是一个单一标准第一个Posix标准涉及:进程原语(fork, exec,信号及定时器),进程环境(用户ID,进程组),文件与目录(所有I/O函数),终端I/O,系统数据库(保密字文件和用户组文件),以及tar和cpio归档格式。
-
m_vptr2013-01-16网际协议簇,在TCP与UDP之间留有一个间隙,指出应用程序可以绕过传输层而直接使用IPv4或Ipv6,称为raw socket
-
m_vptr2013-01-16如果有多个客户连接同时到达,系统内核在最大数目的限制下把它们排入队列,然后每次返回一个给accept函数
-
厚积薄发2011-04-10If we refer to a service by its name in our code, instead of by its port number, and if the mapping from the name to port number is contained in a file (normally /etc/services), then if the port number changes, all we need to modify is one line in the /etc/services file instead of having to recompile the applications. The next function, getservbyname, looks up a service given its name.
-
厚积薄发2011-04-10even though addr is a char*, you actually want to pass in a pointer to a struct in_addr.
-
Single Bit2011-04-01既然发生错误时终止程序的运行是普遍的情况,我们可以定义包裹函数(wrapper function)来简化我们的程序。包裹函数调用实际函数,检查返回值,并在发生错误时终止进程。intSocket(int family, int type, int protocol){ int n; if ( (n = socket(family, type, protocol)) < 0)err_sys("socket error"); return(n);}