




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一、简要历史3二、TCP/IP协议族32.1.简介32.2.编址3物理地址3逻辑地址4端口地址52.3.分层数据包介绍5以太网帧5ARP报文格式6IP数据报格式6ICMP报文格式7IGMP报文格式9UDP用户数据报首部格式9TCP报文段格式102.4.分层协议讲解11ARP和RARP12升挑祸IP略协议稠圾13直习现ICMP叼协议圆甲13冠场暗网际组管理甲协议(湾IGMP赶)滔缘16铲跃篇用户数据报慎(梢UDP怜)双廉17跟玩朗传输控制协川议(兽TCP凑)祸碗18末三、捆翻UIP词处理流程偶弱20颗3.1.怕送简介腔煎20界3.2.粥洋层次结构耀姿20株苦旋实现设备驱垂动与茂UIP咱对接需要的魂7门个接口程序竖,定义在劝uip.h围:们插21普燕在应用层要调壶用的函数,呢包括一些宏华定义与函数菊,定义在样uip.h污:抱冻24符汤仆UIP拜中所用到的企主要结构体翅似27别衫遭uip薯的初始化与钉配置函数缠苹31拌纪容Uip筝的主程序循碌环悦泪32峡侄陈主要的处理辣函数庸uip_p仗roces串s()步蚕34建沾浙再来分析光UIP_U城DP_SE呢ND_CO谦NN错,主要处理数UDP宝报文的发送动:病滥37竖骑种接下来,分俊析弟UIP_P茅OLL_R超EQUES河T妙取38泽帐妨对定时器期闸满的处理流愿程软UIP_T晒IMER待款40逃筒0迷国对土UIP_U践DP_TI茄MER尚的处理流程屈踪41熊撇1虫酸原始套接字姨和原始线程庭侨41简要历史薄1973年默,ARPA躁NET核心甚组成员Vi还ntCe腰rf和页BobK黎ahn发锹表了一篇里洪程碑论文,诊阐述了实现摧分组的端到具端交付的协杀议。这篇轨关于传输控鞭制协议(T督CP)的论习文包括:封鸭装、数据报颜,以及网关堆的功能。拴似后来,T抄CP被划分驶为两个协议四:传输控制饲协议(TC消P)和网际枕互联协议(敏IP)。I赞P处理数据挂报的路由选荣择,而TC桃P负责高层坛的一些功能樱,如分段、肿重装和差错瞧检测。这个基用来进行网隆际互联的协衡议后来就被款称为TCP铁/IP。孔TCP/I仪P协议族简介招TCP/I劣P协议族由攻5层组成:惯物理层、数与据链路层、妄网络层、运作输层和应用臭层。前四层戏与OSI模灭型的前四层薯相对应,提端供物理标准吸、网络接口竖、网际互联责、以及运输颂功能。而应步用层与OS袄I模型中最遥高的三层相瓣对应。耕TCP/I采P协议族中俩的各层包含常了一些相对前独立的协议撇。在物理层血和数据链路名层,TCP档/IP并没必有定义任何竖协议昏。在网络层指TCP/I张P支持网际谱互联协议(滚IP),而抄IP又由四斑个支撑协议尾组成:AR聪P、RAR厚P、ICM妹P和IGM福P。在传统百上,TCP车/IP协议死族在运输层剖有两个运输与协议:TC俊P和UDP妙,然而现在发已经设计出意一个新的运抵输层协议S曲CTP以满挠足新的应用跌的需要。I绸P是主机到酿主机的协议陪,即把分组自从一个物理锄设备交付到绩另一个物理泰设备。UD岸P和TCP属是运输机协励议,负责把量报文从一个县进程(运行撞着的程序)瓜交付到另一谢个进程。编址蒜使用TCP诊/IP协议死的互联网使栋用3个等级崇的地址:物形理(链路)悟地址、逻辑晌(IP)地嫩址以及端口辱地址。每一恢种地址属于坏TCP/I困P体系结构酱中的特定层圆。物理地址假物理地址也口叫链路地址承,是结点的遮地址,由它辅所在的局域邪网或广域网塘定义。物理献地址包含在匙数据链路层碧使用的帧中榆。忍以太网的地跟址是6字节挣(48位)浙长,通常用隐十六进制记闭法,如:0逼7:01:雪02:01霸:2C:4纹B。以太网预的地址共3除种:单播、勾多播和广播订。在单播地蒜址中的第一榆个字节的最施低位0;在准多播地址中招的第一个字特节的最低位馆是1。广播富地址是48择个1。逻辑地址错因特网的逻仓辑地址是3雹2位地址,闪可以用来标佣志连接在因牌特网上的每纪个主机。在腊因特网上没靠有两个主机谨有相同的I弦P地址。同类样,逻辑地衰址也可以是露单播地址、倚多播地址和分广播地址。爆Inter亏net被各坡种路由器和蹦网关设备分授隔成很多网测段,为了标带识不同的网饮段,需要把味32位的I袖P地址划分惊成网络号和聚主机号两部封分,网络号摊相同的各主既机位于同一不网段,相互明间可以直接程通信,网络喘号不同的主垮机之间通信卵则需要通过竭路由器转发轧。蓬把所有IP轰地址分为五严类,如下图印1醋所示持:图2-SEQ图表\*ARABIC1钞A类
0.滑滴到127.布255.2娃55.25计5灯B类
12栽稍.0到19宣1.255骗.255.乓255远C类
19臂霜.0到22冤3.255另.255.颠255作D类
22豆很.0到23型9.255杂.255.符255推E类
24局率.0到24道7.255慈.255.风255浩在分类编址跌的A类、B横类、C类地松址中,IP葛地址可划分氧为net-婆id(网络掉标识)和h拳ost-i择d(主机标来识)。对于坦A类地址,俩1字节定义丙net-i舅d而3字节箱定义hos荡t-id。招对于B类地蔑址,2字节具定义net凑-id,2某字节定义h区ost-i亡d。对于C汇类地址,3疾字节定义n懒et-id革而1字节定争义host钳-id。D靠类地址和E侮类地址不划全分net-久id和ho框st-id啦。街网络地址是姜一个地址块金的第一个地敌址伍,向因特网防的其余部分势定义这个网盗络。路由器举就是根据网喊络地址来选玻择分组的路技由。若给出名网络地址,婚我们就能够筋找出这个地征址的类别、累地址块以及样这个地址块链的地址范围吩。固这种划分方璃案有很大的确局限性,它赵对网络的划锤分是fla弟t塑的而不是层亚级结构团(灭hiera倚rchic抬al退)咱的量。劳Inter书net上的越每个路由器蒙都必须掌握版所有网络的虚信息,随着适大量C类网稿络的出现,脑路由器需要但检索的路由嫂表越来越庞急大,负担越狮来越重。帅于是提出了招新的划分方踩案,称为竟CIDR(尖Class雕less孤Inter瞎domai后nRou草ting)垦。消网络号和主呜机号的划分座需要用一个程额外的子网梦掩码(su颗bnet朱mask)百来表示,而乌不能由IP裕地址本身的堡数值决定,熟也就是说,芬网络号和主秧机号的划分菊与这个IP往地址是A类努、B类还是攀C类无关,羡因此称为C烛lassl遍ess的。赛这样,多个纵子网就可以康汇总(su谈mmari肯ze)成一喂个Inte心rnet上抵的网络房。罪IP地址与誉子网掩码做宅与运算可以购得到网络号束,主机号从脉全0到全1翼就是子网的胖地址范围。炸IP地址和沙子网掩码还凶有一种更简烦洁的表示方朵法,例如1倦40.25漠2.20.亭68潮/24虹,表示IP啄地址为14坏0.252竭.20.6甩8,子网掩节码的腊高24位是涌1恼,也就是2工55.25原5.255混.0。烧目的地址为胡255.2就55.25尺5.255匆,表示本网沟络内部广播队,路由器不犯转发这样的蓝广播数据包浪。晃目的地址的两主机号为全圾1,表示广艘播至某个网辱络的所有主华机,例如目闻的地址19尾2.168钉.10.2笋55表示广田播至192败.168.司10.0网密络(假设子灾网掩码为2迹55.25臭5.255娇.0)。端口地址及计算机是多朗进程设备,牲即可以在同露一时间运行敏多个进程。晴因特网通信窗的最终目的该是使一个进域程能够和另视一个进程通缺信。为了能贤够同时发生库这些事情,坝需要有一种行方法对不同饿的进程打上牢标号,就是陈说这些进程秒需要地址。用在TCP/盆IP体系结梳构中,给一有个进程指派莲的标号叫做烛端口地址。捆TCP/I闲P中的端口督地址是16放位长,通常医用10进制坝数表示。蓄分层数据包自介绍以太网帧图2-SEQ图表\*ARABIC2之目的地址(忌DA)标DA字段裳有6字节,畅是下一站的回物理地址(林也叫MAC柄地址)。剑源地址(S治A)异SA字郑段有6字节趣,是前一站皇的物理地址闸。乎类型帜王奴类型字段有尾三种值,分冬别对应IP仰、ARP、链RARP。乌数据晴沿洗携带从上层坡协议封装起石来的数据。医它的最小长迫度是46字锤节,最大长锹度是150煤0字节。A溉RP、RA妈RP的数据略包长度不够进46字节,载要在后面补部填充位。最顽大值150柿0称为以太贫网的最大传结输单元(M亭TU),如拘果一个数据立包从以太网烫路由到链路虫上,数据包席的长度大于哀链路的MT以U了,则需亿要对数据包驻进行分片蒙CRC顷第旱差错检斥测信息,4割字节。袖ARP滴报文格式图2-SEQ图表\*ARABIC3臭如上图3所放示,ARP淋分组的格式雷如下:奥硬件类型炎仔炼16位字段疫,用来定义还运行ARP凶的链路层网犬络的类型。席以太网是类稠型1。圾协议类型傍绞应16位字段堆,指要转换亚的地址类型胖。0x08导00位IP迷地址。岔硬件长度蛇补骗8位字段,抢定义以字节牢为单位的物您理地址长度耍。对以太网炮这个值为6菠。丘协议长度厅远粒8位字段,嚼定义以字节张为单位的逻促辑地址长度瓜。对IPv直4协议这个币值是4。悔操作庆坟形16位父字段,定义素分组的类型乡。为1表示兼ARP请求虚,为2表示置ARP应答门。视发送端硬件斥地址野可变长倡度字段,定风义发送端的汁物理地址。把发送端协议服地址痛定义发鹿送端的逻辑模地址。策目标硬件地永址猪定义洋目标的物理术地址。对于嫩ARP请求过报文弄,这个字段桶是驼全0骨,因为发送岸端不知道目释标的物理地惩址。剖目标协议地旨址彩定义袭目标的逻辑集(如,IP就)地址。洪IP平数据报格式图2-4哄如上图4所闲示,IP数滴据报的结构牺包括:防版本(VE显R)鲁这耽个4位字段违定义IP协辉议的版本。浮首部长度(勺HLEN)贡这个晃4位字段定近义IP首部触总长度,以狭4字节拐为单位计算盏。当没有选速项时,首部更长度是20们字节,这个于字段的值是斩5(5*4厌=20)。洗当选项字段汪位最大值时置,这个字段队的值是15雁(15*4盛=60)。塞服务类型(稻DS)买TO居S位是4位扰子字段,共沈有5种不同岁的服务类型液。厚总长度铅衡骡这个16滥位字段定义僵了以箭字节侍计的数据报夫总长度(首社部加上数据缴)。要找出凉上层传来的鲁数据长度,烈可以从总长后度减去首部浇长度。总长撤度字段是1谋6位,因此拖IP数据报友的长度限制枪是6553虑5(2母16陡-1)字嚷节。拾标识(Id疾entif所icati录on)渡这个16谅位字段与源辛IP地址一避起唯一地定排义这个数据轧报。IP协赏议使用一个存计数器胖来标志数据捆报,当IP方协议下发送嚼数据时,就旱把这个计数乌器的当前值字复制蹦到标识字段行中,汉并加1粪。当数据报定被欠分片去时,标识字规段的值就成复制守到所有的分完片中。换言克之,臂所有的分片纠具有相同的恼标识号才,即原始数拾据报的标识朵号。在终点若重装数据报想时,终点就被知道所有具插有相同标识疾号的分片必霉须组装成一客个数据报。珍标志(Fl摊ags)铃摩3位字段蕉。第一位保挎留。第二位名为不分片位仗,为1表示程不对数据报胃进行分片;葛为0表示在盼需要时对数缓据报进行分银片。第三位乏为分片位,绑为1表示这静个数据报不爹是最后的分维片,在其后握还有分片;剧为0表示这此个数据报是牙最后的分片齐。捕分片偏移(璃Fragm优entO策ffset假)残这个革13位字段蹲表示该分片址在整个数据放报中的相对贝位置,以舌8字节食为度量单位抄。液生存时间(勤TTL)黑用来驰控制数据报运所通过的最劫大路由跳数叶,叹这个生存时蕉间的单位不请是秒,而是陕跳盯(hop)壳。勉协议础钻坐这个8柄位字段定义眯使用IP层各服务的高层赶协议。如:界TCP、U职DP、IC慢MP和IG邮MP等。呆检验和葬勉深IP分组皆中的检验和室只在首部而杠不在数据部增分进行。因诉为,所有将赢数据封装在昌IP数据报插中的高层协悄议,都有覆忌盖整个分组阁的检验和;防其次,,每樱经过一个路疤由器,IP溜数据报的首拔部就要改变僻一次,但数惧据部分不变受。因此检验身和只对发生文变化的部分奇进行检验。盯源地址栏裤傲这个32少位字段定义峰源点的IP先地址。在I渴P数据报从饿源主机发送瞎到目的主机奴的时间内,纪这个字段必擦须保持不变县。呼目的地址悔劈轻这个32位斩字段定义了炕终点的IP截地址。在I争P数据报从血源主机发送断到目的主机初的时间内,劫这个字段必踏须保持不变贴。跪ICMP潜报文格式茧类型呈桥混8位字啄段,定义I溉CMP报文团的类型举。ICMP章报文的类型六有:终点不吸可达、源点基抑制、超时珠、参数问题壤、改变路由泪、回送请求检或回答、时茄间戳请求或售回答、地址剑掩码请求或圆回答、路由密器询问和通妙告。鞠代码瓶摊晋8位字苹段,指明了甘发送这个特租定报文类型超的原因。伯检验和年(icmp姿chksu霉m)医16位字段书。在ICM象P中,检验够和的计算覆州盖了整个报冒文(首部和蹄数据)。蓝ICMP回不送请求或回昨答报文头格壮式如下图层5傍所示:图2-5透ICMP终橡点不可达报百文头格式如拖下图锋6被所示:图2-6镰ICMP超霜时报文头格塌式如下图浆7贪所示:图2-7胁IGMP玻报文格式图2-8原类型江锯静8位字虹段,定义了乞查询、成员抱关系报告、僵退出报告三走种报文类型唇,类型值分凡别为0x1骑1、0x1愉6、0x1惯7。乎最大响应时喝间幕8位无字段,定义魂了查询必须垃在多长时间氏内回答。它聚的值以十分眨之一秒位单仇位。在查询达报文中这个原值不是零,则但在其他两届种报文中则势置为零。心检验和肃闹西16位字哀段,检验和里在8字节的卡报文上计算盟。饲组地址雀技以在一般查天询报文中这替个字段的值吹为0,在特波殊查询报文苦、成员关系悔报告报文以活及退出报告刊报文中定义伶group格id(组多沈播地址)。慌UDP榴用户数据报店首部摇格式图2-9味UDP数据匪报格式如上伐图玻9雄所示。券用户数据报存有8个字节苏的固定首部份。巾源端口号想钓滨16位字段军,定义源主订机上运行的制进程所使用扇的端口号。兵目的端口号晃摘1偿6位字段,乱定义目的主漫机上运行的膨进程使用的跨端口号。绞长度走扣股16位掉字段,定义杂了用户数据锦报的总长度粒,首部加上溉数据。肠检验和颂富旷16位字状段,UDP悠的检验和包箱括三部分:斩伪首部、U建DP首部以庭及从应用层驳来的数据。垒位首部是I阁P分组的首可部的一部分框,衡包括:源I宜P地址、目辩的IP地址肿、8位协议慨和16位U屡DP总长度休。位首部可曾以保证在I唱P首部受到辞损伤时,用液户数据报可魄以交付到正美确的主机。阿协议字段的滚加入,可以殿确保这个分也组是属于U权DP而不是倡属于TCP脑。痒TCP液报文段格式图2-10猛如上图浆10北所示,TC慰P报文段的糟结构包括:直源端口地址见桂这与个16位字说段定义发送第报文段的应全用程序端口暂号。起目的端口地句址绕这个糖16位字段医定义了接收眯该报文段的油应用程序端识口号。脂序号纸惰急这个3绳2位字段定窗义了指派给昌本报文段第序一个数据字魂节的一个号矿。为了保证画连通性,要久发送的每一底个字节都要穴编号。序号鸟告诉终点,舅这个序列中买的哪一个字雾节是报文段疼中的第一个战字节。在连违接建立时,绝每一方使用暴随机数产生品器产生初始朋序号(IS啄N)。验确认号帅票获32位字杀段,定义了理报文段接收毙端期望从对桂方接收的下冶一个序号。仿如果报文段烟的接收端成崖功地发送了益对方发来的恩序号x,它举就把确认号雹定义为x+隶1。旁首部长度(竞tcpof暖fset)撕4位够字段,指出粘TCP首部库共有多少个权4字节痰字。即TC败P数据在I剂P数据中的滤偏移大小。芹同IP首部漆长度,可以梳在5至1喘5之间。架保留位役处晒该6位字厨段留待今后腐使用。悟控制/标志盛位堆该案字段定义了渠6种不同的姑控制位或标边志,在同一谱时间可设置甚一位或多位壮标志。闻表券2-侦1师控制字崇段各标志说史明(从高位绸到低位)业标志汽说脂明辱URG变紧急指针字浩段值有效斩ACK漆确认字段值醉有效代PSH霉推送数据塔RST闸连接必须复弹位仍SYN席在连接建立去时对序号进照行同步习FIN脱终止连接棚窗口值灿钥疫该字段定围义接收方必治须维持的窗辨口值(以鸟字节赏为单位)。求注意,该字内段是16位震长,因此窗蛇口值的最大松长度为65绍535字节璃。这个值由细接收端来确度定,发送端唱必须服从接色收端的决定盼。华检验和献膛电这个16耽位字段包含挣检验和,T克CP使用检候验和是强制额性的。绑紧急指针障某爱当紧急标志雅位置位时,悠这个16位葬字段才有效胜,这时的报恼文段中包括渠紧急数据。手紧急指针定贺义了一个数蜻,把这个数共加到序号上佛就得出报文洒段数据部分岔中最后一个信紧急字节。左选项思娇追包括无商操作(NO矛P)、最大签报文段长度健(MSS)牵、窗口扩大恳因子、时间椒戳等。痛分层协议讲填解总总的来说,堂TCP/I塔P协议的多荒路选择过程神可以表示为昨下图2-1战1:图2-11摇ARP尺和颠RARP增地址解析协欺议麦ARP升在任何时候崇,当主机或腹路由器有数熟据报要发送占给另一个主知机或路由器徒时,它必须前有接收端的学逻辑(IP乳)地址。但蜂是IP数据梳报必须封装讲成帧才能通妄过物理网络阀。这就表示剧,发送端必躁须有接收端哭的物理地址羡,因此需要呜有从逻辑地山址到物理地惹址的映射。灶地址解析协沃议(ARP附)用来把I决P地址与轧其物理地址跳联系起来。彩任何时候当吼主机或路由猎器需要找出丧这个网络上熔的另一个主粥机或路由器体的物理地址答时,它就发领送ARP查核询分组。这欣个分组包括液发送端的物蒸理地址和I杰P地址,以危及接收端的张IP地址。悬因为发送端旋不知道接收医端的物理地愁址,查询就盯在网络上广葡播。例如,黄数据包要发轮送给IP地亏址为192泛.168.爸0.1的主捐机,过程如编下:晕源主机发出袭ARP请求稿,询问“I也P地址是1水92.16内医的主机的硬的件地址是多柱少”,并将虾这个请求广斑播到本地网拆段(也以太网帧首寇部河的硬件地址患填FF:F腥F:FF:她FF:FF凉:FF表示供广播),目喊的主机接收东到广播的A拼RP请求,切发现其中的型IP地址与佩本机相符,标则发送一个熄ARP应答证数据包给源吹主机,将自剪己的硬件地牲址填写在应归答包中。杨ARP报文旨格式如前所云述。牧ARP软件鼠包由5个构鲁件组成页:泽静高速缓存表道:搂哑每台主机都深维护一个A可RP详高速丧缓存表询,袭由于高速缓榨存表的空间悲非常有限,位所以脚缓存表中的逮表项有过期职时间(一般藏为20分钟尊),如果2名0分钟内没叔有再次使用挨某个表项,氏则该表项失赞效,下次还红要发ARP坏请求来获得旗目的主机的觉硬件地址。巧巧沾队列防:鉴胆房队列用来在柜ARP试图笑解析硬件地雾址时保留I逼P分组。输袍出模块把未柏解析的分组蹈发送到相应伯的队列,输旬入模块从一足个队列中拿突走一个分组扭,并连同解墙析出的物理训地址一同发弊送给数据链毛路层来传输禽。波谁慰输出模块切:您输追出模块从I屡P软件等待荷IP分组。末输出模块检紫查高速缓存些表,寻找是灶否有某个项狱目对应于这剖个分组的目葬的IP地址线。这个IP族分组的目的宇IP地址必临须与这个项翼目的协议地载址相匹配。持渠输入模块语:斧趣输入模块奇一直等待,哈直到有AR兽P分组到达胖。检查高速旺缓存表,寻谋找对应这个酿ARP分组津的项目。勉输入模块设季置这个项目填的超时时间止TIME-那OUT。若漠队列为空,棋则从相应队毒列中把分组勤一个接一个跟地取出,连灶同其硬件地密址一起交给锡数据链路层终来处理。捎祸陡高速缓存控业制模块贯:纷米负责维护医高速缓存表基,它周期性雕地逐项检查严高速缓存表却,判断有哪钢些项目到期刚,哪些队列与需要撤销。爆逆地址解析翻协议置RARP爹袄当一个主机仅知道自己的廉物理地址时扶,RARP排可用来找出忍其逻辑地址蛛。每一个主缓机或路由器供都被指派一竭个或多个逻失辑地址,这踢些地址与机工器的物理地贝址无关。要钓创建IP数渗据报,主机算或路由器要币知道它自己姻的IP地址肃。可以使用促RARP协吧议从物理地拢址得到逻辑添地址。犹扭知道物理地茶址后,先创棉建RARP秀请求,并在羞本地网络上铜广播。在本耀地网络上的润另一个机器歉知道所有的再IP地址,脆它就用RA蚊RP回答来钟响应。请求惜的机器必须胸运行RAR仍P客户程序载;而响应的掩机器必须运缎行RARP洪服务器程序此。IP协议酬IP数据报密的格式如前腥所述。棚IP是不可纷靠的无连接捉协议,负责独源点到终点枝的交付。悬在IP层的卵分组叫做数缎据报。额数据链路层驳有自己的帧吐格式,在这境个格式中有旱一个字段是妨“贱数据字段最点大长度帐”泄。当数据报抵封装成帧时刘,数据报的园总长度必须访小于这个数专据字段最大这长度(MT鉴U)。赌对数据报进劈行分割,叫从做分片。源威站通常不对帅IP分组进闸行分片。运疮输层会进行融分片工作,侨把数据划分未成IP和在承使用的数据果链路层都可宿能接纳的大虚小。数据报挂在到达终点认之前可以经浇过多次分片求,可以被源傅主机或在其甩路径上任何离路由器进行雷分片。然而炕数据报的重瓜组却体只脊能在目的主珠机上进行。傅在IP分组槽中的检验和毫只在首部而趁不在数据部答分心进行。到因为,首先辈所有将数据凳封装在IP姐数据报中的处高层协议,受都有覆盖整泼个分组的检皆验和;其次租,每经过一弓个路由器,技IP数据报投的首部就要事改变一次,住但数据部分图不变。因此隶检验和只对徒发生变化的挥部分进行检沫验。筐IP软件包讽包括8个构益件束:首部添加击模块、处理终模块、转发乏模块、分片遇模块、重装绒模块、路由血表、MTU巷表以及重装枪表,还有输博入和输出队嫂列。翅首部添加模躺块,从高层桌协议接收数筐据(连同其丧IP地址)宫,添加IP咱首部后,把匆数据封装成掌IP数据报后。损处理模块,锈从一个接口俩或从首部添屑加模块接收水数据报,首迁先检查数据梳报是否为回谊环地址,还而是这个分组颠已到达最后详终点。抢输入队列把涉从数据链路忆层或从高层腥协议发来的锻数据存放起致来。敌输出队列把讲要发送到数弟据链路层或袋高层协议的怒数据报存放般起来,处理西模块从中取更出数据报,草分片和重装因模块则把这垄个数据报加冈入输出队列泰中。农路由表是在匹转发模块中梁使用的,用销来确定分组呜的下一跳地下址。庄分片模块从暂转发模块接抵收IP数据赌报。转发模筹块给出IP骂数据报、下惕一站的IP毒地址。以及毕发送这个反数据土报所必须通商过的接口号懂。分片模块赴使用MTU借表以便找出络对于特定接邮口的最大传扣送单元MT微U。限若数据报的巡长度大于M雷TU,则分振片模块对数否据报进行分肤片,为每一回个分片添加绞首部,并把尤它们发送到状ARP软件齿包进行地址芒解析和交付承。隶重装模块从药处理模块接以收已到达最妨终目的地的守数据报分片基。重装模块敢将未分片的看数据报看成改是属于仅有鹊一个分片的狠数据报。使控用重装表找计出一个分片酱是属于哪一编个数据报,尾将属于同一桃个数据报的抹各分片进行随排序,并扯在所有分片仪到达时把它芹们重新组装想成一个数据蒙报。坛ICMP号协议黑IP协议没止有差错报告匹或差错纠正窄机制和管理耕查询机制。奋网际控制报菌文协议(I敬CMP)就暮是为了补偿恶这两个缺点近而设计的。叮它是配合I况P协议使用寒的。恋ICMP本分身是网络层享协议,次但是它的报腿文不是如设舞想的那样直荡接传送给数繁据链路层,记而是首先要催封装成IP调数据报,再塘传送给下一层层。土在IP数据亿报中的协议铺字段值是1油就表示其I蛛P数据是I鉴CMP报文晕。谷ICMP报贝文类型如下盾表2升-2歌所示:评表舟2-爆2IC冻MP膨报文类型忽ICMP报甚文分为两大微类:差错报愁告报文和查衔询报文。要报文格式如疲前所述。驴差错报告报匪文摊差错报告报伟文报告当路扁由器或主机街在处理IP庆数据报时可辛能遇到的一派些问题。I督CMP不能溜纠错,只能肺报告差错,慕差错纠正留蛋给高层协议乎去做。皱ICMP总贤是使用源I伯P地址把差舅错报文发送牙给数据报的王源点。辣一共有5种举差错可处理虑:终点不可隆达、源点抑相制、超时、崇参数问题以西及改变路由俱。圈终点不可达惜报文抱健当路由器不色能够给数据鸟报找到路由梯或主机不能麻够交付数据血报时,就丢蚊弃这个数据浩报,然后这土个路由器或园主机就向发暮出这个数据适报的源主机寒发回终点不泡可达报文录。垮源点抑制植夹弃ICMP的租源点抑制报经文就是为了毁给IP增加战一种流量控惨制而设计的钻。当路由器辞或主机因拥惠塞而丢弃数它据报时,它败就向数据报表的发送端发夺送源点抑制废报文。目的耍有二:第一浇,通知源点扶,数据报已歉被丢弃。第呢二,它警告确源点,在路伟径中的某处尾出现了拥塞斧,因而源点充需放慢发送撤过程。注意蛋,必须为每乐一个丢弃的翁数据报向源籍点发送源点菜抑制报文。科超时蛋柿达衬超时有两种番情况:第一贱,当路由器葛接收到生存饿时间字段值血为零的数据闻报时,就丢芳弃这个数据坚报,并向源赖点发送超时疏报文;第二骡,当最后的测终点在规定纷时间内没有腾收到所有的涛分片时,就拦丢弃已收到只的分片,并惊向源点发送逢超时报文。参数问题恩如果路由器抬或主机在数叉据报的首部习中发现任何博二义性,或深在数据报的双某个字段中怀缺少了某个奇值,就丢弃王这个数据报皮,并发送参群数问题报文茅。改变路由济路由器的路蛮由选择是动舞态的,而主绿机为了提高耗效率普,通常使用咏静态路由选糕择。当主机幻开始连网工座作时,其路脚由表中的项件目数很有限或。它通常只座知道默认路浙由器这一个盾路由器的I雕P地址,因肝此主机有可帜能会把某个连数据报发送独给一个错误清的路由器。午此时,收到窗这个数据报捉的路由器会火把数据报转弦发给正确的罚路由器,并左向主机发送金改变路由报葵文,以更新挨主机中的路赴由表。查询报文慧查询报文都惑是成对出现脊的。北在这种类型示的ICMP骑报文中,一岭个结点发送郊报文,然后三由目的结点悬用特定的格岗式进行回答受。温回送请求和况回答报文票为诊断目的勿而设计的。轿主机或路由扩器可以发送仪回送请求报担文给另一个当主机或路由魂器。收到回辛送请求报文位的主机或路菜由器产生回物送回答报文饼,并将其返雅回给原来的胃发送者。绕回送请求和宰回答报文可盲用来确定是镜否在来IP这级涛能够通信。践还可由主机领使用,以检毁查另一个主视机是否可达荣。在用户级暖,调用分组弄因特网搜寻扶器(榴ping短)命令可做拜到这点。同时间戳请求棍和回答须两个机器可侦使用时间戳谢请求和回答柳来确定IP泥数据报在这颠两个机器之四间来往所需西的往返时间纹。来地址掩码请瓜求和回答做主机通过向符局域网上的未路由器发送唇地址掩码请疗求报文来获毙得自己的掩稻码。若主机可知道这个路碑由器的地址吊,则直接将醋请求发送给盟该路由器,帽若主机不知跨道,则广播秘这个请求报腐文。筐路由器收到骡地址掩码请活求报文,就桐以地址掩码兴回答报文进键行响应,向沃主机提供所荒需的掩码。单路由询问和厘通告营主机若想把弯数据发送给挤另一个网络立上的主机,珍就需要知道揉连接到该网并络上的路由辉器的地址。料此外,这个拉主机还需要撤知道这些路俭由器是否正罗常工作。就惨可以通告路叙由询问和通滋告报文。尝主机把路由画器询问报文刊进行广播,谊收到询问的刻路由器就使润用路由通告福报文广播其臭路由选择信叹息。路由器忽发送通告报粒文时,不仅营通告自己的叠存在,而且便通告了它所肆知道的所有笼在这个网络江上的路由器铲。兼在ICMP要中,检验和略的计算覆盖发了整个报文凉(首部和数对据)。熊网际洞组管理协议狂(凳IGMP瞒)句网际组管理崖协议(IG饶MP)是与饱多播有关的翼一个必要的该但不是充分拌的协议。怖IGMP并薪不是多播路凡由选择协议税,而是个管魄理组成员关辟系的协议。造每当主匆机需要加入弹或离开某个循特定的多播遥群组时,该陵协议允许该帮主机去通知州邻近已的路由器。险该协议只用煤在主机与路扔由器之间的领网络上。而丈且,协议只耽把计算机(暖不是应用进苦程)定义为胳群组成员。讨如果在一个娇给定计算机磁上有多个进材程要加入到叉一个多播群蜂组,计算机醋必须要把接洗收到的每个者数据报复制公多个副本给章每个进程。头只有当最后羡一个进程离忙开群组时,珠计算机才利猜用IGMP颜通知本地的境路由器,表耻明它不再是堪群组的成员材了。污IGMPv溪2有3种报侨文类型:查喊询、成员关伤系报告和退席出报告。傅IGMP可纸分为两个阶跑段:冒第一阶段:爪当某个主机尘加入新的多未播组时,该知主机应向组渠播组的多播晃地址发送一答个IGMP却报文,声明兴自己要成为划该组的成员狱。本地的多致播路由器收找到IGMP涛报文后,将究组成员关系尚转发给因特铲网上的其他历多播路由器牙。溉第二阶段:谎因为组成员躺关系是动态矩的,因此本险地多播路由钢器要周期性衫地探询本地示局域网上的脚主机,以便态知道这些主妄机是否还连济续是组的成毕员。只要对腥某个组有一刘个主机响应意,那么多播坏路由器就认子为这个组是漫活跃的。但锣一个组在经绳过多次的探故询后仍然没终有一个主机目响应,则多态播路由器就标认为本网络珠上的主机已师经都离开这弹个组了因此鸭就不再将该岭组的成员关淡系转发给其验他的多播路谷由器。弃IGMP报肾文格式如前诵所述。宿IGMP协轮议的优点:偿主机和多播六路由器的所搜有通信使用祸IP多播,办只要有可能后,携带IG至MP报文的烤数据报都使胖用硬件多播染来传送。愚多播路由器飞在探询组成艳员关系时,尘只需要对所芝有多播组只档发一个查询感,而不是对足每一个组发摸送一个查询叔,默认12销5S一次。滩用户数据报业(船UDP萍)绣UDP数据台报的格式如摆前所述。呼UDP位于柳应用层和I祥P层之间,浸作为应用程炼序和网络操批作的中介物值。罪IP是负责若在计算机级敏的通信(主扶机到主机的详通信),作财为网络层协微议,IP只第能把报文交病付给目的主羽机。但是,掩这是一种不聋完整的交付及。这个报文瞎还必须送交唇到正确的进托程。UDP和就是负责把露报文交付给助适当的进程谅。脉完成进程到杂进程的通信喂最常用的方急法是通过刘客户-服务孔器绳范例。在本弱地主机上叫辞做客户的进度程耻主动发起请板求演,远程主担机上叫做服辉务器的进程岭被动地等待雁、接收和应放答请求。客赤户端的IP雪地址和端口夜号唯一标识专了该主机上掩的客户端进遭程,服务器姑的IP地址挡和端口号唯裁一标识了该朽主机上的画服务异端进舅。京由于客户端堆是主动发起帆请求的一方字,它必须知慨道服务器的丢IP地址和占服务进程的熊端口号,所纷以,一些常辰见的网络协赶议有默认的棕服务器端口遍。名TCP/I骑P协议族中任,端口号是箱在0~65滩535之间岛的整数。I型CANN把穷端口号划分境为3个范围菠:熟知端口普号、注册端里口号和动态疮(或专用)浇端口号。刮熟知端口范筝围从0~1垄023;注抚册端口范围鉴从1024凶~4915雄1;动态端没口范围从4客9152~丛65535浑.俗已知UDP带需要两个标印识符,即I振P地址和端融口号,各用妄在一端以建榆立一条连接饺。一个IP勉地址和一个矛端口号合起聚来叫做套接身字地址。甜这些信息是钓IP首部和祥UDP首部纺的一部分。者UDP提供病物连接服务扬,即UDP及发出的每一报个用户数据桨报都是独立艘的数据报,把每一个用户修数据报可以托走不同的路明径到达目的债进行。UD驼P缺少流量诸控制和差错锡控制。凡要从一个进盒程把报文发箩送到另一个围进程,UD金P协议就要咸把报文进行姓封装和拆装旬。封装暗当进程有报啦文要通过U揪DP发送时挑,它就把这涂个报文连同乒一对套接字捐地址以及数纪据的长度传犁递给UDP议,加上UD语P首部后,川UDP把用宫户数据报连跪同套接字地念址一起传递穴给IP。I职P加上自己脂的首部,在情协议字段使此用值17,企指出该数据字是从UDP丸协议来的。防再将IP数誓据报传递给祖数据链路层燥,数据链路祝层收到IP枕数据报后,农再加上自己蹄的首部传递扣给物理层。味物理层将这纷些位编码为邮电信号或光涛信号,把它屡发送到远程辫机器。拆装严报文到达目销的终主机时,物润理层对信号懂解码,将它福变为位,传龟递给数据链激路层。数据武链路层使用妙这个首部(姐和尾部)检鸦查数据。若腿无差错,则渣去掉首部和醒尾部,并把百数据报传递虹给IP。I碍P软件进行热检查,若无垄差错,就剥博去首部,把季用户数据报役连同发送端粘和接收端的尾IP地址一金起传递给U赠DP。UD棕P使用检验卡和对整个用军户数据报进甚行检查。若芦无差错则剥作去首部,把期应用数据传烤递给接收进耻程。在需要屑回答收到的瓦报文时,应宽把发送端的裙套接字地址雹一起传递给池接收进程。辉矮筒UDP软件峰包共包括5恢个构件:一姻个控制块表掌、若干个输余入队列、一阁个控制块模诚块、一个输律入模块和一挎个输出模块牙。在UDP早中,队列是犹与端口相关充联在一起的硬。这里的实权现只创建与阀每一个进程害相关联的输责入队列,而情不创建输出搭队列。控制块表佣UDP控制监块表来记录才打开的端口贞。表中的每栏一个项目有忍最小的4个阅字段:状态泼(FREE节或IN-U蚀SE)、进乎程ID、端跪口号以及相光应的队列号喂。输入队列酒使用了一组州输入队列,大每一个对应暴于一个进程寿。控制块模块盒负责管理控俗制块表。当蓄进程启动时出,它就从操条作系统请求贝得到一个端料口号。操作将系统把熟知蚀端口号指派影给服务器,键而把短暂端怪口号指派给她客户。进程新把进程ID饥和端口号传争递给控制块疾模块,以便梁在表中为这艳个进程创建鹅一个项目。酬这个模块不底创建队列。拥队列数字段俱值为零。输入模块站输入模块从寺IP接收用脖户数据报。何它查找控制泽块表,查找客具有和这个丽用户数据报细同样端口号塔的项目。若炼找到这样的正项目,模块床就利用这项炉目中的信息临把这个数据身放入队列。华若未找到这询样的项目,派它就产生I晓CMP索“万端口不可达稳”怪报文,并丢罗弃这个项目辩。输出模块驱负责创建和萌发送用户数深据报。婚传输控制协觉议(摧TCP潜)食TCP叫做莫面向连接的辰、可靠的运记输协议。它贴提供进程到倒进程、全双别工和面向连葵接的服务。咐TCP使用信滑动窗口机速制实现流量留控制,来避舒免接收端因岁数据过多而挖过载;使用愁差错控制来弱提供可靠的禽服务。班两个设备之宏间使用TC煎P软件传送估的数据单元闷叫做报文段证,它有20高~60字节偏的首部,首纹部后面是来影自应用程序徒的数据。首理部结构如前盆所述。TCP连接饲TCP的连凑接通常包括料3个阶段:很连接建立、健数据传送和胜连接终止。缩连接建立需征要三向握手俱:慨客户发送第召一个报文段胳,SYN报删文段,在这晴个报文段中远只有SYN菌标志位置1侧.这个报文恒段的作用是搞使序号同步程。SYN报伙文段是控制鸣报文段,不碎携带任何数匠据,但是消蒙耗一个序号炉。当数据传歪送开始时,象每发送一个荡字节,序号症应该加1.乔在接收端鬼可以根据序星号排出数据界包的正确顺勾序,也可以仅发现丢包的烘情况跌。施服务器发送锋第二个报文克段,SYN侍+ACK报葱文段,有两和个标志位置续1(SYN汁和ACK)头。服务器使统用这个报文括段同步初始俯序号,以便芝从服务器向紫客户发送字任节。使用A县CK确认已但从客户端收境到了SYN赠报文段,确错认号为客户绝端发送SY朽N报文段序黎号值谢加迫1.缺客户发送第作三个报文A表CK,确认肥号为服务器属发送报文段级的序号值加估1。该报文温段的序号与踩SYN报文屈段使用的序河号一样。辨ACK报文遍段如果不携茄带数据就不趁消耗序号。磁连接建立后主,数据开始瞒双向传送伐:驳在数据传输肚过程中,A猾CK和确认抚序号是非常葵重要的,应佣用程序交给揪TCP协议喷发送的数据渴会暂存在T呼CP层的发稀送缓冲区中炕,发出数据责包给对方之升后,只有收干到对方应答归的ACK段刃才知道该数柄据包确实发乔到了对方,圆可以从发送网缓冲区中释秩放掉了,如上果因为网络办故障丢失了淹数据包或者零丢失了对方众发回的AC勒K段,经过拳等待超时后男TCP协议密自动将发送泳缓冲区中的示数据包重发递。婚丧大以上情况只织描述了腰最简单的一纱问一答的情惑景,事实上伐TCP协议吃为应用层提瓣供了全双工陆(full鹿-dupl求ex)的服测务,双方都生可以主动甚叠至同时给对酿方发送数据编。如果通讯性过程只能采变用一问一答党的方式,收宽和发两个方林向不能同时错传输,在同包一时间只允照许一个方向至的数据传输阀,则称为'培''半双工脸(half秘-dupl瓣ex)''钉',假设某秀种面向连接阅的协议是半镜双工的,则冈只需要一套栽序号就够了兴,不需要通累讯双方各自谊维护一套序耀号柏了乓。蕉参加交换数古据的双方中估的任何一方捡都可以关闭仅连接,决愉连接终止的讨四向握手姻:祥在正常情况擦下,客户机焰TCP接收竟到客户进程类发来的关闭莫命令后,就俱发送第一个菜报文段迹——开把FIN位出置1。如果躲FIN报文芒段不携带数烟据,它消耗杰一个序号。社同时言更改状态为郊FIN_W景AIT_1释,关闭应用参程序进程伞。厚服务器TC给P在收到这同个FIN报哥文段后,测向自己对应烤的进程发送巷一个文件结路束符EOF植,同时更改孩状态为CL亡OSE_W狭AIT骑,到并发送第二危个报文段暖——珠ACK,以灿证实从客户砌端收到了F羡IN报文段范。如果不携照带数据,调客户端都接到ACK泛后状态更改斤为FIN_溪WAIT_瓣2跪。兼服务器队关闭应用程晴序进程,更握改状态为L谅AST_A假CK辫。并旺发送第三个塑报文段就——险FIN追,艘若不携带数励据,FIN亲消耗一个序氏号。驱客户TCP闷接收到FI泽N后,更改礼状态为TI妹ME-WA袭IT,同时狭发送最后一财个报文段语——霸ACK,证愁实从TCP终服务器收到储了一个FI芽N报文段,替该报文段的克确认号等于挖从服务器发焦送的FIN醉报文段的序章号加1。键除上述的情宋况外,建立音连接时,客泪户端和服务茫器端可以同奋时打开;关拍闭连接时,幻可以同时关拐闭或者进行劫三向握手。狐TCP的状由态机转换图千如下所示:图2-12浆TCP的各喇种状态如下三表2所示:判表杏2-3边TCP抬的各种状态昂状态纳说明斤CLOSE联D哗胁没有连接巡LISTE编N捆剪收到了被动砌打开,等待停SYN蛋SYN-S觉ENT权雀已发送SY染N;等待A高CK拜SYN-R既CVD式余已发送SY送N+ACK胞;等待AC汉K粒ESTAB萝LISHE础D梦斯连接已建立腥;数据传送摧在进行扬FIN-W奖AIT-1吴填第一个FI趋N已发送;谱等待ACK朵FIN-W她AIT-2所转对第一个F哑IN的AC杜K已收到;师等待第二个冠FIN霸CLOSE却-WAIT炸叹收到第一个演FIN,已旨发送ACK盆;等待应用斑程序关闭缓TIME-躬WAIT议雅收到第二个景FIN,已锻发送ACK脉;等待2M椅SL超时粪LAST-评ACK宝认已发送第二乏个FIN;基等待ACK碌CLOSI傲NG魄栏双方都已决排定同时关闭流量控制:立如果发送端贷发送的速度腰较快,接收定端接收到数肃据后处理的惨速度较慢,狮而接收缓冲岩区的大小是骆固定的,就评会丢失数据沈。TCP协谢议通过''旅'滑动窗口忘(Slid娃ingW倚indow浇)'''机话制解决这一评问题。朱TCP在榴接收缓存上跪定义一个窗屋口,TCP首发送数据的眼多少由滑动明窗口协议定葬义。扭为了完成流臣量控制,T兔CP使用滑机动窗口协议座。两个主机断为向外通信澡(发送数据腹)各使用一配个窗口,这管个接收窗口药覆盖了缓存广的一部分。焰这个窗口有渐两个沿:一径个在左边,耻另一个在右效边。这个窗埋口叫做滑动拳窗口,因为拐左沿和右沿耀都可以滑动村。窗口可以耕展开、合拢短或缩回,这幻三种活动受趁接收端而不挑是发送端的硬控制(取决锅与网络上的亡拥塞状态)霸,发送端必齐须听从接收镰端的命令。外一般,未窗口缩回必甜须避免帐。升TCP的滑猪动窗口是面垫向字节的,颂窗口大小取秘决于接收窗旋口(rwn狡d)和拥塞羊窗口(cw振nd)中的孙较小值。蔑接收端在一刷段时间内不厉愿意从发送船端接收任何辨数据时,可役以发送rw拐nd为0的茄报文段来暂陪时关闭窗口饶,此时发送奔端窗口大小杆并非真正地劳缩回,而是洁暂停发送数盼据,直到一掌个新的通告潜收到为止。差错控制:钞差错控制由餐检验和、确兰认和超时来灵处理。受损寇伤的和重复躺的报文段要溜重传,重复予的报文段要研丢弃。数据惕可能不按序蛙到达,接收川端TCP把驻它们暂时存衫储下来,但腐TCP保证再交付给进程匙的报文段都锁是按序的。慎重传发生在遇:当笛重传超时透(穷RTO狭)计时器时寇间到,或已呼到达3个重纠复的ACK百报文段。砌TCP使用呼拥塞机制来昼避免和检测穴网络中的拥党塞。在拥塞兽控制中使用舒曼开始(指爽数增大)、环拥塞避免(封加法增大)栏和拥塞检测翅(乘法减小鲜)等策略。伙TCP在运井行中使用4晋个计时器(崖重传计时器秤、持久计时闲器、保活计堤时器和时间蚁等待计时器猛)。丽UIP小处理流程简介搁uIP协议歉栈去掉了完碌整的TCP盾/IP中不盈常用的功能鲜,简化了通佛讯流程,但索保留了网络臭通信必须使土用的协议,伤设计重点放雹在了ARP穴/IP/席ICMP/虚UDP/T拣CP这些网惰络层和传输设层协议上,为保证了其代娇码的通用性努和结构的稳演定性。才由于uIP个协议栈专门断为嵌入式系删统而设计,脂它具有如下浩的优点:档代码非常少越,锤其协议栈代贡码不到6K万;趁占用的内存光数非常少,山RAM占用俭仅几百字节壳;涛其硬件处理挣层、协议栈艺层和应用层宵共用一个全搭局缓存区,拢不存在数据蒸的拷贝,且典发送和接收盒都是依靠这嫂个缓存区,厨极大的节省绪空间和时间垦。尾支持多个主夹动连接和被害动连接并发面;茶通用性强,辜移植起来基稳本不用修改海就可以通过后;志对数据的处询理采用轮循梯机制,不需责要操作系统童的支持。层次结构瞎uIP相当超于一个代码评库,通过一月系列的函数失实现与底层甲硬件和高层添应用程序的千通讯,对于仰整个系统来吉说它内部的莲协议组是透老明的,从而葱增加了协议挨的通用性。兰让uIP协议房栈与系统底珠层和高层应绒用之间的关衡系如图轮11器所示:应用程序应用程序UIP网卡驱动系统定时器应用层UIP协议栈硬件驱动图3-1膏实现设备驱匆动与UIP霞对接需要的扮7个接口程旺序茄,定义在蜻uip.h指:拉#defi指neui恒p_inp瞧ut()盖隐uip匠_proc陈ess(U则IP_DA尝TA)列#defi枪neui思p_per胃iodic猾(conn休)do固{uip母_conn扰=&u尺ip_co榜nns[c栋onn];钢\渠精缺鹅撇冲滩uip报_proc殖ess(U塘IP_TI在MER);瓣}wh锁ile(摆0)办#defi瓣neui贡p_con唯n_act朋ive(c安onn)稻(uip_旧conns杨[conn洞].tcp稍state穗flags贡!=U亿IP_CL伐OSED)情#defi臣neui钱p_per绸iodic抬_conn革(conn尸)do而{uip荣_conn倡=co伤nn;\粱铸谁卸缺吸奸版uip系_proc挪ess(U写IP_TI祖MER);纸}wh录ile(抛0)昌#defi宋neui弓p_pol裤l_con克n(con捆n)do曲{ui混p_con铺n=c粥onn;惹\绍演史怜搭税纽ui双p_pro蒜cess(缺UIP_P呀OLL_R粪EQUES评T);}裳whil映e(0)糟#defi色neui戴p_udp献_peri蝶odic(哈conn)弱do{奶uip_取udp_c棚onn=协&uip孩_udp_摧conns喷[conn裤];\凡仙牲贼脑三粱uip乖_proc归ess(U果IP_UD醒P_TIM惧ER);告}whi识le(0恭)臭#defi短neui吓p_udp捎_peri件odic_厘conn(裹conn)绍do{猫uip_崇udp_c销onn=假conn细;\孩亿妹斑旦熟直伐览uip_杏proce抵ss(UI毁P_UDP愚_TIME婆R);}沟whil顷e(0)惰还有一个变齐量,在接口俭中要用到:垫u8_t犹uip_b计uf[UI两P_BUF匀SIZE+宾2];开令对以上接口渣进行详细介烤绍娇:枯#defi祖neui童p_inp齐ut()秘处理输入数井据包。嘉当设备从网嗽络上接收到巾数据包时调熟用此函数。逢在调用此函割数之前,应服将接收到的狂数据包内容觉存入uip蒜_buf缓合冲区,并将偷其长度赋给蛋uip_l岗en.晃以太网内使菜用的uip凤需要用到A识RP协议,稻因此在调用厨此函数之前忍先调用ui备p的ARP宵代码。谈此函数返回柱时,如果系剪统有数据要即输出,京会直接将数泄据存入ui驱p_buf测,并将其长死度值赋给u丢ip_le击n。如果没座有数据要发桃送,则ui趋p_len挠值为0.吉使用举例如自下:欲uip_l诵en=思tapde离v_rea贡d(uip隙_buf)敬;亲i惑f(uip驼_len嗽>0){犹闸if(B库UF->t乒ype=绘=hto绝ns(UI鸽P_ETH竿TYPE_隐IP))弄誉{逆晌涌冬uip_a虚rp_ip杨in();射脊遮uip_酸input敌();稼黎昨if(u纤ip_le亮n>0割)幕抛{筐揉债牧uip_a脑rp_ou犁t();捏赤腾ta岔pdev_衣send(桥uip_b旋uf,ui曾p_len域);室饶秧}播舒}叫典else麦if(B浪UF->t夺ype=矮=hto填ns(UI饺P_ETH驳TYPE_收ARP))拢孙{叫碑捡uip_a宅rp_ar怖pin()决;林暖梳if(u磁ip_le屡n>0抱)牧宿{宾狂划话tapde箱v_sen夏d(uip撕_buf,射uip_l猛en);饺矛炉}疾毫}}想#defi肥neui消p_per哄iodic哑(conn伟)犬周期性的处赞理折一个连接,姓需用到该连淡接的连接号耀,conn太为将要蚁轮询禾的连接号。虏该函数对一虎个uip的柳TCP连接棉进行一些必惊要的周期性缠处理(如定庆时器、惹轮询圾等),它应趋该在周期性低uip定时止器期满消息沫到来时被调将用。每一个包连接都应该次调用该函数珍,不论连接泉是否打开。造该函数返回炸时,若缓冲悬区内有需要坏被发送出去老的数据包等极待处理,就折将uip_怜len的值熔置为大于零糊的数。以太件网内使用的呆uip需要仿用到ARP羽协议,因此测在调用谣驱动程序聪之前先调用较uip的A别RP疗代码uip腰_arp_趟out()坑,壳再调用设备垫驱动程序将基数据包发送掠出去。次使用举例如教下:真for(u泛int32洪_ti东=0;京i<U津IP_CO时NNS;脸i++)坝床{辱蝇纽封年uip_p两eriod运ic(i)杏;堡夏if诸(uip_之len>哲0)漂音{亮极素uip_a茶rp_ou夸t();革沸虏tapde养v_sen务d(uip纪_buf,杯uip_l菜en);剥查}窄跨}掀#defi甲neui糖p_con纤n_act晨ive(c寇onn)锣达#defi饼neui剥p_per水iodic滴_conn棋(conn漠)偏对一个连接旦进行周期性寨处理,需用柄到指向该连子接结构体的孟指针。誉该函数与u厌ip_pe显riodi滚c执行的操叨作是相同的翁,不同之处达在于传入的丈参数是一个煤指向uip阁_conn续结构体的指轮针。堡此函数可用未于对某个连累接强制进行土周期性处理轨。庸#defi茅neui锦p_pol侍l_con舌n(con痒n)洽请求对特定即连接进行轮宿询。严该函数功能寺与uip_奉perio丢dic()础相同,但是亮不执行任何镰定时器处理享。通过轮询管从应用程序股得到新数据桥。嚼#defi虑neui茶p_udp谣_peri如odic(锁conn)厌周期性处理锄连接号指定纯的连接。紧此函数基本喜上与uip五_peri之odic(慨)相同,区距别在于这里惠处理的是U盘DP连接。防其调用方式鸣也与uip妹_peri贸odic(洒)类似:纺for(i透=0;品i<食UIP_U伐DP_CO坚NNS;孩i++)览{洗及渡uip_u栗dp_pe著riodi戴c(i);限松if灶(uip_酸len>驳0){黎左才uip_a全rp_ou趟t();矮馆肝tapde导v_sen素d();即青}柳令}痛#defi看neui挂p_udp技_peri究odic_猎conn(形conn)美周期性处理惰一个UDP腊连接,需用诱到指向该连街接结构体的许指针。练此函数功能脾与uip_晒perio桑dic_c姨onn()确相同,只是昨用来处理的守是UDP连忙接。矮u8_t抚纸uip_b逐uf[UI应P_BUF虽SIZE+殃2];迫uip数据科包缓冲区鱼,冤长度固定始。桨U竿ip_bu健f数组用于绪存放接收、甩发送的数据利包。设备驱甲动程序应将千接收到的数化据放入缓冲老区。发送数串据时,设备标驱动程序从顷缓冲区中读谎取链路层的晒首部和TC隔P/IP首粥部。链路层跃头的大小在飞UIP_L赌LH_LE帽N中定义。吃注:码应用程序数终据无需放入蛾这个缓冲区狐中,而是需驱要设备驱动值程序从齐uip_a屡ppdat裹a税指针所指的伴地方读取数惹据。查u16_t肺uip念_len;史全局变量,世uip_b三uf粪缓冲区中数跃据包的长度叶。茄当网络设备爱驱动调用u过ip输入函陆数时,ui眉p_len乓要被设为传杆入数据包的及大小。驰当发送数据举包时,设备支驱动程序通清过这个变量蠢来确定要发超送的数据包缝的大小。恐应用层要调踏用的函数,拼包括一些宏燃定义与函数谁,定义在干uip.h联:宏定义:悲#defi文neui尸p_out践stand梢ing(c息onn)痰((con敬n)->l筝en)证#defi握neui晋p_dat别alen(菠)珠ui竿p_len浅#defi奇neui读p_urg额datal引en()堵ui钟p_urg跨len宝#defi驼neui芒p_clo臭se()刃华(u啄ip_fl陈ags=吼UIP_屡CLOSE典)范#defi冰neui盾p_abo赞rt()摇拣(u羡ip_fl贯ags=理UIP_涌ABORT征)缓#defi近neui钩p_sto绍p()岂钻(u漠ip_co搭nn->t科cpsta紫tefla晚gs|=工UIP_舰STOPP没ED)文#defi异neui席p_sto夜pped(似conn)焦((蚕conn)熊->tcp胃state胸flags态&UI崖P_STO神PPED)差#defi和neui三p_res改tart(拿)勇五do{苍uip_f窜lags掘|=UI皮P_NEW着DATA;瑞\李厅妻狮钳闲uip_c格onn->怪tcpst兆atefl骡ags&皂=~UI馋P_STO苍PPED;搞\政致本贿柱览}whi搭le(0)注#defi酸neui究p_udp歼conne伯ction烈()(u砖ip_co秋nn==伐NULL慕)葵#defi鸦neui茧p_new溜data(覆)(杰uip_f叹lags醋&UIP伸_NEWD奋ATA)杀#defi四neui但p_ack攀ed()筒(ui事p_fla恩gs&厌UIP_A捞CKDAT鸦A)色#defi缝neui肯p_con喘necte英d()(甘uip_f察lags田&UIP搂_CONN膊ECTED梢)怠#defi虹neui姑p_clo同sed()布(四uip_f向lags收&UIP帜_CLOS穷E)返#defi葡neui扣p_abo腰rted(不)妻(uip_嘴flags筋&UI恩P_ABO竹RT)务#defi害neui岔p_tim虫edout输()贴(uip宗_flag犁s&U惨IP_TI纪MEDOU凝T)隙#defi粗neui钉p_rex挂mit()辣级(uip_名flags圆&UI绑P_REX主MIT)赴#defi化neui顾p_pol必l()蝴拌(uip_恨flags特&UI铅P_POL焰L)休#defi亏neui买p_ini晌tialm惭ss()咬敌四(ui异p_con剖n->in捏itial堵mss)茶#defi斥neui师p_mss蛙()违反为(uip_柏conn-傍>mss)绳#defi逆neui仗p_udp名_remo贞ve(co柴nn)(吃conn)话->lpo毛rt=碰0基#defi带neui逐p_udp四_bind泻(conn榜,por炼t)(c话onn)-抓>lpor苍t=p眉ort增#defi茶neui纯p_udp情_send弃(len)贱uip_则send(雄(char陷*)ui强p_app浑data,浩len)函数:矩void月uip_l志isten测(u16_等tpor糟t);荐void政uip_u右nlist宽en(u1纱6_tp竖ort);捆struc泉tuip址_conn绸*uip站_conn退ect(u铜ip_ip蛙addr_亚t*ri姜paddr气,u16晃_tpo膊rt);应void鸟uip_s荣end(c敬onst锈void职*data糟,int锁len)显;宅struc渠tuip庙_udp_印conn莫*uip_历udp_n贞ew(ui执p_ipa致ddr_t咏*rip营addr,爆u16_贿trpo苍rt);丢对以上函数黎进行详细介奴绍:紧#defi劫neui努p_out滩stand致ing(c聪onn)品检查一个连授接是否有特哲殊的(例如递,未答复的比)数据。穗conn为证指向该连接摄结构体的指俯针。炮#defi织neui例p_dat烟alen(叔)跪uip_a借ppdat猪a缓冲区中冰,当前可用法的传入数据桨的长度。必廊须先调用u俘ip_da降ta()查对明是否有当封前可用的传驼入数据。异#defi蒜neui粪p_urg浩datal脱en()冲所有到达连亲接的缓冲区剖外的(紧急截数据)数据惑长度。要使仅用此宏,应躺配置UIP千_URGD士ATA宏为融真。令#defi父neui训p_clo沙se()狭此函数会以您一种谨慎的练方式堵关闭当前傅连接。牲#defi锁neui趴p_abo虽rt()砌中防止(重置)触当前连接,唤多用于出现功错误导致无屡法使用ui哄p_clo航se()的僻场合。委#defi预neui丢p_sto臣p()柔告诉发送主磨机停止发送棍数据。该函红数会关闭接酒收者的窗口鱼,以停止从素当前连接接弦收数据。蛛#defi浆neui西p_sto译pped(斩conn)偷找出当前连迫接先前是否抽已经被ui膏p_sto诉p()停止孙了。赶#defi枪neui爪p_res狮tart(舟)赖如果连接先利前被uip挣_stop诚()停止了腹,该函数会邀重启连接。番接收者的窗邀口会被重新翁打开,并从毛当前连接开谦始接收数据察。腐#defi蛮neui萄p_udp言conne勤ction取()扶检查当前连枣接是否是一拨个UDP连笔接。光#defi返neui顿p_new泪data(希)叔如果uip淘_appd忠ata指针崖所指之处有惩新的应用数芳据,就得到径一个非零值蓄。数据的大狭小可通过u经ip_le宿n得到。步#defi拖neui送p_ack荷ed()热若先前发送丧的数据得到太了远程主机主的确认信息歪,就得到一哭个非零值。驶这表示应用寨程序可以发具送新数据了抓。恐#defi馅neui苍p_con个necte始d()肾如果当前与胃远程主机的趟连接建立,榜则得到一个吊非零值。这勉包括两种情准形:连接被跨主动打开(格uip_c嫌onnec柄t()),声或者被动打继开(uip崭_list切en())脑。蹦#defi立neui山p_clo仗sed()创如果连接被泪远程主机关酒闭,则返回掩一个非零值案。这时应用伙程序会做一轻些必要的清境理工作。辨#defi原neui均p_abo樱rted(间)隙如果连接被雾远程主机中拢止(重置)发,则返回一棋个非零值。未#defi堤neui纵p_tim棵edout乐()想如果当前连甲接是因为多并次重传而超武时中止,则瓜返回一个非喷零值。共#defi士neui枕p_rex块mit()匠如果先前发全送的数据在榨网络中丢失房,应用程序赚需重传时,改返回一个非章零值。应用氏程序需调用埋uip_s躁end()仓函数来重传雾与上一次所伪发送的完全诸一致的数据望。时#defi咬neui优p_pol曾l()光解决连接是捷否由uip拔轮询的问题嘉。横如果应用程母序被调用的旱原因是当前耍连接因空闲折太久而被u秤ip轮询,队则返回一个鸡非零值。该幸轮询事件可皆以被用来发制送数据,而载无需等待远牧程主机发送卷数据。康#defi差neui骗p_ini艇tialm挪ss()壮获得当前连征接的初始最毕大报文段长轻度(MSS损)。匙#defi员neui氏p_mss吃()虾获得当前连皇接所能发送绳的最大报文姿段长度。该认长度是由接短收者的窗口们大小和连接匆的MSS计粗算出来的。纹#defi时neui姓p_udp衔_remo头ve(co胳nn)狗移除一个U窄DP连接。唯conn指锡向该连接的也uip_u稳dp_co茶nn结构体如。变#defi赢neui佣p_udp难_bind必(conn桂,por朋t)卖绑定一个U撑DP连接到宇本地端口。柴conn指米向该连接的浸uip_u共dp_co弯nn结构体担,唉port为业本地端口号话,以网络字均节序。把#defi吓neui么p_udp诞_send投(len)羞在当前连接掏上发送长度沸为len的兄UDP数据狱包。该函数俘只有在答复谣一个UDP增事件(轮询却或有新数据常)时才可被眯调用。数据归必须提前放镰入uip_牧buf缓冲屯区中uip坊_appd斜ata指针刘指向的地方阔。粒void量uip_l石isten喇(u16_蜘tpor腔t);萄开始监听指详定的端口。稍由于por终t应该为网茧络字节序,篇所以需要用起到转换函数遵HTONS杂()或者h坦tons(绿)。步void乘uip_u累nlist朋en(u1嚷6_tp谈ort);届停止监听指剩定端口。穴struc互tuip迟_conn拍*uip知_conn廊ect(u智ip_ip估addr_贯t*ri职paddr寄,u16两_tpo线rt);造使用TCP品协议连接到魄远程主机。极此函数用来罗与特定主机予上的特定端择口建立新的下连接,它分谁配一个新的律连接标识符败,并将连接烟的状态转为霜SYN_S堆ENT,将找重传计时器精设置为0.词当该连接下性次被周期性怪处理时,将辅会发送一个扒TCP的备SYN报文藏段。这个过流程一般在u庸ip_co洞nnet(婚)被调用后芦0.5秒后通完成。亭该函数只有断在主动打开眼配置项UI闹P_ACT回IVE_O站PEN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石棉制品项目投资与风险评估考核试卷
- 砼结构施工中的信息化技术应用考核试卷
- 那一幕初二语文作文
- 家居纺织品的品牌形象塑造与市场竞争力考核试卷
- 电动机制造中的智能物流系统应用考核试卷
- 精卫填海初二语文作文
- 糖批发市场竞争力分析考核试卷
- 毛皮制品加工职业健康安全管理考核试卷
- 上海高三语文秋天作文
- 管道连接技术考核试卷
- 《汽车专业英语》2024年课程标准(含课程思政设计)
- 小学数学二年级第二学期口算计算共3031道题
- 网络安全知识基础培训课件
- 宿舍课件教学课件
- 电磁辐射危害与预防课件
- 律师聘用合同证书协议书
- 鼻窦手术后护理查房
- HIV阳性孕产妇全程管理专家共识(2024年版)解读
- 2024年上海客运驾驶员从业资格证考试
- 初二地理生物会考动员家长会发言稿
- 混凝土结构后锚固技术规程
评论
0/150
提交评论