本书所有测试网络例子
1、TCP/IP的分层
在图1 - 2的右边,我们注意到应用程序通常是一个用户进程,而下三层则一般在(操作系
统)内核中执行。尽管这不是必需的,但通常都是这样处理的,例如 U N I X操作系统。
在图1 - 2中,顶层与下三层之间还有另一个关键的不同之处。应用层关心的是应用程序的
细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的
通信细节。
2、TCP/IP协议族
3、五类网络地址
区分各类地址的最简单方法是看它的第一个十进制整数,有三类I P地址:单播地址(目的为单个主机) 、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)
4、域名系统
在T C P / I P领域中,域名系统(D N S)是一个分布的数据库,由它来提供 I P地址和
主机名之间的映射信息。现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的I P地址。类似地,系统还提供一个逆函数—给定主机的I P地址,查看它所对应的主机名。
大多数使用主机名作为参数的应用程序也可以把 I P地址作为参数。例如,在第 4章中当我们用Te l n e t进行远程登录时,既可以指定一个主机名,也可以指定一个 I P地址。
5、封装
当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作
一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部
信息) ,该过程如图1 - 7所示。T C P传给I P的数据单元称作 T C P报文段或简称为T C P段(T C P s e g m e n t) 。I P传给网络接口层的数据单元称作I P数据报(IP datagram)。通过以太网传输的比特流称作帧(Fr a m e )。
更准确地说,图1 - 7中I P和网络接口层之间传送的数据单元应该是分组( p a c k e t) 。
分组既可以是一个I P数据报,也可以是I P数据报的一个片(f r a g m e n t) 。我们将在11 . 5节讨论IP数据报分片的详细情况。
由于T C P、U D P、I C M P和I G M P都要向I P传送数据,因此I P必须在生成的I P首部中加入某种标识,以表明数据属于哪一层。为此, I P在首部中存入一个长度为8 b i t的数值,称作协议域。1表示为I C M P协议,2表示为I G M P协议,6表示为T C P协议,1 7表示为U D P协议。
6、解封装
为协议I C M P和I G M P定位一直是一件很棘手的事情。在图1 - 4中,把它们与I P放在
同一层上,那是因为事实上它们是I P的附属协议。但是在这里,我们又把它们放在I P层
的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。
7、重复型服务器 VS 并发型服务器
可以将这种服务分为两种类型:重复型或并发型。
(1)重复型服务器通过以下步骤进行交互:
I1. 等待一个客户请求的到来。
I2. 处理客户请求。
I3. 发送响应给发送请求的客户。
I4. 返回I 1步。
重复型服务器主要的问题发生在I 2状态。在这个时候,它不能为其他客户机提供服务。
(2)相应地,并发型服务器采用以下步骤:
C1. 等待一个客户请求的到来。
C2. 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务
或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器
对客户的全部请求进行处理。处理结束后,终止这个新服务器。
C3. 返回C 1步。
并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。也就是说,
每个客户都有它自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户
服务。
一般来说,T C P服务器是并发的,而 U D P服务器是重复的
8、tcp/udp端口
从该图可以看出,当使用 T C P和U D P提供相同的服务时,一般选择相同的端口号。
如果仔细检查这些标准的简单服务以及其他标准的 T C P / I P服务(如Te l n e t、F T P、
S M T P等)的端口号时,我们发现它们都是奇数。这是有历史原因的,因为这些端口号
都是从N C P端口号派生出来的(N C P,即网络控制协议,是A R PA N E T的运输层协议,
是T C P的前身) 。N C P是单工的,不是全双工的,因此每个应用程序需要两个连接,需
预留一对奇数和偶数端口号。当T C P和U D P成为标准的运输层协议时,每个应用程序
只需要一个端口号,因此就使用了NCP中的奇数。
9、internet != Internet
i n t e r n e t这个词第一个字母是否大写决定了它具有不同的含义。
i n t e r n e t意思是用一个共同的协议族把多个网络连接在一起。而 I n t e r n e t指的是世界范围内通过T C P / I P互相通信的所有主机集合(超过1 0 0万台) 。I n t e r n e t是一个i n t e r n e t,但i n t e r n e t不等于I n t e r n e t。
10、链路层三个基本问题(一)封装成帧
在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。
11、链路层三个基本问题(二)透明传输
12、差错检查(CRC)
13、MTU
M T U是I P向链路层查询的结果,因此该值必须包括通常的 T C P和I P首部
我们使用M T U经常是因为它对I P数据报的长度进行限制,但一般与最小长度无关。
14、无连接
无连接(c o n n e c t i o n l e s s)这个术语的意思是I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明, I P数据报可以不按发送顺序接收。
15、IP首部
16、网络字节序
4个字节的32 bit值以下面的次序传输:首先是0~7 bit,其次8~15 bit,然后1 6~23 bit,
最后是24~31 bit。这种传输次序称作big endian字节序。由于T C P / I P首部中所有的二进制整数
在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数
的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序。
17、IP报头之:总长度字段
总长度字段是指整个I P数据报的长度,以字节为单位。利用首部长度字段和总长度字段,
就可以知道I P数据报中数据内容的起始位置和长度。由于该字段长 1 6比特,所以I P数据报最
长可达6 5 5 3 5字节(回忆图 2 - 5,超级通道的 M T U为6 5 5 3 5。它的意思其实不是一个真正的
M T U—它使用了最长的I P数据报) 。当数据报被分片时,该字段的值也随着变化,这一点将
在11 . 5节中进一步描述。
18、576字节来源
默认MSS是536,加上tcp报头和IP报头,就是576
19、路由表长什么样
20、路由的原理
21、目的IP不变,MAC地址总在改变
当数据报从b s d i被传到s u n主机上以后,目的I P地址是最终的信宿机地
址(1 9 2 . 4 8 . 9 6 . 9) ,但是链路层地址却是s u n主机的以太网接口地址。
22、特殊的IP地址
23、ARP
A R P本来是用于广播网络的,有许多主机或路由器连在同一个网络上。
点对点链路不使用A R P。当设置这些链路时(一般在引导过程进行) ,必须告知内核链路每一端的I P地址。像以太网地址这样的硬件地址并不涉及。
24、免费ARP
免费A R P可以有两个方面的作用:
1) 一个主机可以通过它来确定另一个主机是否设置了相同的 I P地址。主机b s d i并不希望
对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息
“以太网地址:a : b : c : d : e : f发送来重复的I P地址” 。这样就可以警告系统管理员,某个系统有不正确的设置。
2) 如果发送免费A R P的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接
口卡,然后重新启动) ,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的
更新。一个比较著名的A R P协议事实[Plummer 1982]是,如果主机收到某个I P地址的A R P请求,
而且它已经在接收者的高速缓存中,那么就要用 A R P请求中的发送端硬件地址(如以太网地
址)对高速缓存中相应的内容进行更新。主机接收到任何 A R P请求都要完成这个操作( A R P
请求是在网上广播的,因此每次发送A R P请求时网络上的所有主机都要这样做) 。
文献[ B h i d e、E l n o z a h y和M o rgan 1991]中有一个应用例子,通过发送含有备份硬件地址和
故障服务器的I P地址的免费A R P请求,使得备份文件服务器可以顺利地接替故障服务器进行
工作。这使得所有目的地为故障服务器的报文都被送到备份服务器那里,客户程序不用关心
原来的服务器是否出了故障。
25、为什么ICMP协议没有端口概念
我们称发送回显请求的p i n g程序为客户,而称被p i n g的主机为服务器。大多数的T C P / I P实现都在内核中直接支持P i n g服务器—这种服务器不是一个用户进程,所以ping没有端口。
其他icmp协议同上
26、ICMP报文类型
27、udp首部
28、udp端口 VS tcp端口
T C P端口号与U D P端口号是相互独立的。尽管相互独立,如果T C P和U D P同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。
29、udp伪首部
30、udp校验和
U D P检验和覆盖U D P首部和U D P数据。回想I P首部的检验和,它只覆盖I P的首部—并不
覆盖I P数据报中的任何数据。
U D P和T C P在首部中都有覆盖它们首部和数据的检验和。 U D P的检验和是可选的,而T C P的检验和是必需的。
尽管U D P检验和的基本计算方法与我们在 3 . 2节中描述的I P首部检验和计算方法相类似
(16 bit字的二进制反码和) ,但是它们之间存在不同的地方。首先, U D P数据报的长度可以为奇数字节,但是检验和算法是把若干个 16 bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送) 。
31、IP分片
物理网络层一般要限制每次发送数据帧的最大长度。任何时候I P层接收到一份要发送的I P数据报时,它要判断向本地哪个接口发送数据(选路) ,并查询该接口获得其M T U。I P把M T U与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
重新组装由目的端的I P层来完成,其目的是使分片和重新组装过程对运输层( T C P和U D P)是透明的。
上面的话说明了,粘包的过程跟分片无关了
32、DNS 迭代查询 + 递归查询
33、一个DNS的例子
34、TCP提供字节流服务
两个应用程序通过T C P连接交换8 bit字节构成的字节流。T C P不在字节流中插入记录标识
符。我们将这称为字节流服务(byte stream service) 。如果一方的应用程序先传1 0字节,又传2 0字节,再传5 0字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分 4次接收这8 0个字节,每次接收 2 0字节。一端将字节流放到 T C P连接上,同样的字节流将出现在T C P连接的另一端。
另外,T C P对字节流的内容不作任何解释。 T C P不知道传输的数据字节流是二进制数据,
还是A S C I I字符、E B C D I C字符或者其他类型数据。对字节流的解释由 T C P连接双方的应用层解释。
这种对字节流的处理方式与U n i x操作系统对文件的处理方式很相似。U n i x的内核
对一个应用读或写的内容不作任何解释,而是交给应用程序处理。对U n i x的内核来说,
它无法区分一个二进制文件与一个文本文件。
35、MSS后面可变吗
不可以,详见RFC 793
36、MSS在TCP头的哪里放着
在option可选部分
37、滑窗是在三次握手的哪里规定的
显示为第一次就在商量了