IP数据报

IP是TCP/IP协议族中最核心的协议,全部的TCP、UDP、ICMP、IGMP数据都以IP数据报的格式传输。IP仅提供尽力而为的传输服务。假设发生某种错误。IP会丢失该数据。然后发送ICMP消息给信源端。另外。IP数据报能够不按发送顺序接受。

IP数据报的格式例如以下:

前20字节和紧接其后的选项部分是IP数据报的首部,前20个字节是固定的,选项可有可无。首部的每一行是一个32位字的单位,最高位在左边,为0bit。最低位在右边。为31bit。

4字节的32bit值依照下面次序传输:首先0-7bit,其次8-15比特,然后16-23bit,最后是24-31bit,这样的传输次序称为big endian字节序(我们在C语言写位操作的算法时经常使用到该词)。TCP/IP首部中的全部二进制整数在网络中传输时都要求以这样的次序,因此它又称作网络字节序。其它形式存储的二进制数据。如little endian格式,则必须在数据传输之前把首部转化成网络字节序。

首部长度是指首部占32bit字的数目,由于4位的最大值为15,因此首部最长为60字节,也即是说选项部分的最大值为40字节。不够4的倍数。要用0填充。使数据部分的起始地址为4的倍数。

总长度指整个IP数据报的长度,包括首部和数据部分,16bit,最长可达65535字节。

虽然理论上能够传送一个长达65535的IP数据报。但实际上还要考虑网络的最大承载能力等因素,标准的TCP/IP分组大小为576字节。减去IP首部的20个字节。TCP首部的20个字节,路由协议头的24个字节,为512字节,因此主机接受的数据报的数据部分一般不超过512个字节。

(PS:这点看的也不是太懂,网上非常多人也有此疑问。谢希仁的计算机网络中写的一次IP数据报最少576字节,尼玛这里翻译的是不超过576字节。先往后看吧。说不定看到后面就豁然开朗了)。

这两天差点儿相同算是搞明确了,非常多基于UDP协议的应用之所以要求UDP的数据部分不超过512个字节(576-20-20)。主要是考虑整个传输路径上的效率,由于链路层为X2.5的网络的MTU为576个字节,这基本也是各种链路层网络的最小MTU。大于这个值就不会产生分片。之所以建议不超过这个值应该是考虑到网络承载能力和传输效率、每台主机的接受能力等非常多因素的权衡。当然书上也说,576仅仅是建议值。实际上大于它也是能够的,仅仅是这样在遇到X2.5网络时可能产生分片。临时是这么理解的,不知道看到后面会不会有新的收获。

第十一章中又有说:如今很多但不是全部的广域网都能够处理大于512字节的分组。

3个标志位主要用来标识分片的IP数据报,片位移为分片的数据报的首个字节偏离整个原始数据报的位置。

IP路由选择

主机通过路由器和目的主机连接。

主机通过IP数据报连接目的主机时,依照例如以下步骤搜索(同一网络中的搜索要经过ARP协议将目的主机的IP地址解析为MAC地址):

  1. 搜索路由表,优先搜索匹配主机。假设能找到和IP地址全然一致的目标主机,则将该包发向目标主机
  2. 搜索路由表,假设匹配主机失败。则匹配同子网的路由器,这须要子网掩码的协助。

    假设找到路由器。则将该包发向路由器。

  3. 搜索路由表,假设匹配同子网路由器失败,则匹配同网号路由器,假设找到路由器,则将该包发向路由器。
  4. 搜索路由表,假设以上都失败了,就搜索默认路由,假设默认路由存在,则发包
  5. 假设都失败了,就丢掉这个包。
    子网掩码
    主机号再分成一个子网号和主机号,便将一个网络又划分成了若干子网。子网掩码与该子网中的IP地址相与,便得到该子网。另外,子网对于子网内部的路由器是不透明的,也就是说IP数据报传到该网络的网关时,网关再将该数据报传送到子网的默认路由器上,最后通过该路由器再交付给该主机。
    ARP协议和RARP协议
    前面已经说过,ARP协议仅仅用在局域网中,它用来将IP地址解析为MAC地址。局域网中的每一个主机都有一个ARP缓存,它保存了近期发起的IP地址到MAC地址的映射记录,当该主机要向局域网中的某一主机发送数据时,它会先从自己的缓存中查找。看是否存在目标IP地址,假设找到。就通过映射找到它的MAC地址,从而发送过去。假设没有找到该目的IP地址。它就向该局域网内发送一个广播,广播中包括自己的IP地址、MAC地址和目的主机的IP地址,局域网内的全部主机都会收到该广播,但仅仅有目的IP地址的主机会做出回应,并把自己的MAC地址发送给源主机。源主机收到后,在自己的ARP缓存中添加上该映射,并依据发来的MAC地址将数据发送给目的主机。

    ARP快速缓存中的表项一般都要设置超时值,假设一段时间内没有与某主机通信。就将该主机相应的IP与MAC之间的映射关系去掉。下次在须要通信时,依旧发送广播。
    假设ARP请求是从一个网络的主机到还有一个网络的主机,那么连接这两个网络的路由器就能够回答该请求。这个过程成为ARP代理。
    RARP协议则刚好相反,它将MAC地址解析成为相应的IP地址。通常在DHCP中有集成,如今已非常少单独使用。

    

