原文出处:http://blog.jobbole.com/87398/
古老的问题
1)TCP 最小的端口号是多少?
TCP的端口大小占用2byte,范围是0~65535.通常0~1023是公共端口,1024~65535可供用户注册使用。用于绑定一些已知的服务,其中端口为0表示让系统自动分配可以使用的端口号。
2)TCP 帧中有一个叫做 URG Pointer 的字段,什么时候会用到该字段?
TCP的第一个字节到紧急指针的位置就是紧急数据。紧急数据一般会放到普通数据的最前端,不经过接收缓冲区而直接交由上层,其余的数据仍需在接受缓冲区中排队。一般可用于紧急中断连接。比如说希望在对端的接受缓冲区数据没有处理完成时就中断连接的话就可以使用URG字段。
3)RST包能有荷载么?
RST包没有载荷。
14551 158.944789 192.168.88.246 192.168.88.119 TCP 54 italk > 38380 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
4)socket中的 IP_FREEBIND 选项有什么用?
该值表示允许绑定一个非本地IP地址和不存在的IP地址,可以通过IP_FREEBIND设置.
被遗忘奇葩问题
5)PSH 标志实际上有什么用?
告诉对端不用等到接收缓冲区满就要处理缓冲区的数据。
6)“UDP” 包可以把校验和字段设置为0么?
可以,校验和如果为0的话,接收端就不会去进行UDP包校验。如果不为零,则当校验和和实际的校验结果不一致时,丢弃该UDP数据包。
7)TCP 的同时开放连接是如何工作的?真的能工作么?
碎片处理和拥塞控制
8)什么是愚笨窗口综合征(stupid window syndrome)?
当数据以大块的形式被传递给发送端TCP实体,但是接收端的交互应用每次仅读取一个字节数据的时候,就会产生愚笨窗口综合症.
9)TCP 头里的 CWE 和 ECE 标志有什么用?
10)IP 头里的 ID 字段是什么?ID 字段必须和 DF 比特位一起完成什么工作?为什么有些 IP 包的 ID 字段不是零并且设置了 DF?
该字段标记当前分片为第几个分片,在数据报重组时很有用
新提议
11)SYN 包可以有荷载么?(提示:新RFC提案)
SYN包没有载荷。
12)SYN+ACK 包可以有荷载么?
SYN+ACK 包也没有载荷。
ICMP Path MTU
13)ICMP 包太大(packet-too-big )的消息会由路由器返回,并且荷载里包含了原始包的一部分。Linux 系统中可接受的最小荷载长度是多少?
14)当 ICMP包太大(packet-too-big )的消息被中间路由返回时会包含这个路由的源IP。但在实际操作中,我们经常可以看到 ICMP 消息的源 IP 与原始包的目的 IP 相同。为什么会这样?
Linux配置
15)Linux 有一个名为 “tcp_no_metrics_save” 的 sysctl 设置。它用于存储什么?存储多久?
16)Linux 使用了两个队列来处理到达的 TCP 连接:SYN 队列和接收队列。SYN 队列长度是多少?
队列长度由listen的backlog参数和内核的 net.core.somaxconn 参数共同决定
17)如果 SYN 队列因变得很大而导致溢出,那么会发生什么?
不再接收新的请求。
路由相关
最后:
18)BGP bogons 是什么?为什么说它们现在只是个小问题?
19)TCP 有一个会添加 MD5 校验和到包中的扩展。该扩展什么时候起作用?
20)IPv4 和 IPv6 的校验和算法有什么区别?