参考文章:《嵌入式系统设计与开发实例详解-基于ARM的应用》,胥静 主编
《TCP/IP详解》
ARP协议解密:http://www.ibm.com/developerworks/cn/linux/l-arp/
========================================================================================================================
物理层:OSI模型最底层,规范网络的电气和机械接口。
数据链路层:(PPP协议和HDLC协议)把数据组合成帧格式进行发送并处理接收到的帧。把不可靠的物理层传输变成可靠的数据传输,具有流量控制和差错控制功能,具体可分为两层:
1、介质访问MAC:解决新到竞争
2、逻辑链路控制LLC:解决传送数据的维护
MTU:以太网和802.3对数据帧的长度做了限制,分别是1500和1492字节,如果IP层数据报大于MTU,需要做IP分片。
IP v4有4Byte组成,通常使用4个点分十进制表示,该地址分成如下3部分
1、网络地址,唯一标识了一个组织
2、子网地址,标识了该组织的一个子网
3、系统地址,标识了子网中的唯一的一个节点
解释网络术语:
子网:一个简答的局域网
网络:通过路由器相连的子网的集合
组织:通过路由器相连的网络的集合
子网 - 网络 - 组织 , 构成了三层的网络层次结构。
比如,PC与其他一些计算机处于同一局域网(LAN)中,该局域网是一个子网,
这个局域网通过路由器/网关与其他局域网相连构成广域网(WAN),这个广域网就是子网(局域网)的集合,称为网络。
广域网通过路由器/网关与因特网相连,构成了一个三成网络。
ARP地址解析协议: IP地址 -> 物理地址
RARP反向地址解析协议:物理地址 -> IP地址
ARP数据包格式:
========================================================================================================================
网络层:解决数据在网络与网络之间的数据传输问题,不可靠,无连接(IP层是TCP/IP协议的核心,IP和ICMP协议)
通过路由选择算法,为报文和分组通过通信子网选择最合适的路径,即提供逻辑寻址以便进行路由选择。在网络层有两种类型的包:数据包和路由更新包。
IP(网际协议)是位于网络硬件驱动之上的第1层软件层,ICMP是它的附属协议(注:ICMP不可靠,没有具体端口号),IP协议屏蔽了下层物理网络的差异,向上层提供统一的IP数据报。
IP和ICMP的主要作用是进行网络路由,IP提供静态路由信息,ICMP提供动态路由信息。
之所以说IP提供静态路由信息,是因为IP报文头存放路由器所需的静态信息,例如源IP地址和目标IP地址,路由器不需要对每个数据报的内容进行详细检查,只需要获取报文头中对应字段的内容即可。
ICMP数据包则专门用作“错误侦测和回报”的消息,当路由出现问题,就将这个消息动态的回报给发送者。
IP数据报的格式如下:IP首部通常是20Byte
IP分片
数据链路层用MTU限制数据包大小(不包括数据链路层数据帧的帧头),当源IP数据报的大小超过目标MTU,IP层需要对数据进行分片。(中间路由器也有可能分片)
IP首部4个字节用于分片:
前16位是IP数据包的标识,同一数据包的各个分片的标识是一样的。(目的端根据标识判断分片是否属于同一IP数据报)
中间3位是标志位:表示是否有更多分片,最后一个分片 = 0,否则为1。
最后13位是分片在原始数据的偏移。
注意:在分片数据中,传输层首部只会出现在第一个分片中,应为传输层数据格式对于IP层是透明的,传输层首部只在传输层起作用,IP层不需要保证每个分片中都有传输层首部。所以网络上传输的数据包可能没有传输层首部。
网络编程中,应尽量避免IP分片,因为IP层没有超时重传,若IP分片丢失,只能依赖传输层重传,结果是所有分片重传。
对于UDP,应该在应用层限制每个包的大小,一般不超过1472Byte,即以太网MTU(1500) - UDP首部(8) - IP首部(20)
对于TCP,应用层不需要考虑该问题,在传输层建立连接的三次握手中,双方相互告知MSS(最大报文段长度),MSS一般等于 MTU - IP首部(20) - TCP首部(20)
========================================================================================================================
传输层:连接应用层与完成网络间数据通信的其它层。“端口”的区分就是在传输层完成的,利用不同的端口,虽然只有一个网络节点,实现不同的功能。
屏蔽低层数据通信的细节,向用户传送透明的报文,具体包括:
1、建立、维护、拆除应用程序之间的连接
2、提供端口到端口的错误恢复和流程控制
3、为上一层提供独立的透明的数据传输