TCP-IP详解卷1:协议读书笔记_11
UDP是一个简单的面向数据报的传输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。 UDP数据报封装成一份IP数据报的格式如下图:UTP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。应用程序必须注意IP数据报的长度。如果它超过网络MTU(最大传输单元),那么就要对IP数据报进行分片。如果需要源端到目的端的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做。首部结构如下图:端口号表示发送进程和接受进程,由于IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是OK的)。这个UDP长度是有冗余的,IP数据报长度指的是数据报全长,因此UDP数据报长度等于IP数据报长度减去IP首部的长度。UDP校验和覆盖UDP首部和UDP数据。回想IP首部的校验和,它只覆盖IP的首部----并不覆盖IP数据报的任何数据。UDP和TCP在首部都有覆盖它们首部和数据的校验和。UDP校验和是可选的,而TCP的校验和是必需的。尽管U D P检验和的基本计算方法与我们之前第三节中描述的IP首部检验和计算方法相类似(16bit字的二进制反码和),但是它们之间存在不同的地方。首先,UDP数据报的长度可以为奇数字节,但是检验和算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)。如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄地丢弃。不产生任何差错报文(当IP层检测到IP首部检验和有差错时也这样做)。UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。物理网络层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。把一份IP数据报进行分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,它们要求在下一站就进行重新组装,而不是在最终目的地)。重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对传输层(TCP和UDP)是透明的。已经分片过得数据报可能会再次进行分片,IP首部中包含的数据为分片和重新组装提供了足够的信息。对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中。标志字段其中一个比特来表示"更多的片"。除了最后一片外,其他每个组成数据报的片都要把比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。最后,标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片。相反把数据报丢弃并发送一个ICMP差错报(“需要进行分片但设置了不分片比特”)给起始端。当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。IP分片有一个问题:丢失掉一片数据也要重新传输整个数据报。原因:IP层没有超时重传机制---由更高层负责超时和重传。当来自TCP报文段的某一片丢失后,TCP超时会重发整个TCP报文段,该报文段对应于一份IP数据报。没有办法重传数据报中的一个数据报片。使用UDP很容易导致IP分片。下图是UDP分片示例:发现ICMP不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特。如果某个程序需要判断到达目的端的路途中最小MTU是多少----称作路径MTU发现机制,那么这个差错就可以被该程序使用。这个情况下ICMP不可达差错报文格式如下图:如果路由器没有提供这种新的ICMP差错报文格式,那么下一站的MTU就为0。理论上,IP数据报的最大长度是65535字节,这是由IP首部16比特总长度字段所限制的。去除20字节的IP首部和8个字节的UDP首部,UDP数据报中用户数据的最长长度为65507字节。但是,大多数实现所提供的长度比这个最大值小。其中有两个限制因素:1.应用程序可能会受到其程序接口的限制。socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。对于UDP socket,这个长度与应用程序可以读写的最大UDP数据报的长度直接相关。2.第二个限制来自于TCP/IP的内核实现。可能存在一些实现特性(或差错),是IP数据报长度小于65535字节。我们同样可以使用UDP缠上ICMP"源站抑制"差错。当一个系统(路由器或主机)接受数据报的速度比其处理速度快时,可能产生这个差错。当在以太网传播的数据需要经过SLIP链路时,可能产生该差错报文。因为SLIP链路的速度大约只有以太网的千分之一,所以,很容易使其缓存用完。在本例中,应用程序要么没有接收到源站抑制差错信号,要么接收到却将其忽略了。结果是如果采用UDP协议,那么BSD实现通常忽略其接收到的源站抑制报文。其部分原因在于,在接收到源站抑制差错报文时,导致源站抑制的进程可能已经中止了。不处理ICMP源站抑制差错,说明了UDP是一个非可靠的协议,它只控制端到端的流量控制。除非在应用程序中建立一些应答机制,否则发送端并不知道接收端是否收到了这些数据。来自客户的是UDP数据报。IP首部包含源端和目的端IP地址,UDP首部包含了源端和目的端的UDP端口号。当一个应用程序接收到UDP数据报时,操作系统必须告诉它是谁发送了这份消息,即源IP地址和端口号。这个特性允许一个交互UDP服务器对多个客户进行处理。给每个发送请求的客户发回应答。一些应用程序需要知道数据报是发给谁的,即目的地址。这要求操作系统从接收到的UDP数据报中将目的IP地址交给应用程序。大多数UDP服务器是交互服务器,单个服务器进程对单个UDP端口上的所有客户请求进行处理。通常程序所使用的每个UDP端口都与一个有限大小的输入队列向联系。这意味着,来自不同客户的差不多同时到达的请求将有UDP自动排队。接收到UDP数据报以其接收顺序交给应用程序。因此,由于队列溢出导致的UDP数据报的丢失不可避免。应用程序不知道其输入队列什么时候会溢出,只能有UDP对超出数据报进行丢弃处理。同时,不会发挥任何消息告诉客户其数据报被丢弃。大多数UDP服务器在创建UDP端点时都使其本地IP地址具有通配符的特点。这表明进入的UFP数据报如果其目的地为服务端端口,那么任何本地接口均可接收到它。大多数系统允许UDP端点对远端地址进行限制。下面是UDP服务器本身可以创建的三类地址绑定:在所有情况下,lport指的是服务器有名端口号,localIP必须是本地接口的IP地址。表中这三行的排序是UDP模块在判断用哪个端点接收数据报时所采用的顺序。最为确定的地址(第一行)首先被匹配,最不确定的地址(最后一行IP地址带有两个星号)最后进行匹配。当UDP数据报到达的目的IP地址为广播地址或多播地址,而且在目的IP地址和端口号处有多个端点时,就向每个端点传送一份数据报的复制(端点的本地IP地址可以含有星号,它可匹配任何目的IP地址)。但是,如果UDP数据报到达的是一个单播地址,那么只向其中一个端点传送一份数据报的复制。选择哪个端点传送数据取决于各个不同的系统实现。UDP是一个简单协议。它想用户进程提供的服务位于IP层之上,包括端口号和可选的校验和,我们用UDP老检查校验和并观察分片是如何进行的。 当系统接收IP数据报的速率超过这些数据报被处理的速率时,系统可能发送ICMP源站抑制差错报文。使用UDP时很容易产生这样的ICMP差错。

