TCP/IP协议族——IP工作原理及实例具体解释(上)
IP协议具体解释
本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包。来观察IP数据报传送过程中IP的格式,以及分片的过程。
IP头部信息:IP头部信息出如今每一个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组。
IP数据报的路由和转发:IP数据报的路由和转发发生在出目标机器之外的全部主机和路由器上。他们决定数据报是否应该转发以及怎样转发。
IP服务的特点
IP协议是TCP/IP协议族的动力。它为上层协议提供无状态、无连接、不可靠的服务。
无状态是指IP通信两方不同步数据传输的状态信息,因此全部IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。这样的服务最大的缺点是无法处理乱序和反复的IP数据报。
无连接是指IP通信两方都不长久的维持对方的不论什么信息。这样,上层协议每次发送数据时。都必须明白指定对方的IP地址。
不可靠是指IP协议不能保证IP数据报准确的达到接收端。
IPv4头部结构
4位版本号号指定IP协议的版本号
4位头部长度表示IP有多少个32bit字(4字节)
8为服务类型(Type
OfService)包含一个3为优先字段,4位的TOS字段和1位保留字段(必须置0)。
4位的TOS字段分别表示:最小延迟,最大吞吐量,最高可靠性和最小费用。当中最多有一个能置为1。
16位总长度是指整个IP数据报的长度,以字节为单位。因为MTU的限制,长度超过MTU的数据豆浆杯分片传输。
16位标识唯一标识主机发送的每个数据报,同一个数据报的全部分片具有同样标识值。
3位标志字段第一位保留。第二位表示“禁止分片”。第三位表示很多其它分片。除了数据报最后一个分片外,其它分片都要把她置1.
13位分片偏移是分片对原始IP数据报開始出的偏移。
8位生存时间(Time
ToLive,TTL)是数据报到达目的地之前同意经过的路由器跳数。
每经过一个路由。该值减1.
8位协议用来区分上层协议,当中ICMP是1。TCP是6,UDP是17.
16位头部校验和检验IP数据头部在传输过程中是否损坏。
32位源端IP地址和目的端IP地址用来标识发送端和接收端。
使用tcpdump观察IPv4头部结构
chen123@ubuntu:~$ sudo tcpdump -ntx -i lo
chen123@ubuntu:~$ telnet 127.0.0.1
IP 127.0.0.1.47513> 127.0.0.1.23: Flags [.], ack 90, win 342, options [nop,nop,TS val 5091357ecr 5091357], length 0
0x0000: 4510
0034 52b6 4000 4006 e9fb 7f00 0001
0x0010: 7f00
0001 b999 0017 a304 e30f 5c98 cfa6
0x0020: 8010
0156 fe28 0000 0101 080a 004d b01d
0x0030: 004d
b01d
IPv4头部各个字段具体解释:
十六进制 |
十进制 |
IP头部信息 |
0X4 |
4 |
IP版本 |
0X5 |
5 |
头部长度为5个32位 |
0x10 |
TOS选项中最小延迟被开启 |
|
0x0034 |
52 |
数据报总长度,52字节 |
0x52b6 |
数据报标识 |
|
0X4 |
设置禁止分片标志 |
|
0x000 |
0 |
分片偏移 |
0x40 |
64 |
TTL被设为64 |
0x06 |
6 |
协议字段为6,表示上层协议TCP协议 |
0xe9fb |
IP头部校验码 |
|
0X7f000001 |
32位源端IP地址127.0.0.1 |
|
0X7f000001 |
32位目的端IP地址127.0.0.1 |
IP分片
当IP数据报的长度超过帧的MTU时,将被分片传输。
分片可能发生在发送端,也可能发生在路由器上,并且可能在传输过程中被多次分片。但仅仅有在终于目标机器上,这些分片才会被内核中的IP模块又一次组装。
IP头部中的例如以下三个字段给IP的分片和重组提供了足够的信息:数据报标识、标志和片偏移。一个IP数据报的每一个分片都具有自己的IP头部。他们具有同样的标识值,但具有不同的片偏移。而且除了最后一个分片外,其它分片都将设置MF标志。此外,每一个分片的IP头部的总长度将被设置为该分片的长度
以太网的MTU(关于MTU概念见http://blog.csdn.net/walkerkalr/article/details/34410937封装部分)是1500字节,因此它携带的IP数据报的数据部分最多是1480字节(IP头部占用20字节)。烤炉用IP数据报封装一个长度为1481字节的ICMP报文(包含8字节的ICMP,所以其数据部分长度为1473字节),则该数据报在使用以太网帧传输室必须分片。
须要指出的是,ICMP报文的头部长度取决于报文类型,以下的样例使用ping程序,而ping程序使用的ICMP回显与应答报文的头部长度是8字节。为了看清楚IP分片的详细过程,考虑从chen123(关于在一台主机上搭建的測试网络见http://blog.csdn.net/walkerkalr/article/details/34420041)来ping机器li123。每次传送1473个字节以强制引起IP分片。并用tcpdump抓取这一过程中两方的数据报。
详细操作例如以下:
chen123@ubuntu:~$sudo tcpdump -ntv -i eth0 icmp #仅仅抓取ICMP包
chen123@ubuntu:~$ping 192.168.73.130 -s 1473 #用-s选项指定每次发送1473字节的数据
例如以下是在敲入tcpdump命令终端上的输出:
1. IP(tos 0x0, ttl 64, id 21061, offset 0, flags [+], proto
ICMP (1), length 1500)
192.168.73.130 > 192.168.73.129: ICMPecho reply, id 4311, seq 11, length 1480
2. IP(tos 0x0, ttl 64, id 21061, offset 1480, flags [none],
proto ICMP (1), length21)
192.168.73.130 > 192.168.73.129:ip-proto-1
这两个IP的表示值都是21061,说明它们是同一个IP数据报的分片。第一个分片的片偏移是0,第二个是1480。非常显然,第二个分片的片偏移实际上是第一个分片的ICMP报文的长度。
第一个分片设置了MF标识表示还有兴许分片,所以tcpdump输出”flags[+]”。而第二个分片则没有设置不论什么标识,所以tcpdump输出“flags[none]”。
由于我们发送1473个字节,加上8字节的ICMP头部长度和20字节的IP头部长度,则终于长度1501字节大于MTU值,须要被分片。也就是,第一个IP分片长度为1500,第二个为21。每一个分片都有自己的IP头部(20字节)。
TCP/IP协议族——IP工作原理及实例具体解释(上)的更多相关文章
- tcp/iP协议族——IP工作原理及实例具体解释(下)
IP协议具体解释 上一篇文章文章主要介绍了IP服务的特点,IPv4头部结构IP分片.并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程.本文主要介绍IP路由,IP ...
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码
接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...
- TCP/IP协议族(一)
TCP/IP协议族(一) HTTP简介.请求方法与响应状态码 接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的. ...
- TCP/IP协议原理与应用笔记10:TCP/IP协议族
1. 协议族视图如下:(这里我们列举重要的,并不是所有的) (1)网络接入层(数据链路层 和 物理层): 通过接入的物理网络的 功能 和 覆盖范围 进行分析划分为: •LANs :局域网(Local ...
- <TCP/IP原理> (二) OSI模型和TCP/IP协议族
1.OSI参考模型 1)作用 2)各层的名称和功能 2.对分层网络协议体系的理解 1)不同节点:层次组成不同,作用不同 2)横向理解:虚通信.对等实体.协议.PDU 3)纵向理解:封装与解封.服务.接 ...
- iOS的TCP/IP协议族剖析&&Socket
原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有S ...
- 服务器编程入门(1)TCP/IP协议族
问题聚焦: 简单地梳理一下TCP/IP各层的功能和常用协议 详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理 1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络 ...
- Linux 高性能服务器编程——TCP/IP协议族
1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输. 常用协议:ARP协议(地址解析协议),RARP协议 ...
- 第一章 了解TCP/IP协议族
第一章 了解TCP/IP协议族 1.1 TCP/IP协议族体系结构以及主要协议 IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到. TCP/IP的体系结构有应用层,传输层,网络层,数 ...
随机推荐
- PYQT窗口风格
setWindowFlags(Qt.WindowFlags)函数,Qt.WindowFlags类如下: 1.窗口类型 Qt.Qt.Widget#插件默认窗口,有最小化.最大化.关闭按钮 Qt.Qt.W ...
- java二分查找法
//二分查找法.必须有前提:数组中的元素要有序. public static int halfSeach_2(int[] arr,int key){ int min,max,mid; min = ; ...
- 将一张表中的字段更新到另一张表的sql
UPDATE tb_user a INNER JOIN tb_doctor s ON s.id=a.id SET a.AVATAR=s.AVATAR UPDATE tb_user a INNER JO ...
- 用宏判断程序当前的运行模式(debug or release)
例子 #if defined (DEBUG) && DEBUG == 1 // 如果当前处于debug 模式 //to do #else //to do #endif
- OWIN and Katana
OWIN(Open Web Interface for .NET)是在.net的web server和web应用之间定义了一套规范. Katana是微软实现了OWIN的一个Web Server的项 ...
- 更改Mantis的logo
1 准备好自己的logo,例如准备的logo为zhaoxiyu.gif.zxy.gif 2 把上面的两个logo存放到C:/mantis-1.0.0a3/images 3 打开C:/mantis-1. ...
- Error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
32位系统:ln -s /opt/base/3.3/lib/libpq.so.5 /usr/lib/libpq.so.5 64位系统:ln -s /opt/base/3.3/lib/libpq.so. ...
- Guava Files 源码分析(一)
Files中的工厂 Files类中对InputStream, OutputStream以及Reader,Writer的操作封装了抽象工厂模式,抽象工厂是InputSupplier与OutputSupp ...
- C++ cout 格式化输出方法
C语言里可以用printf(),%f来实现浮点数的格式化输出,用cout呢...? iomanip是I/O流控制头文件,就像printf的格式化输出一样. 以下是一些常用的: dec 置基数为10 相 ...
- 学习MongoDB-应用举例(利用java操作MongoDB)
Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定.可以到MongoDB官方网站下载驱动,驱动版本为2.9.0. 这个jar文件中,有两个包,我们会经常用到com.mongo ...