当前位置: 首页 > 服务器&&网络编程 > 正文

Linux 网络编程 IP协议

前言

学习网络编程,个人觉得还是了解下协议的具体情况比较好。我一直信奉的是:一个复杂的东西,其实只是表面复杂,是面对外界应答的策略上的复杂,机制一般都不复杂,所以我学习更注意学习机制而不是策略。

IP头部结构

IP4

其实以前到是也学过些,但是都忘了,当时也不理解更不用说总结了,现在好好看看这个。

 

@4位版本号:IPV4 就是 4

@4位头部长度:单位是字节

@8位服务类型:用来设置延时和吞吐量,也可以说是服务的大体类型

@16位总长度:整个IP数据报的长度,以字节为单位,最大(2^16)-1 ,由于MTU 我们需要分片传输

@16位表识:唯一的标识主机发送的每一个数据报

@3位表识:第一位保留,第二位禁止分片,第三位如果这是一个分片就设置1,一个数据报的最后一个分片设置0

@13位移分片:实际上是值偏移3位得到在这个偏移量,除了在最后一个IP分片外,每个IP分片的数据部分长度必须是8的整数倍。

@8位生存时间:这个是数据到达目的端之前允许经过的路由器跳数

@8位协议:用来区分上层协议 ,/etc/protocols 文件定义了所有上层协议对应的值。ICMP : 1,TCP :6,UDP:17

@16位头部效验和:由发送端使用CRC 来填写,发现传输过程中是否由损坏。

@32位源IP地址:就是32位的发送端IP地址

@32位目的IP地址:就是目的主机的IP

 IP分片

首先我们知道IP协议是一个不完全安全的传输协议,它速度很快,总是尽全力将一个数据包传送到对端,但是是乱序的,而且也会发生丢包的现象,其实IP还能将自己的数据报组合起来,但是丢包就没办法了,本节主要说IP ,丢包重传,保障数据完成性,是TCP干的活,我们这节不说它。

我们来看看IP协议的传输,首先,IP数据包头包含一个数据报标识,标志,偏移。这样把我们就可以把一堆无序的数据报根据它的标识分成每一个数据报一堆,然后根据偏移量和末位包,组合成一个完整的数据报。

还有路由表重定向ICMP 干脆直接画个简单的图好了

IP协议传输

这个图还是比较清楚的嘛!

本文固定链接: http://zmrlinux.com/2016/03/12/linux-%e7%bd%91%e7%bb%9c%e7%bc%96%e7%a8%8b-ip%e5%8d%8f%e8%ae%ae/ | Kernel & Me

该日志由 root 于2016年03月12日发表在 服务器&&网络编程 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Linux 网络编程 IP协议 | Kernel & Me