1,网络杂项
a,PCS、PMA、PMD的区别。这三者都属于OSI模型物理层。物理编码子层PCS(physical coding sublayer)用于数据编码,如8/10 bit;物理媒介适配子层PMA(physical media attachment)用于串并转换;物理媒介相关子层PMD(physical media dependent)用于实际线束连接,光电信号转换等。这三者都集中在PHY芯片里。
b,UTP和STP。前者为非屏蔽双绞线unsheilded twisted pair,后者为带屏蔽双绞线sheilded twisted pair。
c,以太网协议定义的时候,是按大端字节序定义的,即整个协议的地址变化为:从左到右,地址增加;从上到下,地址增加,即一个字段的高字节放在了低地址。具体发送每一字节时,会先从字节的低位开始发送(类似于小端),但是phy芯片会帮我们做位流的转换,因此我们只需关注字节序即可。这里有一个特例,那就是前导码preamble和帧起始界定符sfd,它们定义的是定义网线上的位流顺序,那么判断时需要反过来。比如以太网前导码preamble,定义为7byte,都为0b10101010,这是网线上的位流顺序,那么实际经过phy芯片后会转换为0b01010101;又比如以太网帧起始界定符sfd,定义为1byte,为0b10101011,但实际转换后为0b11010101。具体应用到MII接口或者RGMII接口时,由于是4bit数据,一个8bit数据会先发低4bit,再发高4bit,因此我们会先收到0101,然后收到1101。
d,以太网包最小长度为64byte,14byte头+46byte数据+4byte校验,数据段不足46的会以0填充。最常见的就是arp包,arp有效数据段只有28byte,因此需要填充16byte。注意用wireshark抓包时,会丢掉校验码;且本地发送的包,也不会显示填充字段。以太网包最大长度为1518byte,14byte头+1500byte数据+4byte校验,大于此长度的数据包需要分包处理。
e,项目中常用的IP地址为C类地址,即3byte网络ID+1byte主机ID。D类地址用于组播,范围为224.0.0.0到239.255.255.255,组播地址只能作为目标ip地址。实际中,224.0.0.0~224.0.0.255为局部链接多播地址,用于路由协议和其他预留功能地址,路由器不转发此IP范围的包;239.0.0.0/8为私有组播。ip组播地址到mac组播地址的转换为mac={24‘h01005E,1'b0,ip[22:0]},可以看出,ip组播号映射到mac组播是多对一的关系。在multicast中,发送者为组播源,接收者为组播组。
2,TCP/IP概述
TCP/IP协议将网络进行设计进行分层,总共包括链路层、网络层、传输层和应用层,其中链路层对应7层模型的物理层和数据链路层,应用层对应7层模型的会话、展示和应用层。
物理层主要定义码元的编码方式,即在物理介质上传输时什么表示0什么表示1;另外物理层应当定义连接介质(电缆、连接器等)的物理、机械等特性。
链路层主要定义mac地址,每个网卡的mac地址唯一,由6个字节构成。链路层中的数据流是以以太网包的形式存在的,其结构为14byte首部+(46~1500byte)数据+4byte尾部,首部包含目标mac地址、源mac地址和类型(这里的类型定义ethernet帧类型,如ip包(tcp、udp、icmp)、arp包、snmp包等),尾部为校验。与该层最为密切的就是交换机了,交换机有张mac表,通过这张表实现以太网数据包转发。mac表就是交换机中用于映射mac地址与自己输出端口的表。当接收的数据包中的目标mac地址不存在时,交换机就会向除接收该数据包端口以外的端口转发该数据包,当目标主机接收到该包,会应答,并将自己的mac地址放在其中,交换机此时记录该mac地址与接收端口,存入mac表,以后两个主机的数据就可以通过该交换机直接交互。可见,交换机具有学习源地址的能力,交换机工作在链路层,不会改变mac地址。
网络层主要定义IP地址。IP地址由网络地址和主机地址构成,分为a、b、c、d类。对于ipv4、c类IP来说,前24bit为网络地址,后8bit为主机地址,通过与掩码相与获得。主机a向主机b发送数据,一般从用户层获取的都是主机b的ip(如ping 192.168.2.21),而不知道主机b的mac地址,此时需要发起arp请求。主机a向主机b传输数据,主机a先判断自己与b是否再同一个网段,如果是,则发送arp数据包(注意,arp请求时,mac头中的目标地址为全f,arp协议中的mac目标地址为全0(表示未知,需要目标ip的设备填充),因此arp请求为广播;arp应答时,mac头中的目标地址为请求设备的mac地址,arp协议中的mac目标地址为请求设备的mac地址,因此arp应答为单播),arp数据包经过交换机转发给b,b判断目标ip地址与自己ip地址一致,则应答,同时将源ip与源mac地址存入自己的arp表。主机a接收到应答后,将源mac地址和ip存入自己的arp表,此后,两者便可传输数据。如果主机a、b不在同一个网段,则需要路由器参与,因为arp包只能在同网段传输。此时主机a先请求网关ip网络段对应的mac地址或者主机b的mac地址(proxy arp,代理arp),但这时返回的都是网关ip的mac地址;此后主机a就将主机b的ip与网关应答的mac地址存储在arp表里。后续主机a向主机b发数据,都先发给路由器,然后路由器根据路由表进行转发,直到最终在主机b所在的网段。路由表由路由器维护,表示ip网络段与端口的映射。路由器工作在网络层,不会改变ip地址。
传输层用于定义端口地址。分为UDP和TCP两种,TCP就是带应答机制的UDP,TCP模式下,没发送一个包,都需要应答(握手),如果没有应答,则需要重发,这是一种可靠的传输机制。而UDP则无需应答,优点是速度快。端口号是用户程序的访问接口,值为0~65535。
应用层就是面向用户的接口。经过前面几层,数据已经可以在任意网络中的两个应用之间传输,那么应用层就是用于定义这传输的数据到底是什么。
3,常用协议介绍
2.1 ICMP协议
ICMP全称为internet control message protocol,网络控制报文协议,主要用于网络设备间传递错误、控制、查询信息等。ICMP是IP数据包的一个子协议,其固定格式为,前面IP首部固定,后面icmp报文根据类型不同而不同。
ICMP报文格式如下,1byte类型字段和1byte代码字段共同决定报文类型。
icmp报文类型如下表所示。查询和差错列表示该报文属于查询还是差错。
2.2 IGMP协议
IGMP(internet group management protocol)协议是互联网组管理协议,该协议用于组播管理。在igmpv1中,有两种报文类型,一种是组播路由器周期性发出的查询报文,一种是主机发出的报告报文。查询报文的目标ip地址为224.0.0.1,表示查询同一网段内所有主机;同一网段内各主机收到此报文后,发送报告报文,并添加自己需要加入的组播地址;组播路由器收到报告报文后,更新组播转发项,如(网段1,组播地址1),(网段2,组播地址2)。。。。。。。,此后接收到相应组播地址的报文,将转发给对应网段。