IP协议协议--IP头部信息

IP协议协议--IP头部信息

2023年7月23日发(作者:)

IP协议协议--IP头部信息《Linux⾼性能服务器编程》阅读笔记:1. IP协议概述  IP协议是TCP/IP协议簇的核⼼,它为上层(传输层)协议(TCP/UDP)提供⽆状态、⽆连接、不可靠的服务。  (1) ⽆状态: IP通信双⽅的数据状态信息不同步,即所有的IP数据报的发送、传输、接收都是相互独⽴的,没有上下⽂关系。优点是简单⾼效,不占⽤内核结构来保存通信状态,每次传输数据时不⽤携带状态信息

  (2) ⽆连接: IP通信双⽅不能长久地维持对⽅的任何信息。上层协议每次发送数据时都需要指明通信对⽅的地址

  (3) 不可靠: 不能保证IP数据报准确地到达接收端,它只是承诺尽最⼤的努⼒  在⽹络协议中⽆状态⽆连接是很常见的,如UDP协议和HTTP协议。HTTP协议中,⼀个浏览器的连续两次⽹页请求之间并没有关联,它们被WEB服务器独⽴处理。使⽤IP服务的上层协议若要实现数据确认、超时重传等机制,就需要在上层协议中实现,如TCP协议。2. IPv4头部结构  以IPv4版本的IP协议为例,分析其头部信息:

  IPv4的头部结构长度为20字节,若含有可变长的选项部分,最多60字节。

  (1) 版本号:IP协议的版本。对于IPv4来说值是4

  (2) 头部长度:4位最⼤为0xF,注意该字段表⽰单位是字(4字节)

  (3) 服务类型(Type Of Service,TOS):3位优先权字段(现已被忽略) + 4位TOS字段 + 1位保留字段(须为0)。4位TOS字段分别表⽰最⼩延时、最⼤吞吐量、最⾼可靠性、最⼩费⽤,其中最多有⼀个能置为1。应⽤程序根据实际需要来设置 TOS值,如ssh和telnet这样的登录程序需要的是最⼩延时的服务,⽂件传输ftp需要的是最⼤吞吐量的服务

  (4) 总长度: 指整个IP数据报的长度,单位为字节,即IP数据报的最⼤长度为65535字节(2的16次⽅)。由于MTU的限制,长度超过MTU的数据报都将被分⽚传输,所以实际传输的IP分⽚数据报的长度远远没有达到最⼤值  下来的3个字段则描述如何实现分⽚:

  (5) 标识:唯⼀地标识主机发送的每⼀个数据报,其初始值是随机的,每发送⼀个数据报其值就加1。同⼀个数据报的所有分⽚都具有相同的标识值

  (6) 标志: 位1保留,位2表禁⽌分⽚(DF),若设置了此位,IP模块将不对数据报进⾏分⽚,在此情况下若IP数据报超过MTU,IP模块将丢弃数据报并返回⼀个ICMP差错报⽂;位3标识更多分⽚(MF),除了数据报的最后⼀个分⽚,其他分⽚都要把它设置为1

  (7) 位偏移:分⽚相对原始IP数据报数据部分的偏移。实际的偏移值为该值左移3位后得到的,所以除了最后⼀个IP数据报分⽚外,每个IP分⽚的数据部分的长度都必须是8的整数倍  (8) ⽣存时间::数据报到达⽬的地之前允许经过的路由器跳数。TTL值被发送端设置,常设置为64。数据报在转发过程中每经过⼀个路由该值就被路由器减1.当TTL值为0时,路由器就将该数据包丢弃,并向源端发送⼀个ICMP差错报⽂。TTL可以防⽌数据报陷⼊路由循环

  (9) 协议: 区分IP协议上的上层协议。在Linux系统的/etc/protocols⽂件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17

  (10) 头部校验和: 由发送端填充接收端对其使⽤CRC算法校验,检查IP数据报头部在传输过程中是否损坏

  (11) 源IP地址和⽬的IP地址: 表⽰数据报的发送端和接收端。⼀般情况下这两个地址在整个数据报传递过程中保持不变,不论中间经过多少个路由器

  (12) 选项:可变长的可选信息,最多包含40字节。选项字段很少被使⽤。可⽤的IP可选项有:

  a. 记录路由: 记录数据包途径的所有路由的IP,这样可以追踪数据包的传递路径

  b. 时间戳: 记录每个路由器数据报被转发的时间或者时间与IP地址对,这样就可以测量途径路由之间数据报的传输的时间

  c. 松散路由选择: 指定路由器的IP地址列表数据发送过程中必须经过所有的路由器

  d. 严格路由选择: 数据包只能经过被指定的IP地址列表的路由器

  e. 上层协议(如TCP/UDP)的头部信息3. tcpdump抓取IP数据报  在Ubuntu 14.04中执⾏telnet命令登录本机,并在另⼀终端抓取这个过程中telnet服务器-telnet客户端之间的数据包:$ sudo tcpdump -ntx -i lo  在另⼀终端:$ telnet 127.0.0.1  观察tcpdump抓取到的数据:tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on lo, link-type EN10MB (Ethernet), capture size 65535 bytesIP 127.0.0.1.44626 > 127.0.0.1.23: Flags [S], seq 3041640326, win 43690, options [mss 65495,sackOK,TS val 4701824 ecr 0,nop,wscale 7], length 0 0x0000: 4510 003c 0106 4000 4006 3ba4 7f00 0001 0x0010: 7f00 0001 ae52 0017 b54b bf86 0000 0000 0x0020: a002 aaaa fe30 0000 0204 ffd7 0402 080a 0x0030: 0047 be80 0000 0000 0103 0307  这是⼀个IP数据报:

  (1) telnet登录的是本机,所以IP数据报的源端IP地址和⽬的端IP地址都是127.0.0.1。telnet服务器使⽤的端⼝号是23,telnet 23/tcp #摘⾃/etc/services⽂件  telnet客户端使⽤的是临时端⼝号44626。telnet服务使⽤的是TCP协议,Flags、sq、win、options描述的都是TCP头部信息,详细将在TCP协议分析中解析。  (2) tcpdump命令开启-x选项,使之输出⼆进制码。这些⼆进制码⽤⼗六进制的格式呈现,共60字节: 前20字节是IP头部,后40字节是TCP头部。length为0表⽰这些数据不包含数据。  对照前⾯表格的IPv4,可得各数据取值意义如下:0x4 4位的版本号 IP版本号0x5 4位的头部长度 头部长度为5个字(20字节)0x10 8位的服务类型TOS 开启最⼩延时服务0x003c 16位的总长度 数据包总长度(60字节)0x0106 16位的标识 数据报标识0x4 3位的标志 禁⽌分⽚,因没携带数据0x000 13位的位偏移 为0表没发⽣位偏移0x40 8位的⽣存时间 ⽣存时间为64跳0x06 8位的协议字段 为6表上层协议是TCP协议0x3ba4 16位的IP头部校验和 头部校验和0x7f00 0001 32位的源端IP地址 源端IP地址127.0.0.10x7f00 0001 32位的⽬的端IP地址 ⽬的端IP地址127.0.0.1

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690103568a306149.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信