图解TCP/IP
计算机使用模式的演变:20世纪50年代 批处理时代20世纪60年代 分时系统时代20世纪70年代 计算机间通信时代20世纪80年代 计算机网络时代20世纪90年代 互联网普及时代2000年以互联网为中心的时代2010年无论何时何地地一切皆TCP/IP的网络时代在计算机网络与信息通信领域,人们经常提及“协议”。简单来说。协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU以及不同的操作系统组成的计算机之间,只要遵循相同的协议就能实现通信。换句话说,协议就是计算机之间的通信语言,只有支持相同的协议,计算机之间才能相互通信。计算机通信也会在每一个分组中附加上源主机地址和目标主机地址送给通信线路。这些发送端地址、接收端地址以及分组序号写入的部分称为“报文首部”。TCP/IP协议并非ISO(国际标准化组织)所制定的某种国际标准,而是由IETF(Internet Engineering Task Force国际互联网工程任务组)所建议的、致力于推进器标准化作业的一种协议。OSI参考模型应用层:针对特定应用的协议。以电子邮件为例,用户A在主机A上新建一封电子邮件,指定收件人为B,并输入邮件内容为“早上好”。应用层协议会在所要传递数据的前端附加一个首部(标签)信息,该首部标明了邮件内容为“早上好”和收件人为B。表示层:设备固有数据格式和网络标准数据格式的转换。用户A和用户B使用的邮件客户端一致,便能够顺利收取和阅读邮件,不一致时表示层就发挥作用了:将数据从“某个计算机特定的数据格式”转换为“网络通用的标准数据格式”后再发送出去,接收端也进行相应处理。表示层与表示层之间为了识别编码格式也会附加首部信息,从而将实际传输的数据转交给下一层处理。会话层:通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层以下的分层。假定用户A新建了5封电子邮件准备发送给用户B,是建立一次连接一起发送,还是分别建立5次连接各自发送,都是会话层决定的,会话层和表示层一样,也会在数据前段附加首部或标签信息再转发给下一层。而这些首部或标签中记录着数据传送顺序的信息。传输层:管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠传送到目标地址)。用主机A将“早上好”这一数据发送给主机B,期间可能因为某些原因导致数据损坏,主机B只收到“早上”,此时也会将这一事实告诉主机A,主机A得知情况会将后面的“好”重发给主机B。保证数据传输的可靠性是传输层的一个重要作用。为了确保可靠性,这一层所要传输的数据附加首部以识别这一分层的数据。然而,实际上将数据传输给对端的处理是由网络层来完成的。网络层:地址管理与路由选择。两端主机之间虽然有众多数据链路,但能够将数据从主机A送到主机B也都是网络层的功劳。相当于TCP/IP协议中的IP协议,网络层不能保证数据的可达性,所以需要传输层TCP协议确保可达性,所以TCP/IP协议实现了可靠传输。数据链路层:互连设备之间传送和识别数据帧。网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据。物理层:以“0”、“1”代表电压的高低、灯光的闪灭。界定连接器和网线的规格。将数据的0、1转换为电压和脉冲光传输给物理的传输介质。计算机之间的网络连接通过电缆相互连接。任何一台计算机连接网络时,必须要使用网卡(网络适配器、NIC、LAN卡),中继器的作用是将电缆传过来的信号调整和放大再传给另一个电缆,可以完成不同媒介之间的连接工作。网桥是数据链路层面上连接两个网络的设备,提供的是传递数据帧的作用,并且还具备自学机制。路由器是在网络层面上(OSI七层模型网络层)连接两个网络、并对分组报文进行转发的设备。网桥是根据物理地址(MAC地址)进行处理,而路由器/3层交换机则是根据IP地址进行处理的。由此,TCP/IP中网络层的地址就成为了IP地址。对于并发访问量非常大的一个企业级Web站点,使用一台服务器不足以满足前端的访问需求,这时通常会架设多台服务器来分担。这些服务器的访问的入口地址通常只有一个,为了能通过同一个URL将前端访问分发到后台多个服务器上,可以将这些服务器的前端加一个负载均衡器。这种负载均衡器就是4-7层交换机的一种。网关是OSI参考模型中负责将从传输层到应用层的数据进行转换和转发的设备。在两个不能进行直接通信的协议之间进行翻译,最终实现两者的通信。非常典型的例子就是互联网邮件和手机邮件之间的转换服务。防火墙也是一款通过网关通信,针对不用应用提高安全性的产品。美国军方利用分组交换技术组件的ARPANET网络是互联网的鼻祖。而BSD UNIX操作系统实现了TCP/IP协议,随着UNIX系统的普及,TCP/IP协议开始盛行。TCP/IP可以单纯的指这两种协议,然而在很多情况下,它指的是包含HTTP、SMTP、FTP、TCP、UDP、IP、ARP等很多协议的网际协议族。发送数据包的过程,和上节OSI参考模型中介绍的差不多。数据链路层是由网络接口(以太网驱动)来处理的,它会改数据附加上以太网首部,以太网首部中包含接收端的MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。在以太网普及之初,一般多台终端使用同一根同轴电缆的共享介质型连接方式,访问控制一般以半双工通信为前提采用CSMA/CD方式。随着ATM交换技术的进步和CAT5 UTP电缆的普及很快发生了变化,逐渐采用像非共享介质网络那样直接与交换机连接的方式。网络层与数据链路层的关系某人要去一个很远的地方旅行,并计划先后乘坐飞机、火车、公交车到达目的地。旅行社不仅帮他预订好了飞机票和火车票,甚至还为他指定了一个详细的行程表,详细到几点几分需要乘坐飞机或火车都一目了然。机票和火车票只能够在某一限定区间内移动,此处的“区间内”就如同通信网络上的数据链路。这个区间内的出发地点和目的地点就如同某一个数据链路的源地址和目标地址等首部信息。整个行程表的作用就相当于网络层。DNS:将域名和IP地址相匹配。ARP:以目标IP地址为线索,用来定位下一个应该接受数据分包的网络设备对应的MAC地址。ARP只适用于IPv4,IPv6可以用ICMPv6替代ARP发送邻居探索消息。ICMP:在IP通信中如果某个IP包因为某种原因未能送达目标地址,那么这个具体的原因将由ICMP负责通知。DHCP:使用移动设备时,每移动到一个新地方,都要重新设置IP地址,为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP协议。NAT:是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。IP隧道:IPv4和IPv6之间进行通信的技术就是IP隧道。TCP用于低速可靠传输UDP用于高速不可靠传输端口号就是用来识别同一台计算机中进行通信的不同应用程序,也被称为程序地址。TCP传输利用窗口控制提高速度,无需等到每次应答来进行下一次发送,而是有个窗口进行缓冲,来提高吞吐量。TCP拥塞控制,利用拥塞窗口来调节发送的数据量,拥塞时减小窗口,流畅是增大窗口来控制吞吐量。我们日常网络访问的http用的是tcp ,那还是看一下这个过程吧tcp可以提供全双工的数据流传输服务,全双工说白了,就是同一时间A可以发信息给B , B也可以发消息给A ,俩人同时都可以给对方发消息;半双工就是某个时间段A可以发给B ,但B不能给A ,换个时间段,就反过来了。这个过程理解起来,就像两人在喊话:A:喂,有人吗,我想建立连接B:有哇,你建立吧,等你吆A:好哒,我来啦然后俩人就建立连接了...一定要三次握手么,两次行不行?这么一个场景:A->B: 洞幺洞幺,我是洞拐,收到请回复。B->A: 洞拐洞拐,洞幺收到。请问根据以上对话判断:1、B是否能收到A的信息? (答案是肯定的)2、A是否能收到B的信息? (你猜?)tcp的核心思想是保证数据可靠传输,如果2次,显然不行,但3次就一定行么?未必,可能第三次的时候网络中断了,然后A就认为B收到了,然后一通发消息,其实B没收到,但这是无法完全保证的。无论握手多少次都不能满足传输的绝对可靠,为了效率跟相对可靠而看,3次刚刚好,所以就3次了(正好AB相互确认了一次)。举个栗子:把客户端比作男孩,服务器比作女孩。通过他们的分手来说明“四次挥手”过程:"第一次挥手" :日久见人心,男孩发现女孩变成了自己讨厌的样子,忍无可忍,于是决定分手,随即写了一封信告诉女孩。“第二次挥手” :女孩收到信之后,知道了男孩要和自己分手,怒火中烧,心中暗骂:你算什么东西,当初你可不是这个样子的!于是立马给男孩写了一封回信:分手就分手,给我点时间,我要把你的东西整理好,全部还给你!男孩收到女孩的第一封信之后,明白了女孩知道自己要和她分手。随后等待女孩把自己的东西收拾好。“第三次挥手” :过了几天,女孩把男孩送的东西都整理好了,于是再次写信给男孩:你的东西我整理好了,快把它们拿走,从此你我恩断义绝!“第四次挥手” :男孩收到女孩第二封信之后,知道了女孩收拾好东西了,可以正式分手了,于是再次写信告诉女孩:我知道了,这就去拿回来!为什么连接的时候是三次握手,关闭的时候却是四次握手?答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文 。其中ACK报文是用来应答的, SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET ,所以只能先回复一个ACK报文 ,告诉Client端 ,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文 ,因此不能一起发送。故需要四步握手。静态路由是指事先设置好路由器和主机中并将路由信息固定的一种方法。缺点是某个路由器发生故障,基本上无法自动绕过发生故障的节点,只有在管理员手工设置以后才能恢复正常。动态路由是管理员先设置好路由协议,其设定过程的复杂程度与具体要设置路由协议的类型有直接关系。在路由器个数较多的网络,采用动态路由显然能够减轻管理员负担。网络发生故障,只要有一个可绕的其他路径,数据包会自动选择这个路径,但路由器需要定期相互交换必要的路由控制信息,会增加一定程度的负荷。根据路由控制范围分为IGP(内部网关协议)和EGP(外部网关协议)路由算法分为距离向量算法和链路状态算法距离向量算法:通过距离与方向确定通往目标网络的路径链路状态算法:链路状态中路由器知道网络的连接状态,并根据链路信息确定通往目标网络的路径。IGP包含RIP、RIP2、OSPFEGP包含EGP、BGPRIP是距离向量型的一种路由协议,广泛应用于LANRIP2是RIP的第二版。新增以下特点:使用多播、支持子网掩码、路由选择域、外部路由标志、身份验证密钥OSPF是一种链路状态型路由协议。在RIP和OSPF中利用IP的网络地址部分进行着路由控制,然而BGP则需要放眼整个互联网进行路由控制。BGP的最终路由控制表有网络地址和下一站的路由器组来表示,不过它会根据所要经过的AS个数进行路由控制。有了AS编号的域,就相当于有了自己一个独立的“国家”。AS的代表可以决定AS内部的网络运营和相关政策。与其他AS相连的时候,可以像一位“外交官”一样签署合约再进行连接。正是有了这些不同地区的AS通过签约的相互连接,才有了今天全球范围内的互联网。转发IP数据包的过程中除了使用路由技术外,还在使用标记交换技术。最有代表性的就是多协议标记交换技术(MPLS)。MPLS的标记不像MAC地址直接对应到硬件设备。因此,MPLS不需要具备以外网或ATM等数据链路层协议的作用,而只需要关注它与下面一层IP层之间的功能和协议即可。MPLS优点:1.转发速度快2.利用标记生成虚拟路径,并在它的上面实现IP等数据包的通信。

