《UNIX网络编程(卷1):连网的APIs:套接字与XTI(第二版)(英文影印版)》的原文摘录

  • There are two reasons for the TIME_WAIT state: 1. To implement TCP's full-duplex connection termination reliably. 2. To allow old duplicate segments to expire in the network. (查看原文)
    y 2012-09-14 22:51:17
    —— 引自第64页
  • 如果有多个客户连接同时到达,系统内核在最大数目的限制下把它们排入队列,然后每次返回一个给accept函数 (查看原文)
    m_vptr 2013-01-16 11:22:04
    —— 引自第12页
  • 网际协议簇,在TCP与UDP之间留有一个间隙,指出应用程序可以绕过传输层而直接使用IPv4或Ipv6,称为raw socket (查看原文)
    m_vptr 2013-01-16 11:26:56
    —— 引自第15页
  • Posix并不是一个单一标准 第一个Posix标准涉及:进程原语(fork, exec,信号及定时器),进程环境(用户ID,进程组),文件与目录(所有I/O函数),终端I/O,系统数据库(保密字文件和用户组文件),以及tar和cpio归档格式。 (查看原文)
    m_vptr 2013-01-16 11:35:43
    —— 引自第20页
  • 注意,TCP并不保证数据一定会被对方端点接收,因为这是不可能做到的。如果可能的话,TCP就把数据投递到对方端点,否则就(通过放弃重传并中止连接这一手段)通知用户。这么说来,TCP也不能被描述成是100%可靠的协议;它提供的是数据的可靠投递或者故障的可靠通知。 (查看原文)
    赵赵 2013-04-24 20:37:03
    —— 引自第30页
  • 每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。当应用进程调用write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有缓冲数据(或是应用进程的缓冲区大于套接口发送缓冲区,或者是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,它是通常的缺省设计(我们将在第16章阐述非阻塞的套接口)。内核将不从write系统调用返回,直到应用进程缓冲区中的所有数据都拷贝到套接口发送缓冲区。因此从写一个TCP套接口的write调用成功返回仅仅表示我们可以重新使用应用进程的缓冲区。它并不告诉我们对端的TCP或应用进程已接收到数据。 TCP取套接口发送缓冲区的数据并把它发送给对端TCP,其过程基于TCP数据传送的所有规则。对端TCP必须确认收到数据,只有收到对端的ACK,本端TCP才能删除套接口发送缓冲区中已确认的数据。TCP必须保留数据拷贝直到对端确认为止。 (查看原文)
    赵赵 2013-04-24 21:50:55
    —— 引自第49页
  • IPv4 网际协议,版本 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-06-08 23:19:50
    —— 引自第28页
  • 为何将结构大小由证书改为指向整数的指针呢?这是因为:当函数被调用的时候,结构大小是一个值,当函数返回时,结构大小又是一个结果,这种参数类型叫做值-结果参数。 (查看原文)
    [已注销] 2013-07-02 21:33:21
    —— 引自第62页
  • 而不论是否设置了IPV6_V6ONLY套接字选项 (查看原文)
    angwer 2015-09-08 17:29:13
    —— 引自第250页
  • assuming that the IPV6_V6ONLY socket option is not set (查看原文)
    angwer 2015-09-08 17:29:13
    —— 引自第250页
  • 历史上曾把backlog值指定为两个队列之和的最大值。在1996年间,因特网受到一种称之为SYN泛滥的新型攻击。黑客编写了一个以高速率给受害主机发送SYN的程序,用以填装一个或多个TCP端口的未完成连接队列。而且该程序的每个SYN的源IP地址都置成随机数,这样服务器的SYN/ACK就发往不知什么地方,同时防止受攻击服务器获悉黑客的真实IP地址。 (查看原文)
    tinylambda 2019-07-20 01:02:02
    —— 引自第87页
  • 既然发生错误时终止程序的运行是普遍的情况,我们可以定义包裹函数(wrapper function)来简化我们的程序。包裹函数调用实际函数,检查返回值,并在发生错误时终止进程。 int Socket(int family, int type, int protocol) { int n; if ( (n = socket(family, type, protocol)) < 0) err_sys("socket error"); return(n); } (查看原文)
    Single Bit 2011-04-01 22:14:20
    —— 引自第10页
  • even though addr is a char*, you actually want to pass in a pointer to a struct in_addr. (查看原文)
    厚积薄发 2011-04-10 16:30:05
    —— 引自第310页
  • If 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-10 16:58:19
    —— 引自第311页