IP协议

IP协议

什么是IP:
1、Internet体系结构
一个TCP/IP互联网提供了三组服务。最底层提供无连接的传送服务为其他层的服务提供了基础。第二层一个可靠的传送服务为应用层提供了一个高层平台。最高层是应用层服务。
2、IP协议: 这种不可靠的、无连接的传送机制称为Internet协议。
3、IP协议三个定义:
  (1)IP定义了在TCP/IP互联网上数据传送的基本单元和数据格式。
  (2)IP软件完成路由选择功能,选择数据传送的路径。
  (3)IP包含了一组不可靠分组传送的规则,指明了分组处理、差错信息发生以及分组的规则。
4、IP数据包:联网的基本传送单元是IP数据包,包括数据包头和数据区部分。
5、IP数据包封装:物理网络将包括数据包包头的整个数据包作为数据封装在一个帧中。
6、MTU网络最大传送单元:不同类型的物理网对一个物理帧可传送的数据量规定不同的上界。
7、IP数据包的重组:一是在通过一个网络重组;二是到达目的主机后重组。后者较好,它允许对每个数据包段独立地进行路由选择,且不要求路由器对分段存储或重组。
8、生存时间:IP数据包格式中设有一个生存时间字段,用来设置该数据包在联网中允许存在的时间,以秒为单位。如果其值为0,就把它从互联网上删除,并向源站点发回一个出错消息。
9、IP数据包选项:
IP数据包选项字段主要是用于网络测试或调试。包括:记录路由选项、源路由选项、时间戳选项等。
路由和时间戳选项提供了一种监视或控制互联网路由器路由数据包的方法。
就简单的通俗来讲IP就是相当于你寄信是所写的收件人的地址所谓的IP协议就我理解而言就是你填下收件人地址的格式国家/省份/市区/县这些
就目前而言IP结构分为两种IPV4,和IPV6

IPV4

IPV4其长度通常为20字节,除非含有可变长的选项部分
这里写图片描述
4位版本号(versio):指定的IP协议版本,IPV4其值就位4,IPV4其扩展协议(SIP,PIP)其版本号就不同,但是其
头部结构是相同的。
4位头部长度(header length):标识该该IP头部有多少字节基础单位为(4 byte),其大小为4byte,所以IP头部最长为60byte。
8位服务类型(Type of service ,TOS):包括一个3位的优先权字段(现在已经被忽略),4位的TOS字段和1位保留字段(必须置0)。4位的TOS字段分别表示:最小延时,最大吞吐量,最高可靠性和最小费用。其中最多有一个能置为1,应用程序应该根据实际需要来设置它。比如像ssh和telnet这样的登录程序需要的是最小延时的服务,而文件传输程序ftp则需要最大吞吐量的服务。
16位总长度(total length):是指整个IP数据报的长度,以字节为单位,因此IP数据报的最大长度为65 535字节。但由于MTU的限制,长度超过MTU的数据都将被分片传输,所以实际传输的IP数据(或分片)的长度都远远没有达到最大值。接下来的3个字段则吗,描述了如何实现分片。
16位标标识符(identification):唯一地标识主机发送的每一个数据报。期初值由系统随机生成:每发送一个数据报,其值就加1。改值在数据报分片时被复制到每一个分片中,因此同一个数据报的所有分片都具有相同的标识值。
3位标志字段的第一个位保留。第二位(Don’t Fragment ,DF)表示“禁止分片”。如果设置这个位,IP模块将不对数据进行分片。这种情况下,如果IP数据报超过MTU的话,IP模块将丢弃该数据报并返回一个ICMP差错报文。第三位(More Fragment,MF)表示“更多分片”。除了数据报的最后一个分片外,其他分片都要把它置1。
13位分片偏移(fragmentation offset):是分片相对原始IP数据报开始处(仅指数据部分)的偏移。实际的偏移值是该值左移3位(乘8)后得到的。由于这个原因,除了最后一个IP分片,每个IP分片的数据部分长度必须是8的倍数(这样才能保证后面的IP分片拥有一个合适的偏移值)。
8位生存时间(Time To Live ,TTL):是数据报到达目的地之允许经过的路由器跳数。TTL值被发送端设置(常见值位64)。数据报再转发过程中每经过一个路由器,该值就被路由器减1。当TTL值减为0时,路由器将其丢弃,并向源端发送一个ICMP差错报文。TTL值可以防止数据报陷入路由循环。
8位协议(protocol):用来区分上层协议。ICMP为1,TCP为6,UDP为17。
16位头部校验和(header checksum):由发送端填充,接收端对其使用CRC算法以检验IP数据报头部(注意,仅检验头部)在传输过程中是否损坏。
32位的源端IP地址和目的端IP地址用来标识数据报的发送端和接收端。一般情况下,这两个地址在整个数据的传递过程中保持不变,而不论中间经过多少个中转路由器。
IPV4最后一个选项字段(option):是可变的可选信息。这部分最多包含40字节,因为IP头部最长60字节(其中还包含前面讨论的20字节的固定部分)。

IPV6

IPV6头部由40字节的固定头部和可变长的扩展头部组成。
这里写图片描述

版本号 表示协议版本.值为6
流量等级 主要用于QoS
流标签 用来标识同一个流里面的报文
载荷长度 表明该IPv6包头部后包含的字节数,包含扩展头部
下一报头 该字段用来指明报头后接的报文头部的类型,若存在扩展头,表示第一个扩展头的类型,否则表示其上层协议的类型,它是IPv6各种功能的核心实现方法
跳数限制 该字段类似于IPv4中的TTL,每次转发跳数减一,该字段达到0时包将会被丢弃
源地址 标识该报文的来源地址
目的地址 标识该报文的目的地址
扩展头部:IPv6报文中不再有“选项”字段,而是通过“下一报头”字段配合IPv6扩展报头来实现选项的功能。使用扩展头时,将在IPv6报文下一报头字段表明首个扩展报头的类型,再根据该类型对扩展报头进行读取与处理。每个扩展报头同样包含下一报头字段,若接下来有其他扩展报头,即在该字段中继续标明接下来的扩展报头的类型,从而达到添加连续多个扩展报头的目的。在最后一个扩展报头的下一报头字段中,则标明该报文上层协议的类型,用以读取上层协议数据 [4] 。
这里写图片描述
/IP头定义,共20个字节/
typedef struct _IP_HEADER
{
char m_cVersionAndHeaderLen;   //版本信息(前4位),头长度(后4位)
char m_cTypeOfService;       // 服务类型8位
short m_sTotalLenOfPacket;     //数据包长度
short m_sPacketID;         //数据包标识
short m_sSliceinfo;         //分片使用
char m_cTTL;           //存活时间
char m_cTypeOfProtocol;       //协议类型
short m_sCheckSum;        //校验和
unsigned int m_uiSourIp;      //源ip
unsigned int m_uiDestIp;      //目的ip
} attribute((packed))IP_HEADER, *PIP_HEADER ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值