tcpip详解有必要看吗
作者:晨随 来源:知乎对网络编程开发人员来说,能清晰地理解TCP/IP的相关协议,是掌握socket编程的关键。所以必须认真学习《TCP/IP详解:卷一》。 《TCP/IP详解・卷1:协议(英文版第2版)》([美]福尔,史蒂文斯)

推荐一本书:用来学习研究网络通信协议的
根据楼主的要求,我向楼主推荐一套书:TCP/IP详解卷1:协议TCP/IP详解•卷2:实现TCP.IP详解(卷3):TCP事务协议.HTTP和UNIX域协议基本信息出版社: 机械工业出版社; 第1版 (2000年4月1日)平装: 423页开本: 16开ISBN: 7111075668条形码: 9787111075660产品尺寸及重量: 25.8 x 18.4 x 1.8 cm ; 662 g品牌: 机械工业ASIN: B00116OTVS内容简介《TCP/IP详解卷1:协议》描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者LawrenceBerkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。《TCP/IP详解卷1:协议》是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议包的定义原因及在各种不同的操作系统中(如Sunos4.1.3、Soloris2.2、AIX3.2.2)的应用与工作方式,这样可以以动态方式讲述TCP/IP的知识,使读者可以轻松掌握TCP/IP的知识:路由协议、寻址协议、组控制协议、简单邮件传输协议等。全书内容实用性强,是在校生学习TCP/IP知识的良师益友。编辑推荐《TCP/IP详解卷1:协议》是一本完整而详细的TCP/IP协议指南。 《TCP/IP详解卷1:协议》适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。
题名 Visual Basic网络通信协议分析与应用实现 作者 钟军 , 汪晓平 编著 分册号分册名 出版地 北京 出版社 人民邮电出版社 出版时间 2003 页数 5,668页 开本 26cm 丛书名单 册: 中图分类号 TP312 科图分类号 主题词 软件 电子资源
计算机基础教程第八版