【网络协议】IP协议、ARP协议、RARP协议的更多相关文章

  1. TCP/IP协议栈 ARP和RARP协议

    上几章中我们提到以太网协议中,在以太网首部中一个帧类型的字段,它可以表示为IP ARP RARP协议. 这里说一下ARP 和RARP协议. 首先看ARP协议: 要想网络中的数据包准确到达某个主机,最后 ...

  2. TCP/IP学习笔记(3)-IP、ARP、RARP协议

    这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...

  3. TCP/IP学习笔记(3)----IP,ARP,RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...

  4. ARP与RARP协议及arp脚本

    1.什么是ARP与RARP协议 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议. 在⽹络通讯时,源主机的应⽤程序知道 ...

  5. ARP和RARP协议详解

    ARP概述 为什么要用ARP?即ARP的作用 (1) TCP/IP 的32bit的IP地址,仅知道主机的IP地址不能让内核发送数据帧给主机 (2) 网络接口的硬件地址,它是一个48bit的值,用来标识 ...

  6. arp和rarp协议

    ARP与RARP详细解析 原创zlnnjit 发布于2016-04-03 15:12:15 阅读数 9544 收藏 展开 地址解析协议 ARP和逆地址解析协议RARP 1.基本关系: ​ 2.地址解析 ...

  7. 3.IP协议,ARP协议,RARP协议

    1.IP协议 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输.要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制 ...

  8. UNIX网络编程——利用ARP和ICMP协议解释ping命令

    一.MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)      ...

  9. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  10. 利用ARP和ICMP协议解释ping命令

    一.MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit).如果IP ...

随机推荐

  1. 07-复习数组和简单api

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. Java类方法 类变量

    类变量就是静态变量,类方法就是静态方法. 在理解类变量.类方法之前先看一段代码: class Person{ int age ; String name; static int totalFee; p ...

  3. 使用Unity做2.5D游戏教程(一)

    最近在研究Unity 3D,看了老外Marin Todorov写的教程很详细,就翻译过来以便自己参考,翻译不好的地方请多包涵. 如果你不了解2.5D游戏是什么,它基本上是个3D游戏而你可以想象是压扁的 ...

  4. 浅谈中途相遇攻击--meet-in-the-middle attack

    貌似挖的坑也够多了....好多都没填,这篇最后会不会TJ还得看心情TUT 看过大白书的人应该都会发现一种神奇的算法:中途相遇法.(在第58页)这种算法将以空间换时间的思路运用到了极致,但事实上它在密码 ...

  5. BZOJ3996 [TJOI2015]线性代数 【最小割】

    题目 给出一个NN的矩阵B和一个1N的矩阵C.求出一个1*N的01矩阵A.使得 D=(AB-C)A^T最大.其中A^T为A的转置.输出D 输入格式 第一行输入一个整数N,接下来N行输入B矩阵,第i行第 ...

  6. CentOS7下安装Docker-Compose No module named 'requests.packages.urllib3'

    在使用Docker的时候,有一个工具叫做  docker-compose,安装它的前提是要安装pip工具. 1.首先检查Linux有没有安装Python-pip包,直接执行 yum install p ...

  7. 阐述struts2的执行流程。

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心控制器FilterDispatcher是Struts ...

  8. [ZJOI2007]棋盘制作 (单调栈,动态规划)

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8 \times 88×8 大小的黑白相间的方阵,对应八八六十四卦, ...

  9. 转载:sql2005 Microsoft SQL Server Management Studio Express的安装问题

    转载地址:http://blog.csdn.net/rjc20098022/article/details/26958105 在这个网址http://www.microsoft.com/zh-cn/d ...

  10. sublime text3安装angularjs插件

    sublime能够支持AngularJS开发那绝对是一件很爽的事情.下面我一步步讲解如何为sublime安装AngularJS插件. 首先提供一个破解版的sublime text 3的下载地址:htt ...