您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > TCPIP协议栈(P12-Read
1IP协议4学时2TCP/IP协议栈(P12,Figure2.2)3封装4分用5IP协议数据的传输过程•准备好数据,指明目的地,交给IP协议•IP协议将数据组成IP数据包并发送到网络设备,由通信网络将数据包传送到正确的目的地•在接收方,网络设备接收到IP数据包后会根据其目的地址将数据包发送给主机系统与信件递送的区别:1随时待命,来了即服务2传输中只有分解、没有合成(只有在目的地才组装)6IP协议中的概念•工作(处理)的对象是数据包•责任是将数据正确传递到目的地•无连接的数据传递服务Connectionless:eachdatagramisindependentofallothers(在传输中).课本上也有描述:IP协议在处理数据包时,…,处理可能是不同的。•不可靠的数据传递服务Unreliable:thereisnoguaranteethatdatagramsaredeliveredcorrectlyoratall.7InternetProtocol•IPisthenetworklayer–对上层:提供主机到主机的分组递送服务–对下层:在不同的数据链路协议间进行翻译课本提到了,IP协议要将数据正确传递到目的地,就必须能够标识和识别出数据包的地址。那么,处于网络层的IP,它的地址有什么要求呢?课本的描述:它是一个32位的整数,包含网络ID(netid)和主机ID(hostid)8IPAddresses•IPaddressesarenotthesameastheunderlyingdata-link(MAC)addresses.Why?•IP是网络层的协议——它必须能够为处于不同类型网络中的主机提供通信(不同的数据链路协议)•该地址必须包含接收者所在的网络信息。这样才使路由变为可行9IPAddresses•IPaddressesarelogicaladdresses(notphysical)•32bits整形数.•IncludesanetworkIDandahostID.•EveryhostmusthaveauniqueIPaddress.•IPaddressesareassignedbyacentralauthority(InternetCorporationforAssignedNamesandNumbers--ICANN)(指合法的IP地址,私网中的地址不在此列)10五类IP地址•P16,Figure3.2•组成:地址类别标识、网络ID、主机ID•网络ID由全球的权威组织分配给某组织使用•主机ID由本地的系统管理员分配•网络ID和主机ID都用于路由:网络ID定位主机所属的网络,主机ID在该网络中定位主机。路由器仅使用netid,以缩小路由表的规模。(Addressing的原则,即先定位网络,再定位主机)11IP地址的表示•32位整形数•不方便阅读与记忆•4个由点隔开的十进制整数例子:P17一个网络接口对应着一个IP地址。主机有多个网络接口的话,就要分配多个IP地址12特殊IP地址•P17,Figure3.3囊括了教材3.2.1节最后部分hostid特殊地址的介绍13IP地址的缺陷•P18,首先、其次、再次为什么主机从一个位置移到另一个位置时,它原有的IP地址变得无法使用?课本P16,网络设备先根据IP地址中的netid找到该IP地址所属的网络,然后由该网络中的设备根据hostid将数据包转发给它14子网技术&私有网络地址•P196位可表示64个独立的主机地址,其中全0的地址被保留标志子网本身,全1的地址被保留用作广播,这样还剩62个可用的地址•VLSM:可变长子网掩码一个物理网络中可能存在多个子网超网技术:大家自己可后看一下就行了(注意纠正错误:P19倒数第一行)•私有网络地址:专门标识内部网络的15网络字节序和主机字节序计算机中最基本的数据长度单位是字节,8位。整数必须使用多个字节来表示Littleindian:整数中的低位存在低内存地址Bigindian:整数中的低位存在高内存地址16IP数据包P258•P21,Figure3.5typedefstructip_hdr//定义IP首部{unsignedcharip_verlen;//4位首部长度,4位IP版本号//unsignedcharip_hlen:4;//forwindowsOS//unsignedcharip_ver:4;unsignedcharip_tos;//8位服务类型TOSunsignedshortip_totallen;//16位总长度(字节)unsignedshortip_id;//16位标识unsignedshortip_fragoff;//3位标志位,13位分片偏移unsignedcharip_ttl;//8位生存时间TTLunsignedcharip_protocol;//8位协议(TCP,UDP或其他)unsignedshortip_checksum;//16位IP首部校验和unsignedintip_srcaddr;//32位源IP地址unsignedintip_destaddr;//32位目的IP地址}IPV4_HDR;•#defineIP_HLEN(pip)((pip-ip_verlen&0xf)2)//unit:32bits,4byes•赋值操作:p262,L152•#defineIP_DF0x4000//0x4000don'tfragmentflag•#defineIP_MF0x2000//0x2000morefragmentflag•#defineIP_FRAGOFF0x1fff//0x1fffmaskforfragmentingbits17校验和的计算•通过spynetsniffer抓包软件,抓取一个ip数据包进行分析研究4500002e----4表示ip版本号为ip第4版;5表示首部长度为5个32bit字长,即为20字节;002e表示ip总长度为46字节,其中ip数据部分为26字节。be550000----be55表示标识符;0000表示3bit标志及13bit片偏移量;7a1151ac----7a表示ttl值为122;11表示协议号为17的udp协议;51ac表示16bit首部检验和值;deb77ee3----表示32bit源ip地址为222.183.126.227c0a8127a----表示32bit目的ip地址为192.168.18.122反码求和:全部取反,累加。(原码求和结果:3ae50)18校验和的函数P263略•USHORTchecksum(USHORT*buffer,intsize)//size的单位为字节•{unsignedlongcksum=0;•while(size1){•cksum+=*buffer++;•size-=sizeof(USHORT);•}•if(size)cksum+=*(UCHAR*)buffer;•cksum=(cksum16)+(cksum&0xffff);•cksum+=(cksum16);•return(USHORT)(~cksum);•}二进制反码求和等价于二进制求和再取反“anyoverflowsfromthemostsignificantbitsareaddedintotheleastsignificantbits.19校验和的数学特性•CommutativeandAssociative[A,B]+’[C,D]=[A,B]+’[C,0]+’[0,D]•ByteOrderIndependencetheresultissame,exceptthebytesareswappedinthesum在函数中,对于总长为奇数的情况,使用网络字节序来计算。•ParallelSummationWhenthesumhasbeencomputed,wefoldthelongsuminto16bitsbyaddingthe16-bitsegments.20加速校验和计算的技术•DeferredCarries(延缓进位)用32位的数来计算和,不用16位(这个每次加法都需要检查是否溢出)•CombinewithDataCopyingOnsomemachines(especiallyrelativelyslowandsimplemicro-computers),overheadcanbesignificantlyreducedbycombiningmemory-to-memorycopyandthechecksumming,fetchingthedataonlyonceforboth•IncrementalUpdate(路由器重新计算TTL)giventheoriginalvaluem,thenewvaluem',andtheoldchecksumC,thenewchecksumC'is:C'=C+(-m)+m'=C+(m'-m)21校验和的检查•RFC1071:重新计算校验和(含checksum字段),若全为1(0xffff),则成功若是如教材所言比较二者相等,需要先把checksum字段的值保存出来,然后赋值0,再计算,最后再比较。结论:计算机累死了22IP数据包的分片和重组•IP数据包的传输最终还是要依赖底层物理网络的传输功能的。•物理网络有最大传输单元的限制;而IP协议的目的是向上层屏蔽各物理网络的差异,所以不能将此限制加给上层协议•为了解决长度限制的问题,需要对数据包进行分片和重组•分片在源主机和路由器上发生;重组只能在目标主机发生。课本P23页的例子23数据包分片图解•每个分片都有IP数据包报头•报头域–最初的数据包的标记–本分片的位置24分片算法的要点•INPUT:ip_hdr*pip•Maxdlen=(NI_MTU–IP_HLEN(pip))&~7;•Offset=0;•Offindg=(pip-ip_fragoff&IP_FRAGOFF)3;•Left=pip-ip_len–IP_HLEN(pip);•While(leftNI_MTU)•{…;//generateanewIPpacket,named*np,andcopytheheaderof*pipnp-ip_len=Maxdlen+IP_HLEN(np);np-fragoff=IP_MF|offindg3;…;//iph2net(),etcblockcopy(np,pip,offset);//datefragment,tobeimplementednetwrite(NI,np,np-ip_len);//tobeimplementedleft-=tosend;offindg+=Maxdlen;offset+=Maxdlen;•}•…;//dealwiththelastone25分片算法的作业——模拟IP的分片•自己生成一块待发送的数据,长度为300字节,最好是一个字符串•假设网络的MTU=150字节•发送的模拟用写入文本文件来代替,头部的数据用16进制表示,写完一个IP数据之后再换行(一行对应一个IP数据),用制表符(”\t”)对齐26重组的要点•RFC815:IPDATAGRAMREASSEMBLYALGORITHMS•缓冲区链表的操作将新到的分片加入(查找定位)溢出时的丢弃•数据报完整的判断•将报文重组•缓冲区链表的定时维护管理27IP选项的处理•课后自己阅读•程序实现的要点UCHAR*cp=(UCHAR*)(pip+1);intcnt=IP_HLEN(pip)–sizeof(IPV4_HDR);//选项总长for(;cnt0;cnt-=optlen,cp+=optlen)//optlen:各选项长度{}28补充:IP软件设计思想[4]•统一的输入队列以及统一的路由选择过程不区分数据报来自网络还是本机产生的,IP不需要在程序的代码中对本地生成的数据报区别。使用单一的路由算法为所有的数据报选择路由,便于人们理解一个数据报采纳的路由。•独立的IP进程使软件容易理解和修改IP软件能够
本文标题:TCPIP协议栈(P12-Read
链接地址:https://www.777doc.com/doc-2851550 .html