深入理解TCP IP协议栈_第1页
深入理解TCP IP协议栈_第2页
深入理解TCP IP协议栈_第3页
深入理解TCP IP协议栈_第4页
深入理解TCP IP协议栈_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TCP/IP协议并不是单纯的俩个协议,而是一个很大的协议栈的总称。TCP/IP协议栈是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。下面我们来看TCP/IP的四层结构。网络协议有OSI七层协议和TCP/IP四层协议,还有一个五层协议,其实四层协议可以看做是七层协议的简化版。一、TCP/IP整体概念1.1物理介质物理介质就是把电脑连接起来的物理手段,常见的有光纤、双绞线,以及无线电波,它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽、速率、传输距离以及抗干扰性等等。TCP/IP协议栈分为四层,每一层都由特定的协议与对方进行通信,而协议之间的通信最终都要转化为0和1的电信号,通过物理介质进行传输才能到达对方的电脑,因此物理介质是网络通信的基石。下面我们先通过一张图先来大概了解一下TCP/IP协议的基本框架以及数据的处理流程:当通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。网络通信就好比送快递,商品外面的一层层包裹就是各种协议,协议包含了商品信息、收货地址、收件人、联系方式等,然后还需要配送车、配送站、快递员,商品才能最终到达用户手中。一般情况下,快递是不能直达的,需要先转发到对应的配送站,然后由配送站再进行派件。配送车就是物理介质,配送站就是网关,快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址。快递员负责把包裹转发到各个配送站,配送站根据收获地址里的省市区,确认是否需要继续转发到其他配送站,当包裹到达了目标配送站以后,配送站再根据联系方式找到收件人进行派件。1.2链路层网络通信就是把有特定意义的数据通过物理介质传送给对方,单纯的发送0和1是没有意义的,要传输有意义的数据,就需要以字节为单位对0和1进行分组,并且要标识好每一组电信号的信息特征,然后按照分组的顺序依次发送。以太网规定一组电信号就是一个数据包,一个数据包被称为一帧,制定这个规则的协议就是以太网协议。以太网规协议定,接入网络的设备都必须安装网络适配器,即网卡,数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每块网卡的身份标识,就如同我们身份证上的身份证号码,具有全球唯一性。有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。所以链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。1.3网络层对于上面的过程,肯定会产生下面几个疑问:1.发送者如何知道接收者的MAC地址?

2.发送者如何知道接收者和自己同属一个子网?

3.如果接收者和自己不在同一个子网,数据包如何发给对方?为了解决这些问题,网络层引入了三个协议,分别是IP协议、ARP协议、路由协议。IP协议制定了IP地址来判断俩个主机是否属于同一个子网。ARP协议根据IP地址获取MAC地址。路由协议根据信道情况,选择并设定路由,以最佳路径来转发数据包。所以,网络层的主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由。1.4传输层链路层定义了主机的身份,即MAC地址,而网络层定义了IP地址,明确了主机所在的网段,有了这两个地址,数据包就从可以从一个主机发送到另一台主机。但实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序(进程)接收。而每台电脑都有可能同时运行着很多个应用程序(进程),所以当数据包被发送到主机上以后,是无法确定哪个应用程序(进程)要接收这个包。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。1.5应用层理论上讲,有了以上三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差。因此,应用层定义了各种各样的协议来规范数据格式,常见的有HTTP、FTP、SMTP等。1.6四层协议整体流程链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据;网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发;传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序;应用层:定义数据格式,并按照对应的格式解读数据。用一句话来概括就是:当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。二、传输层传输层(TransportLayer)是ISOOSI协议的第四层协议,实现端到端的数据传输。该层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。当网络层服务质量不能满足要求时,它将服务加以提高,以满足高层的要求;当网络层服务质量较好时,它只用很少的工作。传输层还可进行复用,即在一个网络连接上创建多个逻辑连接。传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控、分段/重组和差错控制。一些协议是面向链接的。这就意味着传输层能保持对分段的跟踪,并且重传那些失败的分段。