TCP/IP详解卷1:协议的作品目录
译者序前言第1章 概述11.1 引言11.2 分层11.3 TCP/IP的分层41.4 互联网的地址51.5 域名系统61.6 封装61.7 分用81.8 客户-服务器模型81.9 端口号91.10 标准化过程101.11 RFC101.12 标准的简单服务111.13 互联网121.14 实现121.15 应用编程接口121.16 测试网络131.17 小结13第2章 链路层152.1 引言152.2 以太网和IEEE 802封装152.3 尾部封装172.4 SLIP:串行线路IP172.5 压缩的SLIP182.6 PPP:点对点协议182.7 环回接口202.8 最大传输单元MTU212.9 路径MTU212.10 串行线路吞吐量计算212.11 小结22第3章 IP:网际协议243.1 引言243.2 IP首部243.3 IP路由选择273.4 子网寻址303.5 子网掩码323.6 特殊情况的IP地址333.7 一个子网的例子333.8 ifconfig命令353.9 netstat命令363.10 IP的未来363.11 小结37第4章 ARP:地址解析协议384.1 引言384.2 一个例子384.3 ARP高速缓存404.4 ARP的分组格式404.5 ARP举例414.5.1 一般的例子414.5.2 对不存在主机的ARP请求424.5.3 ARP高速缓存超时设置434.6 ARP代理434.7 免费ARP454.8 arp命令454.9 小结46第5章 RARP:逆地址解析协议475.1 引言475.2 RARP的分组格式475.3 RARP举例475.4 RARP服务器的设计485.4.1 作为用户进程的RARP服务器495.4.2 每个网络有多个RARP服务器495.5 小结49第6章 ICMP:Internet控制报文协议506.1 引言506.2 ICMP报文的类型506.3 ICMP地址掩码请求与应答526.4 ICMP时间戳请求与应答536.4.1 举例546.4.2 另一种方法556.5 ICMP端口不可达差错566.6 ICMP报文的4.4BSD处理596.7 小结60第7章 Ping程序617.1 引言617.2 Ping程序617.2.1 LAN输出627.2.2 WAN输出637.2.3 线路SLIP链接647.2.4 拨号SLIP链路657.3 IP记录路由选项657.3.1 通常的例子667.3.2 异常的输出687.4 IP时间戳选项697.5 小结70第8章 Traceroute程序718.1 引言718.2 Traceroute 程序的操作718.3 局域网输出728.4 广域网输出758.5 IP源站选路选项768.5.1 宽松的源站选路的traceroute程序示例788.5.2 严格的源站选路的traceroute程序示例798.5.3 宽松的源站选路traceroute程序的往返路由808.6 小结81第9章 IP选路839.1 引言839.2 选路的原理849.2.1 简单路由表849.2.2 初始化路由表869.2.3 较复杂的路由表879.2.4 没有到达目的地的路由879.3 ICMP主机与网络不可达差错889.4 转发或不转发899.5 ICMP重定向差错899.5.1 一个例子909.5.2 更多的细节919.6 ICMP路由器发现报文929.6.1 路由器操作939.6.2 主机操作939.6.3 实现939.7 小结94第10章 动态选路协议9510.1 引言9510.2 动态选路9510.3 Unix选路守护程序9610.4 RIP:选路信息协议9610.4.1 报文格式9610.4.2 正常运行9710.4.3 度量9810.4.4 问题9810.4.5 举例9810.4.6 另一个例子10010.5 RIP版本210210.6 OSPF:开放最短路径优先10210.7 BGP:边界网关协议10310.8 CIDR:无类型域间选路10410.9 小结105第11章 UDP:用户数据报协议10711.1 引言10711.2 UDP首部10711.3 UDP检验和10811.3.1 tcpdump输出10911.3.2 一些统计结果10911.4 一个简单的例子11011.5 IP分片11111.6 ICMP不可达差错(需要分片)11311.7 用Traceroute确定路径MTU11411.8 采用UDP的路径MTU发现11611.9 UDP和ARP之间的交互作用11811.10 最大UDP数据报长度11911.11 ICMP源站抑制差错12011.12 UDP服务器的设计12211.12.1 客户IP地址及端口号12211.12.2 目标IP地址12211.12.3 UDP输入队列12211.12.4 限制本地IP地址12411.12.5 限制远端IP地址12511.12.6 每个端口有多个接收者12511.13 小结126第12章 广播和多播12812.1 引言12812.2 广播12912.2.1 受限的广播12912.2.2 指向网络的广播12912.2.3 指向子网的广播12912.2.4 指向所有子网的广播13012.3 广播的例子13012.4 多播13212.4.1 多播组地址13312.4.2 多播组地址到以太网地址的转换13312.4.3 FDDI和令牌环网络中的多播13412.5 小结134第13章 IGMP:Internet组管理协议13613.1 引言13613.2 IGMP报文13613.3 IGMP协议13613.3.1 加入一个多播组13613.3.2 IGMP报告和查询13713.3.3 实现细节13713.3.4 生存时间字段13813.3.5 所有主机组13813.4 一个例子13813.5 小结141第14章 DNS:域名系统14214.1 引言14214.2 DNS基础14214.3 DNS的报文格式14414.3.1 DNS查询报文中的问题部分14614.3.2 DNS响应报文中的资源记录部分14714.4 一个简单的例子14714.5 指针查询15014.5.1 举例15114.5.2 主机名检查15114.6 资源记录15214.7 高速缓存15314.8 用UDP还是用TCP15614.9 另一个例子15614.10 小结157第15章 TFTP:简单文件传送协议15915.1 引言15915.2 协议15915.3 一个例子16015.4 安全性16115.5 小结162第16章 BOOTP: 引导程序协议16316.1 引言16316.2 BOOTP的分组格式16316.3 一个例子16416.4 BOOTP服务器的设计16516.5 BOOTP穿越路由器16716.6 特定厂商信息16716.7 小结168第17章 TCP:传输控制协议17017.1 引言17017.2 TCP的服务17017.3 TCP的首部17117.4 小结173第18章 TCP连接的建立与终止17418.1 引言17418.2 连接的建立与终止17418.2.1 tcpdump的输出17418.2.2 时间系列17518.2.3 建立连接协议17518.2.4 连接终止协议17718.2.5 正常的tcpdump输出17718.3 连接建立的超时17818.3.1 第一次超时时间17818.3.2 服务类型字段17918.4 最大报文段长度17918.5 TCP的半关闭18018.6 TCP的状态变迁图18218.6.1 2MSL等待状态18318.6.2 平静时间的概念18618.6.3 FIN_WAIT_2状态18618.7 复位报文段18618.7.1 到不存在的端口的连接请求18718.7.2 异常终止一个连接18718.7.3 检测半打开连接18818.8 同时打开18918.9 同时关闭19118.10 TCP选项19118.11 TCP服务器的设计19218.11.1 TCP服务器端口号19318.11.2 限定的本地IP地址19418.11.3 限定的远端IP地址19518.11.4 呼入连接请求队列19518.12 小结197第19章 TCP的交互数据流20019.1 引言20019.2 交互式输入20019.3 经受时延的确认20119.4 Nagle算法20319.4.1 关闭Nagle算法20419.4.2 一个例子20519.5 窗口大小通告20719.6 小结208第20章 TCP的成块数据流20920.1 引言20920.2 正常数据流20920.3 滑动窗口21220.4 窗口大小21420.5 PUSH标志21520.6 慢启动21620.7 成块数据的吞吐量21820.7.1 带宽时延乘积22020.7.2 拥塞22020.8 紧急方式22120.9 小结224第21章 TCP的超时与重传22621.1 引言22621.2 超时与重传的简单例子22621.3 往返时间测量22721.4 往返时间RTT的例子22921.4.1 往返时间RTT的测量22921.4.2 RTT估计器的计算23121.4.3 慢启动23321.5 拥塞举例23321.6 拥塞避免算法23521.7 快速重传与快速恢复算法23621.8 拥塞举例(续)23721.9 按每条路由进行度量24021.10 ICMP的差错24021.11 重新分组24321.12 小结243第22章 TCP的坚持定时器24522.1 引言24522.2 一个例子24522.3 糊涂窗口综合症24622.4 小结250第23章 TCP的保活定时器25123.1 引言25123.2 描述25223.3 保活举例25323.3.1 另一端崩溃25323.3.2 另一端崩溃并重新启动25423.3.3 另一端不可达25423.4 小结255第24章 TCP的未来和性能25624.1 引言25624.2 路径MTU发现25624.2.1 一个例子25724.2.2 大分组还是小分组25824.3 长肥管道25924.4 窗口扩大选项26224.5 时间戳选项26324.6 PAWS:防止回绕的序号26524.7 T/TCP:为事务用的TCP扩展26524.8 TCP的性能26724.9 小结268第25章 SNMP:简单网络管理协议27025.1 引言27025.2 协议27025.3 管理信息结构27225.4 对象标识符27425.5 管理信息库介绍27425.6 实例标识27625.6.1 简单变量27625.6.2 表格27625.6.3 字典式排序27725.7 一些简单的例子27725.7.1 简单变量27825.7.2 get-next操作27825.7.3 表格的访问27925.8 管理信息库(续)27925.8.1 system组27925.8.2 interface组28025.8.3 at组28125.8.4 ip组28225.8.5 icmp组28525.8.6 tcp组28525.9 其他一些例子28825.9.1 接口MTU28825.9.2 路由表28825.10 trap29025.11 ASN.1和BER29125.12 SNMPv229225.13 小结292第26章 Telnet和Rlogin:远程登录29326.1 引言29326.2 Rlogin协议29426.2.1 应用进程的启动29526.2.2 流量控制29526.2.3 客户的中断键29626.2.4 窗口大小的改变29626.2.5 服务器到客户的命令29626.2.6 客户到服务器的命令29726.2.7 客户的转义符29826.3 Rlogin的例子29826.3.1 初始的客户-服务器协议29826.3.2 客户中断键29926.4 Telnet协议30226.4.1 NVT ASCII30226.4.2 Telnet命令30226.4.3 选项协商30326.4.4 子选项协商30426.4.5 半双工、一次一字符、一次一行或行方式30426.4.6 同步信号30626.4.7 客户的转义符30626.5 Telnet举例30626.5.1 单字符方式30626.5.2 行方式31026.5.3 一次一行方式(准行方式)31226.5.4 行方式:客户中断键31326.6 小结314第27章 FTP:文件传送协议31627.1 引言31627.2 FTP协议31627.2.1 数据表示31627.2.2 FTP命令31827.2.3 FTP应答31927.2.4 连接管理32027.3 FTP的例子32127.3.1 连接管理:临时数据端口32127.3.2 连接管理:默认数据端口32327.3.3 文本文件传输:NVT ASCII表示还是图像表示32527.3.4 异常中止一个文件的传输:Telnet同步信号32627.3.5 匿名FTP32927.3.6 来自一个未知IP地址的匿名FTP33027.4 小结331第28章 SMTP:简单邮件传送协议33228.1 引言33228.2 SMTP协议33228.2.1 简单例子33228.2.2 SMTP命令33428.2.3 信封、首部和正文33528.2.4 中继代理33528.2.5 NVT ASCII33728.2.6 重试间隔33728.3 SMTP的例子33728.3.1 MX记录:主机非直接连到Internet33728.3.2 MX记录:主机出故障33928.3.3 VRFY和EXPN命令34028.4 SMTP的未来34028.4.1 信封的变化:扩充的SMTP34128.4.2 首部变化:非ASCII字符34228.4.3 正文变化:通用Internet邮件扩充34328.5 小结346第29章 网络文件系统34729.1 引言34729.2 Sun远程过程调用34729.3 XDR:外部数据表示34929.4 端口映射器34929.5 NFS协议35129.5.1 文件句柄35329.5.2 安装协议35329.5.3 NFS过程35429.5.4 UDP还是TCP35529.5.5 TCP上的NFS35529.6 NFS实例35629.6.1 简单的例子:读一个文件35629.6.2 简单的例子:创建一个目录35729.6.3 无状态35829.6.4 例子:服务器崩溃35829.6.5 等幂过程36029.7 第3版的NFS36029.8 小结361第30章 其他的TCP/IP应用程序36330.1 引言36330.2 Finger协议36330.3 Whois协议36430.4 Archie、WAIS、Gopher、Veronica和WWW36630.4.1 Archie36630.4.2 WAIS36630.4.3 Gopher36630.4.4 Veronica36630.4.5 万维网WWW36730.5 X窗口系统36730.5.1 Xscope程序36830.5.2 LBX: 低带宽X37030.6 小结370附录A tcpdump程序371附录B 计算机时钟376附录C sock程序378附录D 部分习题的解答381附录E 配置选项395附录F 可以免费获得的源代码406参考文献409缩略语420

本文由 在线网速测试 整理编辑,转载请注明出处。