IP:网际协议
IP
提供不可靠无连接的数据报传送服务
不可靠:不能保证IP能够顺利到达目的地
无连接:每个数据报都是相互独立的,IP数据报可以不按照发送的顺序进行接收
IP首部
IP首部的长度为20个字节(如果不包括选项字段)
每一行有24个字节,一共五行。
传输的时候按照big endian的字序进行传输(网络字节序),如果有little endian字节序,那么需要先转成网络字节序。
IP头结构的定义
/*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 ;
IP路由的选择
1.搜寻路由表,寻找能与目的IP地址完全匹配的表目,如果找到,将报文发送给相应的下一站的路由器或者相连的网络接口。
2.搜寻路由表,寻找能与目的网络号相匹配的表目,如果找到,那么久发送给下一站的路由器或者相连的网络接口
3.搜寻路由表,寻找默认(default)的表目,执行类似的发送操作。
注意:在发送到下一级的路由的时候,IP层的地址不会被改变,但是数据链路层的首部地址会改变为下一级的路由地址。
子网寻址
将IP地址 网络号+主机号 变为 网络号+子网号+主机号
改变原因:A类地址与B类地址分配了过多的主机数目。一般都用B类地址进行子网划分
子网掩码
主机可以知道有多少用于主机号,子网号。
子网掩码是32bit,网络号与子网号为1,主机号为0.
作用:通过IP地址以及子网掩码可以知道计算机在网络中的位置。
查询IP的方法:windows命令为:ipconfig;Linux命令为:ifconfig
Netstat命令:提供系统上的接口信息,-i打印接口信息,-n打印出IP地址
显示路由表命令:Windows命令为 route print ;linux命令为 route
地址解析协议:ARP
ARP作用:
将32位Internet地址映射为48位以太网地址(或者其他的网络类型)
从逻辑Internet地址到对应的物理硬件地址需要进行翻译,这就是ARP的功能。
ARP发送一份称作ARP请求的以太网数据帧给以太网上所有主机,这个过程称作广播,这个数据帧中包括了目的主机的IP地址和其他信息。
目的主机的ARP层在接收到这份广播报文后,识别出这是发送端在询问它的以太网地址,于是它发送一个ARP应答,这个ARP应答中包含IP地址以及对应的硬件地址。
在请求端收到ARP应答之后,就可以传送IP数据报了。
点对点的链路不使用ARP。
ARP高速缓存
ARP高速缓存中存放了Internet地址到硬件地址的映射记录,高速缓存中每一项的生存时间一般为20分钟。可以使用arp命令来检查ARP高速缓存,-a可以显示高速缓存中的所有内容。
ARP分组格式
分为两个部分:以太网首部(14字节)和ARP请求/应答(28字节)。具体每一块的功能还是看书第四十页。
ARP分为直接请求以及经过路由器的ARP请求,经过路由器的arp请求叫做ARP代理。路由器在接收到源地址的请求后,将发送一个ARP应答,该应答中的目的地址是路由器的物理地址。主机再把数据发送给路由,再由路由将数据发送给目的端。
免费ARP
免费ARP指的是主机发送ARP查找自己的IP地址,这种有两个方面的作用;
1.一个主机可以通过它来确定另一个主机是否设置了相同的IP地址
2.如果发送免ARP主机正好改变了硬件地址,那么就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。
ARP命令
-a显示高速缓存中的所有内容
超级用户 -d来删除ARP高速缓存中的某一项内容。
-s来增加高速缓存的内容。