传输层作用传输层实现应用进程间的端到端(end-to-end)通信向应用层提供通信服务多路分解与复用多路复用:所有应用进程的数据通过传输层传输到IP层;多路分解:传输层收到的数据交付给相应的应用进程。2.1用户数据报协议UDP端到端的、尽力而为的、无连接的数据报传输服务1.无连接的2.尽最大努力交付,即不保证可靠交付3.面向报文的(在IP的功能上简单扩展了端到端)4.没有拥塞控制5.支持一对一、一对多、多对一和多对多的交互通信(需要组播的通信都是建立在UDP之上)2.2传输控制协议TCP端到端的、可靠的、面向连接的字节流服务a).面向连接:先建立逻辑连接,进行双向数据流传输,通信结束后撤销连接b).面向字节流c).点对点的全双工通信d).可靠传输:对一个连接上传输的每个字节编号,通过接收确认和重传来保证可靠传输c).流量控制:防止发送方发出的数据超出接收方的接收能力。多路复用:源、目的端口连接管理:序号、确认号、SYN、FIN可靠传输:序号、确认号流量控制:接收窗口拥塞控制:未在TCP首部中体现(序号、确认号、接收窗口)。2.3连接管理每条TCP连接是一对点到点的字节流每条TCP连接者两个端点,即套接字(sokect)={IP:port}每条TCP连接由两个端点唯一标识,TCP连接={socket1,socket2}={{IP1:port1},{IP2:port2}}TCP连接有3个阶段:连接建立、数据传输、连接释放1)TCP连接建立的目的①使通信双方确知对方的存在

②双方确定自己的初始序列号,并通知对方

③允许双方协商一些参数(最大报文长度、窗口大小等)

④对传输实体资源进行分配2)TCP连接建立的方式采用客户端服务器方式(C/S),主动发起连接建立的应用进程叫做客户端,被动等待连接建立的叫服务器端。3)连接建立(三次握手)①服务器进程B被动打开连接,进入LISTEN(收听)状态,等待客户端发出请求

②客户进程A主动打开连接,向B发送连接请求报文段(报文段不挟带数据),SYN=1,序号=x,进入SYN-SENT(同步已发送)状态

③服务器进程B收到请求后,向A发送确认报文段(报文段不挟带数据),SYN=1,ACK=1,确认号=x+1,序号=y,进入SYN-RCVD(同步收到)状态

④客户进程A收到确认后,向B发送确认报文段(报文段可以携带数据,不携带数据时不消耗序号,下一个序号依然是x+1),ACK=1,确认号=y+1,序号=x+1,进入ESTABLISHED(已建立连接)状态,B收到确认后,也进入ESTABLISHED状态为什么A需要向B发送最后一个确认报文段:为了防止“已失效的连接请求报文段”突然又传到B发生错误,以至于B一直等待A发送数据,B的资源被浪费。4)连接释放(四次挥手)①A,B都处于ESTABLISHED状态;

②客户进程A主动关闭连接,向B发送连接释放请求报文段(报文段不挟带数据),FIN=1,序列号=u,进入FIN-WAIT-1(终止等待1)状态;

③B收到A的连接释放报文段后,应答确认,ACK=1,确认号=u+1,序号=v,进入CLOSE-WAIT(关闭等待)状态,B仍然可以向A发送数据,A进入FIN-WAIT-2(终止等待2)状态;

④若B已经没有向A的数据,其应用进程通知TCP连接释放,B向A发送连接释放报文段,FIN=1,ACK=1,确认号=u+1,序号=w,进入LAST-ACK(最后确认)状态;

⑤A收到B的链接释放报文段后,应答确认,ACK=1,确认号=w+1,序号=u+1,进入TIME-TIME-WAIT(时间等待)状态,B收到A的确认后,进入CLOSED状态A必须经过时间等待计时器设置的时间2MSL(默认2分钟)后,进入CLOSED状态:确保A发送的最后一个ACK报文段能够到达B;防止“已失效的连接请求报文段”出现在本连接中。可靠传输发送方的TCP:维护一个发送缓冲区维护3个指针:LastByteAcked、LastByteSent、LastByteWritten发送窗口=min(通知窗口,拥塞窗口)累积确认(CumulativeACK):对按序到达的最后一个报文段进行确认选择确认(SelectiveACK):确认接收到的不连续的数据块的边界(使用首部的SACK选项,不影响确认号字段的使用)流量控制目的:为了防止发送方给慢接收方发数据造成接受崩溃,缓冲区溢出原理:接收方通知发送方自己的接受窗口大小,发送方的发送窗口≤接收方的接受窗口

