TCP/IP 续二

TCP/IP 续二
2011年04月08日
  接收窗口
  测试0
  0
  SEG.SEQ = RCV.NXT0
  >0
  RCV.NXT =0
  0
  不接受>0
  >0
  RCV.NXT =。在发送完应答后,抛弃不可接受的数据段,然后返回。第二步检查RST位。如果处于SYN-RECEIVED 状态时,而且处于设置了RST的情况下,如果连接以被动OPEN开始,将连接返回到LISTEN状态,不需要通知用户;如果连接以主动OPEN打开,拒绝连接,并通知用户"connection refused"。在上面任何一种情况下,所有在重发队列中的数据都要删除。在主动OPEN的那种情况下,进入CLOSED状态,删除TCB然后返回。如果处于ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2或CLOSE-WAIT状态时,而且RST已经设置,那么任何存在的RECEIVE和SEND都会收到"reset"。所有队列中的数据段都应该立即发送。用户也会收到"connection reset"。进入CLOSED状态,删除TCB并返回。如果处于CLOSING状态,LAST-ACK状态或TIME-WAIT状态,而且RST已经设置,进入CLOSED状态,删除TCB并返回。检查安全和优先级在SYN-RECEIVED状态下如果段中的security/compartment和优先级和TCB中的不匹配,发送RST并返回。在ESTABLISHED状态下如果段中的security/compartment和优先级和TCB中的不匹配,发送RST ,所有存在的RECEIVE和SEND接收到"reset",立即发送所有队列中的数据段,用户接收到"connection reset"。进入CLOSED状态,删除TCB并返回。第四步检查SYN位,如果连接处于以下状态SYN-RECEIVEDESTABLISHED状态FIN-WAIT STATE-1FIN-WAIT STATE-2CLOSE-WAIT状态CLOSING状态LAST-ACK状态TIME-WAIT状态如果SYN在窗口中就是错误,发送RST,任何存在的RECEIVE和SEND收到"reset",所有在队列中的数据段立即发送,用户也接收到"connection reset",进入CLOSED状态,删除TCB并返回。如果SYN未在窗口中,这一步不会发生。第五步检查ACK域如果ACK位关闭,抛弃数据段返回。如果ACK域打开的情况下,如果连接处于SYN-RECEIVED状态时如果SND.UNA =ESTABLISHED状态时如果SND.UNA 缓冲区的主动确认,如果ACK是重复的(SEG.ACK SND.NXT),那么可以发送ACK,抛弃数据段并返回。如果SND.UNA 为空,确认用户的CLOSE,但不删除TCB。CLOSE-WAIT状态时同ESTABLISHED状态的处理。CLOSING状态时除了对于ESTABLISHED状态的处理外,如果确定了FIN,则进入TIME-WAIT状态,如果未确认,则忽略这个段。LAST-ACK状态时在此状态下唯一可能发生的就是重要发送远程FIN。如果确认了FIN,则删除TCB,进入CLOSED状态并返回。TIME-WAIT状态时在此状态下唯一可能发生的就是重要发送远程FIN。确认它,并重新开始2 MSL超时。第六步检查URG位,如果连接处于ESTABLISHED状态,FIN-WAIT-1状态或FIN-WAIT-2 状态,而且URG位被设置,那么RCV.UP 缓冲区传送数据。段中的数据可以移向缓冲区,直到缓冲区满或段为空为止。如果段为空并带有标记PUSH,在返回缓冲区数据后要通知用户接收到PUSH。TCP传送数据时必须对接收到的数据也发给确认。前面已经说过对RCV.NXT和RCV.WND的处理,这里不再多说了。发送的确认有如下格式:。而CLOSE-WAIT状态,CLOSING状态,LAST-ACK状态或TIME-WAIT 状态根本不会发生,因为还未从远程TCP接收到FIN。第八步检查FIN位。如果状态是CLOSED,LISTEN或SYN-SENT,不要处理FIN,因为此时的SEG.SEQ不会的意义,应该直接抛弃数据段返回。如果设置了FIN位,通知用户"connection closing"中止所有正在进行的RECEIVE,增加RCV.NXT超过FIN,对FIN发送确认。如果此时处于:SYN-RECEIVED状态或ESTABLISHED状态进入CLOSE-WAIT状态。如果此时处于FIN-WAIT-1 状态如果确定了FIN段,那么进入TIME-WAIT状态,打开time-wait计数器,关闭其它计数器,如果没有确认,进入CLOSING状态。如果此时处于FIN-WAIT-2状态进入TIME-WAIT状态,关闭其它计数器,打开time-wait计数器。如果此时处于CLOSE-WAIT状态或CLOSING状态或LAST-ACK状态,保留各自原来的状态。如果此时处于TIME-WAIT状态,保持在TIME-WAIT状态。重新开始2 MSL time-wait超时。 用户超时
  对于任何一种状态,用户超时的情况下,发送队列中的数据,返回"error: connection aborted due to user timeout",删除TCB,进行CLOSED状态并返回。 重发超时
  在任何状态下,如果重发队列中的数据段发送超时,将它再次放到队列首部重新发送。 TIME-WAIT超时如果time-wait超时,删除TCB,进行CLOSE状态并返回。
  无名小卒
  2004-05-15 10:37:50
  Internet协议(Internet Protocol)1. 介绍1.1. 产生原因
  IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之前传送一种称之为数据报的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。1.2. 范围
  IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。1.3. 接口
  这个协议由主机到主机协议调用,而此协议负责调用本地网络协议将数据报传送以下一个网关或目的主机。例如TCP可以调用IP协议,在调用时传送目的地址和源地址作为参数,IP形成数据报并调用本地网络(协议)接口传送数据报。1.4. 操作
  IP实现两个基本功能:寻址和分段。IP可以根据数据报报头中包括的目的地址将数据报传送到目的地址,在此过程中IP负责选择传送的道路,这种选择道路称为路由功能。如果有些网络内只能传送小数据报,IP可以将数据报重新组装并在报头域内注明。IP模块中包括这些基本功能,这些模块存在于网络中的每台主机和网关上,而且这些模块(特别在网关上)有路由选择和其它服务功能。对IP来说,数据报之间没有什么联系,对IP不好说什么连接或逻辑链路。IP使用四个关键技术提供服务:服务类型,生存时间,选项和报头校验码。服务类型指希望得到的服务质量。服务类型是一个参数集,这此参数是Internet能够提供服务的代表。这种服务类型由网关使用,用于在特定的网络,或是用于下下一个要经过的网络,或是下一个要对这个数据报进行路由的网关上选择实际的传送参数。生存时间是数据报可以生存的时间上限。它由发送者设置,由经过路由的地方处理。如果未到达时生存时间为零,抛弃此数据报。对于控制函数来说选项是重要的,但对于通常的通信来说它没有存在的必要。选项包括时间戳,安全和特殊路由。报头校验码保证数据的正确传输。如果校验出错,抛弃整个数据报。
  IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。2. 总览 2.1. 与其它协议的联系下图显示了IP协议在协议体系中的位置。
  (编者注,原文无图) IP上下有两个接口,一个是与主机与主机协议的接口,另一个是与本地网络的接口,本地网络可以是小型网络也可以大型网络,说不定的。2.2. 操作模式
  下面的例子可以看到操作的模型是什么。我们假设传输要经过中间网关。传送进程调用本地IP模块传送数据,同时传送目的地址和其它参数作为调用参数。IP层准备数据报头并把它加在需要传送的数据之前。IP模块为这个网络地址决定一个本地网络地址,在这里就是网关地址。IP传送数据报和本地网络地址到网络接口。本地网络接口创建一个本地网络头加在数据报上,然后向本地网络发送。加上本地网络头的数据报到达网关后,本地网络接口去掉这个头,将结果传送给(网关上的)IP模块。这个IP模块决定决定目的主要的本地网络地址,然后再如上所述的过程传送数据报到本地网络接口。这个本地网络接口创建一个本地网络头加在数据报上,将数据报传送到目的主机。在目的主机上,本地网络接口去掉数据报上的本地网络头,将结果交给IP模块。IP模块决定数据报应该把数据报向哪一个应用程序传送,系统会发出系统调用,IP模块返回源地址和其它参数。2.3. 功能描述
  IP的功能就是把数据报在互联的网络上传送,通过将数据报在一个个IP模块间传送直到目的模块来达到目的。网络中每个主机和网关上都有IP模块。数据报在一个个模块间通过路由处理网络地址传送到目的地址。因此网络地址对于IP协议十分重要。如前所述,因为各个网络上的数据报大小可能不同,因此有必要对大的数据报进行分段。寻址
  名字,地址和路由是有区别的,名字是我们要找的,地址指出这个名字在什么地方,路由解决如何到那里的问题。IP主要处理地址的问题。把名字和地址进行映射的工作由上层协议完成。IP模块将地址和本地网络地址加以映射,而将本地网络地址和路由进行映射则是低层协议的任务。
  地址是32位长,由网络号和本地地址两部分构成。地址有三类:A类的最高位为0,后7位表示网络号,其它的24位表示本地地址;B类前两位为10,后14位表示网络地址,其它16位表示本地地址;C类三位为110,后21位是网络号,其它8位代表本地地址。
  在将网络地址和本地网络地址进行映射时必须注意,有些主机可能使用几个不同的IP地址(我们可以把本地网络地址理解为MAC地址)。我们必须能够处理一台主机有几个处理端口,而每个端口都有几个逻辑的IP地址。分段
  对于不同的网络,其中传送的包大小可能不一样,因此把大包分小的功能是必须的。数据报也可以被标记为“不可分段”,如果一个数据报被如何标记了,那么在任何情况下都不准对它进行分段。如果不分段到不了目的地,那就把包在半路抛弃了。在本地网内进行的重新分段和重组对IP模块是不可见的,这种方法也可以使用。
  本地网分段和重组把重组的各段加上标记,接收方使用这些标记使不同的段区别开来。段偏移量域告诉接收方应该把这一段放在什么地方,多段标记指示最后一个段,利用不同的域完全可以重组一个数据报。标记域是用于唯一标记数据报的,它是最初的发送方设置,而且要保证数据报在网络传输的全过程中它中唯一的。最初的发送方把多段标记设置为零,段偏移量设置为零。
  我们假设IP模块把一个大数据报分为两个小的,IP模块首先取得数据报头,再分隔数据为两份,将数据报头加在两份数据上。分隔数据时以8个字节为单位,第二段不一定是8个字节,但第一个必须是。我们把第一段中的8位字节数称为段块数(NFB)。新生成的第一个数据报内是生成的第一段数据,设置多段标记为1;新生成的第二个数据报内是生成的第二段数据,多段标记等于原来数据报内的值,段偏移量等于原数据报中的值加上NFB。上述过程可以从2扩展至N的情况。
  对段的重组要求以下四个域有相同的值:标记,源地址,目标地址和协议。将不同的数据报根据自己带的偏移量重新组合为新段,第一个段的偏移量为0,最后一个段的多段标记为0。2.4. 网关
  网关在不同网络间传送数据报,网关也实现网关到网关协议(GGP),它用于传送路由和其它控制信息。网关中的高层协议根本不用实现,GGP的功能可以在IP模块内实现。3. 说明3.1. Internet包头格式包头格式如下:版本:4位此域标明包头的格式。我们现在说明的是IP版本4。IHL:4位Internet包头长度是以32位为单位标记的包头长度,它指向数据的开始位置,这个域的最小合法值为5。服务类型:8位它是一些指示服务质量的参数,这些参数用于在特定网络指示所需要的服务。有些网络会提供优先级服务。选择的基本原则是以下三者的权衡:低延时,高可靠和高吞吐量。0-2: 优先级
  3: 0 = 通常延时 1 = 低延时
  4: 0 = 通常吞吐量 1 = 高吞吐量
  5: 0 = 通常可靠性 1 = 高可靠性
  6-7: 保留优先级的说明如下:111 - Network Control
  110 - Internetwork Control
  101 - CRITIC/ECP
  100 - Flash Override
  011 - Flash
  010 - Immediate
  001 - Priority
  000 - Routine如果使用了延时(D),吞吐量(T)和可靠性(R)选项可以增加服务质量。这因各个网络不同而不同,没有通用性。除了非常特殊的情况外,最多设置两个参数就够了。服务类型是用来指示如何对待在网络中传送的数据报。网络控制优先级原来是用于一个网络中的,而实际中却应用于每个网络了。互联控制是用于网关控制的。如果只在一个网络中实现了这些参数,那个网络必须在自己的范围之内控制对它们的访问。总长度:16位总长度指的是数据报的长度,由字节计,包括数据和报头。允许数据报的大小为64K。这么大的数据报对大多数主机和网络来说是不适用的。但是,所有主机必须能够接收大于576字节的数据报,无论它们是一起来,还是分段来。如果知道对方主机能够接收大于576字节的数据报,最好在发送时不要发送小于576字节的数据报。选择576是因为576=512(数据)+64(报头)。报头最长不超过60字节,通常为20字节。标识:16位标记是发送用于帮助重组分段的包的。标记:3位0: 保留,必须为01: (DF) 0 = 可分段,1 = 不可分段Bit 2: (MF) 0 = 最后一段,1 = 还有多段0
  1
  20
  D
  F
  M
  F
  段偏移:13位此域指示这个段在应该在数据报中什么位置,它以64位为单位计算,首段的偏移为零。生存期:8位此域说明数据报在互联网系统生存的最大时间。如果此域的值为零,抛弃此数据报。在处理报头的同时也处理此域。时间以秒计,但每个处理单元都至少会对TTL减一,即使时间小于一秒。协议:8位此域指示用于数据报数据部分的下一层协议。头校验码:16位校验码只在头部,因此头域会在处理时改变,因此头会经常改变。这种校验方法比较容易计算,实验证明它也是适用的,但它可能在未来被CRC校验过程取代。源地址和目的地址:32位,具体情况请看下文。选项:长度不定在数据报中可以有选项也可以没有,但IP模块中必须有处理选项的功能。有些情况下,安全选项是必须的。它的长度不定,可以没有也可以是多个。选项有两种格式:1: 单独一个选项类型字节
  2: 一个选项类型字节,一个选项长度字节和实际选项数据字节选项长度是选项类型,长度本身和数据的长度。选项类型可被看作有3个域:1位 复制标记
  2位 选项类
  5位 选项号复制标记指这个选项要在分段是要存在于所有段中。0 = 不复制
  1 = 复制选项类有:0 = 控制 1 = 保留 2 = 调度和测量
  3 = 保留下面是具体选项:CLASS NUMBER LENGTH DESCRIPTION0
  -
  选项表结束。只占一个字节,没有长度字节0
  1-
  无操作。只占一个字节,没有长度字节0
  2
  11
  安全,用于传送安全,Compartmentation,用户组(TCC)和DOD规则兼容的处理限制码0
  3
  变长
  松源地址路由,使用源地址提供的信息进行路由0
  9
  变长
  紧源地址路由,使用源地址提供的信息进行路由0
  7
  变长
  记录路由,用于跟踪数据报采用的路由0
  8
  4
  流ID,用于传送流标记2
  4
  变长
  Internet时间戳特定选项定义选项表结束+--------+
  |00000000|
  +--------+Type=0此选项指示选项表的结束,它不一定和报头结束点一致,它用于指示选项表的结束而不是每个选项的结束,只有当选项表结束位置和报头结束位置不一致时使用。它可以被复制,引入或在分段时删除。无操作+--------+
  |00000001|
  +--------+Type=1此选项可被用于选项间,它可以被复制,引入或在分段时删除。安全此选项提供主机一种发送安全,compartmentation,处理限制和TCC参数的方法。此选项的格式如下:类型=130 长度=11安全(S域):16位安全共分16级,8级保留。00000000 00000000 - 未分类的
  11110001 00110101 - 机密
  01111000 10011010 - EFTO
  10111100 01001101 - MMMM
  01011110 00100110 - PROG
  10101111 00010011 - 限制的
  11010111 10001000 - 秘密
  01101011 11000101 - 绝对机密
  00110101 11100010 - 保留
  10011010 11110001 - 保留
  01001101 01111000 - 保留
  00100100 10111101 - 保留
  00010011 01011110 - 保留
  10001001 10101111 - 保留
  11000100 11010110 - 保留
  11100010 01101011 - 保留Compartments(C域):16位全0代表传送的信息是非compartment的。处理限制(H域):16位控制值和版本标记是由字母和数字组成的,具体说明请参阅其它资料。传输控制码(TCC域):24位提供控制流量的方法。TCC的值为三字母词,在HQ DCA Code 530中有说明。在分段时必须复制它。松源地址和记录路由+--------+--------+--------+---------//--------+
  |10000011| length | pointer| route data |
  +--------+--------+--------+---------//--------+Type=131松源地址和记录路由(LSRR)可以由源地址提供路由信息,并记录路由信息。这个选项以选项类型码开始。第二位是选项长度,第三位是一个指针,指向路由数据中下一个要被处理的源地址,它的最小值为4。路由数据是由一系列地址组成的,每个地址是32位。如果指针大于长度,源路由为空(记录的路由满),路由要根据目的地址域进行。如果目的地址已经达到,而指针未大于长度,源路由中的下一地址代替目的地址域中的地址,同时记录的路由地址代替则使用过的源地址,将指针加4。这一以记录的路由替换源路由的过程意味着选项(和IP头一起作为一个整体)数据报在网络中经过处理后保持一个固定长度。它称之为松源地址路由是因为网关或主机IP在达到路由的下一个地址时可以使用多个中间网关。它在分段时必须复制。紧源地址和记录路由+--------+--------+--------+---------//--------+
  |10001001| length | pointer| route data |
  +--------+--------+--------+---------//--------+Type=137紧源地址和记录路由(SSRR)选项可以由源地址提供路由信息,并记录路由信息。这个选项以选项类型码开始。第二位是选项长度,第三位是一个指针,指向路由数据中下一个要被处理的源地址,它的最小值为4。路由数据是由一系列地址组成的,每个地址是32位。如果指针大于长度,源路由为空(记录的路由满),路由要根据目的地址域进行。如果目的地址已经达到,而指针未大于长度,源路由中的下一地址代替目的地址域中的地址,同时记录的路由地址代替则使用过的源地址,将指针加4。这一以记录的路由替换源路由的过程意味着选项(和IP头一起作为一个整体)数据报在网络中经过处理后保持一个固定长度。它称之为紧源地址路由是因为网关或主机IP在达到路由的下一个地址时不可以使用中间网关。它在分段时必须复制。记录路由+--------+--------+--------+---------//--------+
  |00000111| length | pointer| route data |
  +--------+--------+--------+---------//--------+Type=7此选项提供了记录数据报路由的方法。这个选项以选项类型码开始。第二位是选项长度,第三位是一个指针,指向路由数据中下一个要被处理的源地址,它的最小值为4。记录的路由是由一系列IP地址构成的,每个IP地址是32位。如果指针大于长度,记录路由数据域已满。源主机必须为这一选项分配足够大的空间。空间分定后不会因为加入地址而增加。初始内容必须为0。当IP模块处理数据报时,它检查是否有记录路由选项,如果有,它将自己的IP地址放入记录路由地址空间,指针值加4。如果地址空间已满,模块不会把自己的IP地址加入了;如果空间未满,可是不够整个地址加入,模块会认为源数据报出错并抛弃它。上面两种情况下,ICMP参数信息消息会发送到源主机。在分段时不复制,而仅仅存在于第一个段。流标记
  10001000
  00000010流ID类型=136 长度=4此选项提供一种在不支持流的网络中传送16位SATNET流标记的方法。分段时必须复制。Internet时间戳01000100
  长度
  指针
  oflw标记IP地址时间戳......
  类型=68选项长度是在选项内的类型,长度,指针和溢出/标记字节的大小。指针是从选项开始到时间戳结束的字节数加一。最小值为5。当指针大于长度时时间戳域满。溢出(oflw)(大小为4位)是IP模块号,这个模块因缺省空间而不能注册时间戳。它的值分别为:0 -- 仅有时间戳,保存于连续的32位字中;
  1 -- 每个时间戳前都有注册单元的IP地址;
  3 -- IP地址域是预先指定的,如果IP模块的地址和下一个指定的IP地址一致,则注册自己的时间戳。时间戳是从UT午夜时间开始以毫秒计算的,如果时间不以毫秒计算,或不能提供以UT午夜为基准,那用什么时间倒都可以,只要时间戳的最高位设置为1,表示这不是一个标准值就行了。源主机必须为这一选项分配足够大的空间。空间分定后不会因为加入地址而增加。初值必须为零或IP地址/零这样的偶对。如果空间已满,模块在传送数据报时不加入时间戳,但溢出计数仍然加一。如果剩余的空间不能使完全的时间戳加入,或溢出计数溢出,源数据报出错并被抛弃。ICMP参数信息消息会发送到源主机。此选项在分段时不复制,仅在第一段出现。填充:变长报头域填充用于保证报头是32位的倍数。填充值为0。3.2. 讨论
  协议的实现必须健壮,每个实现都要保证与其它人的实现兼容。通常一个实现在发送时应该遵守比较保守的策略,在接收时大可不必保守。也就是说,发送构成良好的包,接收自己能够解释的包(有些错误也是将就着了)。
  基本的Interent服务是面向数据报的,在网关处可以提供以数据报的分段和在目的主机的重组服务。当然,在一个网络内或在因遵守私下的协议而在一个网络的网关间进行分段和重组也是可以的,因为这对IP协议和高层协议是透明的。这种透明的分段称为基于网络的分段,这里不做讨论。IP地址是在主机一级区别源地址和目的地址的。寻址
  为了可以对网络大小进行灵活的控制,IP地址提供了几类地址,一类是可以容纳比较多主机的网络,一种容纳的主机数就比较少,我们大家听说过的什么A类,B类地址,C类地址就是为了用于不同规模的网络而提出的。下面是一些地址格式:最高位
  格式
  类0
  7位网络用,24位主机用
  a10
  14位网络用,16位主机用
  b110
  21位网络用,8位主机用
  c111
  扩充地址模式
   
  如果网络域为零意味着本网络,这种方式仅在于特定的ICMP消息中使用;扩展的地址模型未定义。由本地网络指定的本地地址必须考虑到单个的主机可以作为不同的网络主机使用。也就是说,必须在网络主机地址和网络/主机接口之间进行映射,这种接口允许几个IP地址对应一个接口。同时还应该考虑到一台主机有多个处理接口,对于从不同接收收到的信息应该看做是来自同一个IP地址的。 无名小卒
  2004-05-15 10:38:23
  分段和重组
  Internet标记域(ID)和源地址,目的地址和协议域一起用于确认数据报分段和重组。如果数据报不是最后一段,则设置多段标记位(MF)。段偏移域标记段位置,它是相对于未分段时的数据报而言的。段以8个字节为单位,这样的分段策略使未分段的数据报有全零的分段信息(MF = 0,段偏移= 0)。如果进行分段,边界必须是8个字节的倍数。这种格式允许2的13次方(8192)个8字节段,一个数据报的最大长度刚好和长度域标明的数据64K一致。在分段时,有些选项被复制,有些则不。每个IP模块必须能够不分段地传送68字节的数据报。这因为IP包头会达到60字节,而最小数据段长为8,68=60+8;而它也必须能够接收576字节的数据,不论这数据是未分段的还是分段的。会被分段影响的域包括:(1) 选项域
  (2) 多段标记
  (3) 段偏移
  (4) Internet包头长度域
  (5) 总长度域
  (6) 包头校验码如果设置了不分段标记(DF),则不可进行分段,即使数据报会因此而被抛弃。如果接收主机不能进行重组时则需要设置此位。我们在进行无盘引导时,则需要设置这一位。下面通过例子说明这一过程。其中#代表不等于,X到Y指的是包括X,而不包括Y的所有数据。能够在下一个网络传送的最大数据报称为最大传输单元(MTU)。如果数据报的长度小于等于MTU,进行下一步;否则分为两段,第一段的大小等于MTU,第二段就是剩余的长度,将第一段传送,如果第二段仍然大于MTU,则重复分段过程,直到可以发送为止。下面我们给出一个定义:FO - 段偏移
  IHL - Internet包头长度
  DF - 不分段标记
  MF - 多段标记
  TL - 总长度
  OFO - 原段偏移
  OIHL - 原Internet包头长度
  OMF - 原多段标记
  OTL - 原总长度
  NFB - 段数
  MTU - 最大传输单元过程:IF TL 缓冲区标记是由源地址,目的地址,协议和标记域一起确认的。如果数据报未分段,那就不需要进行重组,处理进行下一阶段。重组需要的数据结构有:数据缓冲区,包头缓冲区,段块位表,数据长度域和计数器。段中的数据根据段偏移和长度放在相应位置,段块标准表中的相应位根据接收的段块被设置。如果是第一段(段偏移为0),将包头放于包头缓冲区;如果是最后一段(多段标记为0),计算数据总长度。如果接收完了整个数据报,进行下一处理阶段;如果没有接收完,设置计数器值为当前计数器和此段中保存的生存时间之间比较在的一个,重组函数放弃控制权。如果超时释放所有缓冲区。计数器的初值是重组等待时间的下限。因为如果到达段中的生存时间大于计数器当前值等待时间增加,如果小于则不会减少。计数器的最大时间可以达到最大生存时间(大约为4.25分)。如果设置为15秒可能比较好,当然随着实践,这个值可能会有更改。这个值的选择和缓冲区的大小和传输媒介有关,传输速度乘于计数器值等于缓冲区大小。定义:FO - 段偏移
  IHL - Internet包头长度
  MF - 多段标记
  TTL - 生存时间
  NFB - 段块数
  TL - 总长度
  TDL - 总数据长度
  BUFID - 缓冲区标记
  RCVBT - 段接收位表
  TLB - 计数器下限过程:
  如果到达的数据段中的数据有部分或全部相同,上面的过程会使用数据的最新版本。标记
  标记是为了对特定数据报的段提供唯一的标记。如果数据报拥有相同的源地址,目的地址,协议和标记,IP模块会把他们认定是同一数据报。选择的任何由发送方担任。发送协议模块需要保持一个标记表,每个目的地址保持一个表项。然而,因此标记域允许65536个不同的值,有些主机能够不考虑目的地仍然可以达到标记唯一的目的。高层协议也可以使用标记。服务类型
  服务类型(TOS)是网络服务质量的选择。服务类型是由抽象参数确定的优先级,时延,吞吐量和可靠性的结合物。这些参数和一些实际对应的网络服务对应。对于什么是时延,什么是吞吐量之类的定义这里就不多说了。生存时间
  生存时间由发送者设置,是数据报在网络中最长的生存时间,如果超时会抛弃数据报。网络中每个结点都会处理存在于包头中的生存时间。此域的最少减少量为1,单位是秒。因此,最长的生存时间为255秒。每个处理模块必须对TTL减1,即使所使用的时间少于一秒也是如此。高层可靠连接协议是基于原重复数据报将不会在特定时间后到达,TTL是为了满足这样假设而存在。选项
  选项中数据报中是可选的,但在实现中必须有的。有没有选项是发送者说了算,每个IP模块必须能够分析每个选项,每个选项域有多个选项。选项可能没有达到32位的边界,不足的以零填充以达到32位的倍数。校验码
  如果包头发生改变必须重新计算包头校验码,校验码可以在一定程度上杜绝传输错误。有些应用程序允许数据报中的数据出错,如果IP强调数据正确性,类似的应用程序也就用不成了。错误
  IP协议错误可由ICMP协议报告。3.3. 接口
  接口的描述是功能性的,这个描述的具体实现机制会因为操作系统的不同而不同。不同的IP实现会有不同的用户接口。但是起码的子集是所有实现必须支持的。本节将描述这个基本子集。IP协议有上下有两个接口,一个是面向本地网络的,另一个是面向高层协议或应用程序的,我们称后一个接口为用户。虽然IP协议是数据报协议,所以用于保存状态的资源(内存)很少。下面是一个高层接口范例:
  SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result)上式中:src = 源地址
  dst = 目的地址
  prot = 协议
  TOS = 服务类型
  TTL = 生存时间
  BufPTR = 缓冲区指针
  len = 缓冲区长度
  Id = 标记
  DF = 不分段
  opt = 选项数据
  result = 响应,响应分为OK和Error两种;
  OK = 发送成功
  Error = 参数错误或本地网络错误优先级和安全性参数在选项中传送。RECV (BufPTR, prot, => result, src, dst, TOS, len, opt)上式中:BufPTR = 缓冲区指针
  prot = 协议
  result = 响应,响应分为OK和Error两种;
  OK = 发送成功
  Error = 参数错误
  len = 缓冲区长度
  src = 源地址
  dst = 目标地址
  TOS = 服务类型
  opt = 选项数据当用户发送数据报时,他执行SEND命令。IP模块在收到调用时,检查传送来的参数并准备发送数据。如果参数合法而且本地网络正常接收数据,返回成功。如果参数不合法,或本地网络未接收数据,返回不成功。在未成功时会返回报告,报告内容会因实现不同而不同。当数据报到达IP模块时,要么有一个RECV调用要么没有。如果有这个调用会传送信息给用户;如果没有,通知用户信息到达。如果没有找到应该通知的用户,返回ICMP错误,抛弃数据。通知用户可以通过假中断或类似的机制,这视操作系统不同而不同。源地址包括在发送调用中,IP模块可以检查源地址是否是一个合法地址。 IP地址与子网掩码
  IP地址与网络分类(1)IP地址
  不同的物理网络技术有不同的编址方式;不同物理网络中的主机,有不同的物理网络地址。网间网技术是将不同物理网络技术统一起来的高层软件技术。网间网技术采用一种全局通用的地址格式,为全网的每一网络和每一主机都分配一个网间网地址,以此屏蔽物理网络地址的差异。IP协议提供一种全网间网通用的地址格式,并在统一管理下进行地址分配,保证一个地址对应一台网间网主机(包括网关),这样物理地址的差异被IP层所屏蔽。IP层所用到的地址叫做网间网地址,又叫IP地址。它由网络号和主机号两部分组成,统一网络内的所有主机使用相同的网络号,主机号是唯一的。IP地址是一个32为的二进制数,分成4个字段,每个字段8位。(2)三类主要的网络地址
    我们知道,从LAN到WAN,不同种类网络规模相差很大,必须区别对待。因此按网络规模大小,将网络地址分为主要的三类,如下:
    A类:
    0 1 2 3 8 16 24
    3 1 0网络号主机号
  B类:
    1 0网络号主机号
    C类:
    1 1 0网络号主机号
    A类地址用于少量的(最多27个)主机数大于216的大型网,每个A类网络可容纳最多224台主机;B类地址用于主机数介于28~216之间数量不多不少的中型网,B类网络最多214个;C类地址用于每个网络只能容纳28台主机的大量小型网,C类网络最多221个。
    除了以上A、B、C三个主类地址外,还有另外两类地址,如下:
    D类:
    1 1 1 0多目地址
    E类:
    1 1 1 1 0留待后用
    其中多目地址(multicast address)是比广播地址稍弱的多点传送地址,用于支持多目传输技术。E类地址用于将来的扩展之用。
    
  (3)TCP/IP规定网络地址
    除了一般地标识一台主机外,还有几种具有特殊意义的特殊形式。
    *广播地址
    TCP/IP规定,主机号全为“1”的网络地址用于广播之用,叫做广播地址。所谓广播,指同时向网上所有主机发送报文。
    *有限广播
    前面提到的广播地址包含一个有效的网络号和主机号,技术上称为直接广播(directed boradcasting)地址。在网间网上的任何一点均可向其他任何网络进行直接广播,但直接广播有一个缺点,就是要知道信宿网络的网络号。
    有时需要在本网络内部广播,但又不知道本网络网络号。TCP/IP规定,32比特全为“1”的网间网地址用于本网广播,该地址叫做有限广播地址(limited broadcast address)。
    *“0”地址
    TCP/IP协议规定,各位全为“0”的网络号被解释成“本”网络。
    *回送地址
    A类网络地址127是一个保留地址,用于网络软件测试以及本地机进程间通信,叫做回送地址(loopback address)。无论什么程序,一旦使用回送地址发送数据,协议软件立即返回之,不进行任何网络传输。
    TCP/IP协议规定,一、含网络号127的分组不能出现在任何网络上;二、主机和网关不能为该地址广播任何寻径信息。由以上规定可以看出,主机号全“0”全“1”的地址在TCP/IP协议中有特殊含义,不能用作一台主机的有效地址。二、子网掩码
    (1)子网TCP/IP网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的。网间网规模的迅速扩展对IP地址模式的威胁并不是它不能保证主机地址的唯一性,而是会带来两方面的负担:第一,巨大的网络地址管理开销;第二,网关寻径急剧膨胀。其中第二点尤为突出,寻径表的膨胀不仅会降低网关寻径效率(甚至可能使寻径表溢出,从而造成寻径故障),更重要的是将增加内外部路径刷新时的开销,从而加重网络负担。
    因此,迫切需要寻求新的技术,以应付网间网规模增长带来的问题。仔细分析发现,网间网规模的增长在内部主要表现为网络地址的增减,因此解决问题的思路集中在:如何减少网络地址。于是IP网络地址的多重复用技术应运而生。
    通过复用技术,使若干物理网络共享同一IP网络地址,无疑将减少网络地址数。
    子网编址(subnet addressing)技术,又叫子网寻径(subnetrouting),英文简称subnetting,是最广泛使用的IP网络地址复用方式,目前已经标准化,并成为IP地址模式的一部分。
    一般的,32位的IP地址分为两部分,即网络号和主机号,我们分别把他们叫做IP地址的“网间网部分”和“本地部分”。子网编址技术将本地部分进一步划分为“物理网络”部分和“主机”部分,如图:
    网间网部分物理网络主机
    |←网间网部分→|←────本地部分─────→|
    其中“物理网络”用于标识同一IP网络地址下的不同物理网络,既是“子网”。  (2)子网掩码IP协议标准规定:每一个使用子网的网点都选择一个32位的位模式,若位模式中的某位置1,则对应IP地址中的某位为网络地址(包括网间网部分和物理网络号)中的一位;若位模式中的某位置0,则对应IP地址中的某位为主机地址中的一位。例如位模式:
    11111111 11111111 11111111 00000000中,前三个字节全1,代表对应IP地址中最高的三个字节为网络地址;后一个字节全0,代表对应IP地址中最后的一个字节为主机地址。这种位模式叫做子网模(subnet mask)或“子网掩码”。
    为了使用的方便,常常使用“点分整数表示法”来表示一个IP地址和子网掩码,例如B类地址子网掩码(11111111 11111111 11111111 00000000)为:
    255.255.25.0 IP协议关于子网掩码的定义提供一种有趣的灵活性,允许子网掩码中的“0”和“1”位不连续。但是,这样的子网掩码给分配主机地址和理解寻径表都带来一定困难,并且,极少的路由器支持在子网中使用低序或无序的位,因此在实际应用中通常各网点采用连续方式的子网掩码。像255.255.255.64和255.255.255.160等一类的子网掩码不推荐使用。
    (3)子网掩码与IP地址子网掩码与IP地址结合使用,可以区分出一个网络地址的网络号和主机号。
    例如:有一个C类地址为:
    192.9.200.13其缺省的子网掩码为:
    255.255.255.0则它的网络号和主机号可按如下方法得到:
  ①将IP地址192.9.200.13转换为二进制11000000 00001001 11001000 00001101
  ②将子网掩码255.255.255.0转换为二进制11111111 11111111 11111111 00000000
  ③将两个二进制数逻辑与(AND)运算后得出的结果即为网络部分11000000 00001001 11001000 00001101 AND 11111111 11111111 11111111 00000000 11000000 00001001 11001000 00000000结果为192.9.200.0,即网络号为192.9.200.0。
  ④将子网掩码取反再与IP地址逻辑与(AND)后得到的结果即为主机部分11000000 00001001 11001000 00001101 AND 00000000 00000000 00000000 11111111 00000000 00000000 00000000 00001101结果为0.0.0.13,即主机号为13。  
    (4)子网掩码与IP地址子网掩码与IP地址结合使用,可以区分出一个网络地址的网络号和主机号。
    例如:有一个C类地址为:
    192.9.200.13 其缺省的子网掩码为:
    255.255.255.0 则它的网络号和主机号可按如下方法得到:
  ①将IP地址192.9.200.13转换为二进制11000000 00001001 11001000 00001101
  ②将子网掩码255.255.255.0转换为二进制11111111 11111111 11111111 00000000
  ③将两个二进制数逻辑与(AND)运算后得出的结果即为网络部分11000000 00001001 11001000 00001101 AND 11111111 11111111 11111111 00000000 11000000 00001001 11001000 00000000结果为192.9.200.0,
  即网络号为192.9.200.0。
  ④将子网掩码取反再与IP地址逻辑与(AND)后得到的结果即为主机部分11000000 00001001 11001000 00001101 AND 00000000 00000000 00000000 11111111 00000000 00000000 00000000 00001101 结果为0.0.0.13,即主机号为13。
    三、子网划分与实例根据以上分析,建议按以下步骤和实例定义子网掩码。
    1、将要划分的子网数目转换为2的m次方。如要分8个子网,8=23。
    2、取上述要划分子网数的2的m次方的幂。如23,即m=3。
    3、将上一步确定的幂m按高序占用主机地址m位后转换为十进制。如m为3 则是11100000,转换为十进制为224,即为最终确定的子网掩码。如果是C类网,则子网掩码为255.255.255.224;如果是B类网,则子网掩码为255.255.224.0;如果是C类网,则子网掩码为255.224.0.0。
    在这里,子网个数与占用主机地址位数有如下等式成立:2m=n。其中,m表示占用主机地址的位数;n表示划分的子网个数。根据这些原则,将一个C类网络分成4个子网。若我们用的网络号为192.9.200,则该C类网内的主机IP地址就是192.9.200.1~192.9.200.254(因为全“0”和全“1”的主机地址有特殊含义,不作为有效的IP地址),现将网络划分为4个部分,按照以上步骤:
    4=22,取22的幂,即2,则二进制为11,占用主机地址的高序位即为11000000,转换为十进制为192。这样就可确定该子网掩码为:192.9.200.192,4个子网的IP地址范围分别为:
    二进制十进制
  ① 11000000 00001001 11001000 00000001 11000000 00001001 11001000 00111110 192.9.200.1
  192.9.200.62
  ② 11000000 00001001 11001000 01000001 11000000 00001001 11001000 01111110 192.9.200.65
  192.9.200.126
  ③ 11000000 00001001 11001000 10000001 11000000 00001001 11001000 10111110 192.9.200.129
  192.9.200.190
  ④ 11000000 00001001 11001000 11000001 11000000 00001001 11001000 11111110 192.9.200.193
  192.9.200.254
    在此列出A、B、C三类网络子网数目与子网掩码的转换表,以供参考。A类:
  子网数目 占用位数    子网掩码    子网中主机数
   2     1    255.128.0.0    8,388,606
   4     2    255.192.0.0    4,194,302
   8     3    255.224.0.0    2,097,150
   16     4    255.240.0.0    1,048,574
   32     5    255.248.0.0    524,286
   64     6    255.252.0.0    262,142
   128    7    255.254.0.0    131,070
   128    8    255.255.0.0    65,534B类:
  子网数目 占用位数    子网掩码    子网中主机数
   2     1    255.255.128.0   32,766
   4     2    255.255.192.0   16,382
   8     3    255.255.224.0   8,190
   16     4    255.255.240.0   4,094
   32     5    255.255.248.0   2,046
   64     6    255.255.252.0   1,022
   128    7    255.255.254.0   510
   256    8    255.255.255.0   254C类:子网数目 占用位数    子网掩码    子网中主机数
   2     1    255.255.255.128   126
   4     2    255.255.255.192   62
   8     3    255.255.255.224   30
  16     4    255.255.255.240   14
   32     5    255.255.255.248   6
   64     6    255.255.255.252   2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于TCP/IP的多线程文件传输是一种通过网络进行文件传输的方法。它使用TCP协议作为传输层协议,IP协议作为网络层协议,以确保文件在网络上的可靠传输。 在这种传输方式中,多线程被用于加速文件传输的速度。当需要传输一个文件时,服务器启动一个主线程和多个子线程。主线程负责监听客户端的连接请求,并建立TCP连接。每个子线程负责处理一个客户端的请求,即传输文件的任务。主线程通过接收客户端的请求,将任务分配给子线程来实现多文件同时传输。 这种基于TCP/IP的多线程文件传输方式具有以下优点: 1. 提高传输速度:多线程可以同时传输多个文件,充分利用系统资源,提高传输效率。 2. 系统稳定性高:每个传输任务都独立运行在一个线程中,可以避免单个任务的错误对其他任务的影响。即使某个任务失败,其他任务仍然可以继续运行。 3. 传输过程可靠:基于TCP协议的文件传输可以保证文件的正确传输。TCP协议提供了数据分段、确认、重传等机制,确保文件数据在网络上的可靠传输。 4. 支持大文件传输:通过分段传输的方式,可以支持传输大文件,避免传输过程中出现内存不足等问题。 总而言之,基于TCP/IP的多线程文件传输是一种高效且可靠的文件传输方式。它通过多线程的并发处理能力,使文件传输更加快速和稳定,适用于大文件的网络传输需求。 ### 回答2: 基于TCP/IP多线程文件传输是一种利用TCP/IP协议和多线程技术来进行文件传输的方法。在这种方式下,传输的文件被拆分成多个数据包进行传送,并且利用TCP协议的可靠性进行传输保障。 首先,服务器和客户端之间建立TCP连接。客户端向服务器发送文件传输请求,并指定要传输的文件路径和名称。 其次,服务器接收到客户端的请求后,根据指定的文件路径和名称,去服务器存储的文件系统中查找对应的文件,并将文件分割成若干个固定大小的数据包。 然后,服务器将这些数据包发送给客户端。为了提高传输效率,可以利用多线程技术,同时开启多个线程来完成数据包的发送。 客户端接收到数据包后,根据数据包中的文件信息,将数据包按顺序组合成完整的文件,并保存到指定路径。 在传输过程中,由于利用了TCP协议的可靠性机制,数据的传输过程中不会出现丢包或损坏的情况。如果某个数据包在传输过程中出现错误或丢失,TCP协议会自动重新发送该数据包,以确保数据的完整性。 综上所述,基于TCP/IP多线程文件传输是一种高效可靠的文件传输方式,同时利用多线程技术可以提高传输效率。它的应用场景主要是在需要快速、可靠地进行大文件传输的环境中,如网络备份、远程文件同步等。 ### 回答3: 基于TCP/IP的多线程文件传输是一种通过网络将文件从一个设备传输到另一个设备的方法。TCP/IP是一组用于在网络上传输数据的协议,而多线程文件传输是指同时使用多个线程来传输文件,以提高传输速度和效率。 在多线程文件传输中,发送方将文件分成小块,并使用TCP/IP协议将这些块传输到接收方。发送方和接收方之间建立了一个TCP连接,该连接可确保数据的可靠传输,并提供了错误检测和重传机制。 传输过程中,发送方的多个线程同时将文件块发送至接收方,接收方的多个线程同时接收和存储文件块。通过使用多个线程,可以充分利用网络带宽,提高文件传输速度。 多线程文件传输还可以提供一些其他功能,如断点续传。如果传输过程中断开连接,可以通过重新连接并从断点处继续传输文件,而无需从头开始。 然而,多线程文件传输也有一些限制。首先,需要足够的带宽来支持多个线程同时传输文件块。如果网络带宽有限,使用多个线程可能会导致拥堵和传输速度的下降。其次,多线程文件传输可能会增加系统负载和资源占用,特别是在大规模文件传输时。 总体而言,基于TCP/IP的多线程文件传输是一种有效的方法,可以提高文件传输的速度和效率。然而,在实际使用中,需要根据网络环境和文件大小等因素综合考虑,以选择最适合的传输方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值