问题:B向A发送了零窗口报文段后,B的接受缓存有了一些存储空间,于是B向A发送了rwnd=400的报文段,然而报文段在传送过程中丢失,这样A一直等待B发送的非零窗口通知,B一直等待A发送数据,从而形成死锁局面。解决:TCP为每一个连接设置一个持续计时器,只要TCP链接一方收到零窗口通知,就启动持续计时器,计时器到期,发送零窗口探测报文段,而对方就在确认这个探测报文段时给出现在的窗口值,①如果窗口仍然是零,那么重新设置持续计时器;②否则死锁的僵局就可以打破。2.4自适应重传1)超时重传报文段的往返时间:RTT加权平均往返时间:RTTSRTT的偏差加权平均值:RTTD超时重传时间:RTORTTS=(1-α)*RTTS+α*新的RTT样本值(α一般为1/8)RTTD=(1-β)*RTTD+β*|RTTS-新的RTT样本值|(β一般为1/4)RTO=RTTS+4*RTTDKarn算法:①每次超时重传一个报文段时,停止计算新RTT样本值②每次超时重传一个报文段时,就把超时重传时间RTO增大y倍(一般为2倍)③当不发生报文段重传时,才计算RTTS和超时重传时间RTO2)快速重传原因:超时重传作为TCP最基本的重传机制,效率较低。超时的粗粒度实现方法导致连接在等待一个定时器超时时,很长一段时间连接无效。基本思想:①接收方:当报文段到达,立刻回复ACK,即使该序号已被确认过②发送方:收到一个重复ACK(同一个确认的再一次重传称为重复确认),就知道接收方必定收到乱序到达的报文段,表明其前面的分组可能丢失。收到3个重复ACK时,立刻触发重传。2.5拥塞控制1)窗口大小MaxWindow=min(cwnd,AdvertisedWindow)拥塞窗口cwnd(CongestionWindows):拥塞控制算法决定,可以同时发出的最大字节数以防止造成网络拥塞通知窗口(AdvertisedWindow):接收方决定,可以同时发出的最大字节数以防止超出接收方的接收能力。2)拥塞控制算法①慢启动把初始拥塞窗口cwnd设置为不超过2至4个SMSS(最大报文段长度),在每收到一个对新的报文段的确认后,把cwnd增加1个SMSS的数值数(每经过一个传输轮次,cwnd就加倍)设置一个慢开始门限ssthresh当cwnd<ssthresh时,使用慢开始算法当cwnd≥ssthresh时,使用拥塞避免算法。②拥塞避免(加法增大):每经过一个往返时间RTT把发送方的cwnd加1,使得cwnd慢性增加③快重传(乘法减小):收到3个重复ACK立即触发重传④快恢复(在快重传之后)ssthresh减小为当前cwnd的一半:ssthresh=cwnd/2新拥塞窗口cwnd=新的ssthresh执行拥塞避免(AIMD),使cwnd缓慢线性增大三、应用层3.1概念5层因特网协议栈:应用层->传输层->网络层->数据链路层->物理层7层OSI参考模型:应用层->表示层->会话层->传输层->网络层->数据链路层->物理层为什么我们要在计算机网络中分层次?因为如果两台计算机能够相互通信的话,实际实现起来是非常困难操作的。我们分层的目的就是为了将困难的问题简单化,并且如果我们分层了,我们在使用的时候就可以仅仅关注我们需要关注的层次,而不用理会其他层如果需要改动设计的时候,我们只需要把变动的层替换即可,并不用涉及到其他的层次。这与我们程序设计中的低耦合是一个概念。每层作用如下:物理层:通过媒介传输比特,确定机械及电气规范(比特Bit),通过电频的高低来传输0和1这样的电信号数据链路层:将比特组装成帧和点到点的传递(帧Frame),将无规则的0和一同通过一套规则来分组传输,于是出现了以太网协议。以太网协议规定:一组电信号构成一个数据包,这个数据包称为帧,每一个帧由标头(Head)和数据(Data)两部分组成,标头部分的大小为18字节网络层:负责数据包从源到宿的传递和网际互连(包PackeT)传输层:提供端到端的可靠报文传递和错误恢复(段Segment)会话层:建立、管理和终止会话(会话协议数据单元SPDU)表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)应用层:允许访问OSI环境的手段(应用协议数据单元APDU)每一层的协议如下:物理层:RJ45、CLOCK、IEEE802.3(中继器,集线器,网关)数据链路:PPP、FR、HDLC、VLAN、MAC(网桥,交换机)网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、(路由器)传输层:TCP、UDP、SPX会话层:NFS、SQL、NETBIOS、RPC表示层:JPEG、MPEG、ASII应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS3.2DNS域名系统NS(DomainNameSystem)提供了什么服务?一个由分层的DNS服务器(DNSServer)实现的分布式数据库使得主机能够查询分布式数据库的应用协议DNS协议是运行在UDP之上,用53号端口分布式、层次数据库:根DNS服务器:全球有四百多个根DNS服务器,由13个不同的组织管理,根服务器提供TLD服务器的IP地址。顶级域(TLD)DNS服务器:顶级域(如:com、org、net和org)和所有的国家顶级域(uk、fr、cn、jp)都有TLD服务器。TLD服务器提供了权威DNS服务器的IP地址权威DNS服务器:再因特网上具有公共可访问的主机(就是你的服务器主机地址),权威DNS服务器将主机名映射为IP地址本地DNS服务器:不属于DNS服务器的层次结构,但是也是必不可少的。当我们发出DNS请求时,该请求先被发送到本地DNS服务器,它起着代理的作用域名解析过程:假设我们(主机是)获取的IP地址,同时本地DNS服务器为。首先我们的主机向本地DNS服务器发送一个DNS查询报文(报文包含被查询的主机名),然后本地DNS服务器将该报文转发到根DNS服务器,根DNS服务器发现了com前缀,然后向本地DNS服务器返回com的顶级域(TLD)DNS服务器的IP地址列表。本地DNS服务区再向这些TLD服务器发送查询报文,TLD服务器注意到了前缀,然后将负责的权威DNS服务器的IP地址返回给本地DNS服务器,最后,本地DNS服务器向该IP地址进行发送报文查询,权威DNS服务器返回了的IP地址给本地DNS服务器,本地DNS服务器再将该DNS发送到我们主机,我们开始访问该IP地址。递归查询过程如下:迭代查询过程如下:理论上来讲,任何DNS查询既可以是递归也可以是迭代的。在实践中,查询通常是从请求主机到本地DNS服务器的查询时递归的,其余查询时迭代的主机向本地域名服务器的查询一般都是采用递归查询:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文。本地域名服务器向根域名服务器的查询通常是采用迭代查询:当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。3.3FTP协议以及端口文件传输协议FTP(FileTransferProtocol)是世界上使用最广泛的文件传输协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限网络环境下复制文件的复杂性:计算机存储数据的格式的不同文件的目录结构和文件命名的规定不同对于相同的文件存取功能,操作系统使用的命令不同访问控制方法不同因此,FTP协议出现了。FTP协议连接过程:打开熟知端口(端口号为21),使客户进程能够连接上等待客户进程发出连接请求启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接由于FTP使用了两个不同的端口号,所以数据连接(20)与控制连接(21)不会发生混乱FTP是使用了两个TCP连接的:使协议更加简单和跟容易实现在传输文件时还可以利用控制连接(如:客户发送请求终止传输)3.4DHCP动态主机配置协议DHCP:DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。互联网广泛使用的动态主机配置协议DHCP(DynamicHostConfigurationProtocol)提供了即插即用连网(plug-and-playnetworking)的机制。DHCP是使用UDP协议工作,他的用途如下:为内部网络或网络服务供应商自动分配IP地址为用户或者内部网络管理员作为对所有计算机做中央管理的手段为内部网络用户接受IP租约并不是每个网络上都有DHCP服务器,这样会使得DHCP服务器的数量太多了。现在是每个网络至少有一个DHCP中继代理,他配置了DHCP服务器的IP地址信息在生活中,DHCP必不可少,为我们带来了便利,当通过WiFi连上一个陌生的子网,但是我们并没有做重新为主机配置IP地址的工作,这样子就可直接上网!假如没有DHCP协议的帮助:而在DHCP协议的支持下:DHCP工作流程:DHCP服务器管理着一个包含一系列IP地址的地址池每当一台新的主机加入时,DHCP服务器就从其当前可用地址池中分配一个任意的地址给它而每当一台主机离开的时候,其IP地址就被回收到地址池中3.5简单网络管理协议SNMP简单网络管理协议SNMP(SimpleNetManageProtocol)是TCP/IP协议簇的一个应用层协议,网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行性能,服务质量等。网络管理常简称为网管。含义:网络管理协议简称为网管协议。需要注意的是,并不是网管协议本身来管理网络。网管协议是管理程序和代理程序之间进行通信的规则。CS模式:管理程序和代理程序按客户服务器方式工作。管理程序运行SNMP客户程序,向某个代理程序发出请求(或命令),代理程序运行SNMP服务器程序,返回响应(或执行某个动作)。功能:SNMP最重要的指导思想就是要尽可能简单。SNMP的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。过程:整个系统必须有一个管理站。管理进程和代理进程利用SNMP报文进行通信,而SNMP报文又使用UDP来传送。若网络元素使用的不是SNMP而是另一种网络管理协议,SNMP协议就无法控制该网络元素。这时可使用委托代理(proxyagent)。委托代理能提供如协议转换和过滤操作等功能对被管对象进行管理。SNMP定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。SNMP负责读取和改变这些数值。3.6电子邮件协议SMTP、POP3、IMAPSMTP是因特网电子邮件中主要的应用层协议,只用TCP可靠数据传输服务,SMTP的端口号是25号。因特网电子邮件的主要组成部分:用户代理(useragent)邮件服务器(mailserver)简单邮件传输协议(SimpleMailTransferProtocol)邮件发送过程:从发送的用户代理开始,传输邮件到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。如果用户要读取该邮件时,使用用户名和口令来鉴别用户。POP3(第三版的邮局协议PostOfficeProtocol-Version3):POP3是一个极为简单的邮件访问协议(由于其简单,所以权限有限)当用户打开了一个到邮件服务器的端口110上的TCP连接后,POP3就开始工作了,按照三个阶段:特许、事务处理以及更新IMAP(因特网邮件访问协议InternetMailAccessProtocol):允许用户代理获取报文某些部分的命令IMAP协议为用户提供了创建文件夹及移动文件的命令注意:不要将邮件读取协议POP或IMAP与邮件传送协议SMTP弄混。发信人的用户代理向源邮件服务器发送邮件,以及源邮件服务器向目的邮件服务器发送邮件,都是使用SMTP协议。而POP3协议或IMAP协议则是用户从目的邮件服务器上读取邮件所使用的协议。四、网络层协议IP协议属于网络层协议,所有的TCP,UDP,ICMP,IGMP数据都通过IP数据报传输。IP提供了一种不可靠,无连接的数据包交付服务。依赖其他层的协议进行差错控制。不可靠:IP数据报不保证能成功的到达目的地,如果出现错误则选择丢弃该数据,然后发送ICMP消息报给信源端无连接:IP不提供任何后续数据报的状态信息,每个数据报处理都是独立的。如果一个信源发送了连续的两个数据报,每个数据报选择独立的路由,两个数据可能不同时到达。IP通信双方都不长久地维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址。4.1ipv4数据报1.版本号:占四位,就是IP协议的版本,通信双方的IP协议必须要达到一致,IPv4的版本就是4.2.首部长度:占四位,因为长度为四比特,所以首部长度的最大值为1111,15,又因为首部长度代表的单位长度为32个字(也就是4个字节),所以首部长度的最小值就是0101,当然,也确实如此,大部分的ip头部中首部字节都是0101.也就是5*4=20个字节,如果是最大值15的话,ip首部的最大值就是60个字节,所以记好了,ipv4首部长度的最大值就是60,当然当中我们又能发现,IPv4的首段长度一定是4字节的整数倍,要是不是怎么办呢?别急,后面的填充字段会自动填充补齐到4字节的整数倍的。3.区分服务:这个没有什么用处,也没有什么好讲的了,只要自动这玩意占八位,一个字节就可以了。4.总长度:占16位,这个的意思就是ip数据报中首部和数据的总和的长度,因为占16位,所以很好理解,总长度的最大值就是2的16次方减一,65535,这玩意也对应着还有一个很简单的概念,最大传输单元mtu,意味着一个IP数据报的最大长度就只能装下65535个字节,要是传输的长度超过这个怎么办,很简单,分片。5.标识:占16位,标识这玩意很好理解,IP在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个标识并不是平常的序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报。6.标志:占三位,一般有用的是前两位,最低位叫做MF,MF=1表示后面还有若干个数据报,MF=0表示这已经是最后一个数据报了。中间位叫做DF,DF表示不能进行分片,DF=0才可以进行分片操作。7.片偏移:占13位,片偏移就是,在原来的数据报分片以后,该片在原分组中的相对位置,片偏移中的基本单位是8字节,所以,也就是说,只要是分片,每个分片的长度都是8字节的整数倍,最后一个分片不够八字节的一样是填充。8.生存时间ttl:占8位,(timetolive),表明数据报在网络中的寿命,这个值被设定成跳数,顾名思义,就是这个数据报可以经过多少个路由器的数量,每经过一个路由器,该值就减一,减到为零的时候就被抛弃,显而易见,这个跳数的最大值就是2的8次方减一,255.9.协议:就是用来指明数据报携带了哪种协议,占8位。10.首部效验和:占16位,这个字段用来效验数据报首段,下面给出简单的计算方法:首先在发送端的时候,将效验和全部置为0,然后把数据报首段数据全部进行反码相加,得到的值为效验和,放入首段效验和里面,然后接收端将数据报首段数据和效验和一起全部反码相加,最后若是得到零,则保留,若是不为零,则说明数据报在传输的过程中发生了改变,则丢弃该数据报。11.IP源地址:占32位,将IP地址看作是32位数值则需要将网络字节顺序转化位主机字节顺序。转化的方法是:将每4个字节首尾互换,将2、3字节互换。12.目的地址:也占32位,转换方法和来源IP地址一样。13.选项:可变长的可选信息,最多包含40字节。选项字段很少被使用。可用的IP可选项有:a.记录路由:记录数据包途径的所有路由的IP,这样可以追踪数据包的传递路径b.时间戳:记录每个路由器数据报被转发的时间或者时间与IP地址对,这样就可以测量途径路由之间数据报的传输的时间c.松散路由选择:指定路由器的IP地址列表数据发送过程中必须经过所有的路由器d.严格路由选择:数据包只能经过被指定的IP地址列表的路由器e.上层协议(如TCP/UDP)的头部信息13.到了可变部分IPv4的头部基本上就已经讲完了,增加头部的可变选项实际上就是增加了数据报的功能,可变选项在实际上是很少用到的。4.2分片当IP数据报的长度超过帧的MTU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且可能在传输过程中多次分片,但只有在最终的目标机器上,这些分片才会被内核中的IP模块重新组装。IP头部中的如下三个字段给IP的分片和重组提供了足够的信息:数据报标识、标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移。并且除了最后一个分片外,其他分片都将设置MF标志。此外,每个分片的IP头部的总长度字段将被设置位该分片的长度。4.3IP路由路由是什么:我们知道,IP地址是网络世界里的门牌号。你可以通过IP地址访问远在天边的网站,那么数据是如何到达网站的呢?靠的就是路径上每个节点的路由。路由,简单的说就是指导IP报文该去哪的指示牌。一般说来,主机会在以下两个时机进行路由查询1.收到报文时,查询路由决定是上送本机(LOCALIN),或者从哪个出接口转发(FORWARD)2.本机发送报文时,查询报文出接口注意,转发需要开启net/ipv4/ip_forward路由表长什么样以一个典型的主机为例,tristan有一个外部网卡enp1s0和一个内部还回网卡lo。通过route-n我们可以看到主机上简要的路由表信息(当然通过iproute也可以),那么上面的路由信息中的每一表项代表什么意思呢?如果报文的目的IP地址在/24这个网段,那么它应该从enp1s0进行转发。如果报文的目的IP地址在/8这个网段,那么它应该从enp1s0进行转发。其他情况下(/0),报文从enp1s0转发,下一跳IP地址是544.4IP转发当主机收到一个数据报时,首先检查目的地址:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论