网络传输过程中TCP/IP协议详解
网络传输过程中TCP/IP协议详解
用户在主机A上新建一封电子邮件,指定收件人为B,并输入邮件内容为“早上好”
应用层:A从键盘上输入“早上好”,用户点击发送的那一刻起,就进入了应用层协议的处理,该协议首先封装相应的数据格式。
表示层:对相关数据从某个特定的数据格式转换为网络通用的标准数据格式后再发送出去,如:将“早上好”根据UTF-8或GB2312进行编码。
会话层:A要发5封邮件给B,可以每发一封时建立一次连接,随后断开连接。也可以一经建立好后就将5封连续发给对方,还可以同时建立好5个连接,将5个同时发送给对方。会话层只对何时建立连接,何时发送数据进行管理,并不实际传输数据。
传输层:A将B发送时,可能数据破坏,如B收到了”早上”,则将之后那部分没有收到的告诉A。这一层完成可靠性传输的功能:通过为所要传输的数据附加首部以识别它。
网络层:A和B之间有众多的数据链路,网络层负责数据路由过去。
网络层可能会数据丢失,顺序混乱等问题,由传输层负责提供正确传输数据的处理。
数据链路层,物理层:MAC地址是为了识别同一传输介质上的设备,网络层将整个数据发送给最终目标地址,而数据链路层仅发送一个分段的数据。
以主机A和服务器的交互说明网络通信的过程。
大部分应用程序均提供域名访问。所以在A刚开始访问服务器的时候需要将域名通过DNS服务转换为IP地址。得到服务器的IP地址后,A根据子网掩码相与判断该IP地址和A是否为同一网络。如果在同一个网络,则在内网转发,如果不在同一个网络,则将网关的地址封装成数据包(须要通过ARP获得其MAC地址)。
(1)如A和服务器是同一个网络,直接将服务器的IP地址封装成数据包转发出去:封装的时候,需要知道MAC地址,先发送ARP广播报文,如果对方发现了,则这个节点将自已的的MAC地址放入ARP响应包并返回给主机A,这样A知道了服务器的MAC地址,于是封装好正确的帧,交给交换机,下面进入交换机交换芯片的转发流程。
从端口进入交换芯片的包首先检查TAG,对于tagged包,判断是否是802.1p的包,(802.1p的包vid为0),对于untagged的包和802.1p的包,根据系统配置加上tag(这些配置包括:基于MAC的vlan、基于子网的vlan、基于协议的vlan和基于端口的vlan)。经过这一步以后,到交换芯片内部的包都变成802.1Q的tagged包了(vid为1-4094,4095保留),如果设置了ingress过滤,就会检查本端口是否在该vid对应的VLAN中,对于本端口不在该vid对应的VLAN中的包就丢弃。对于没有设置ingress过滤,或者设置ingress过滤但本端口在该vid对应的VLAN中的包进行STP端口状态检查,对于BPDU以外的包,只有端口处于forwarding状态,才允许包进入。之后进行原MAC地址检查,以原MAC+VID的哈希为索引查找L2 TABLE,如果没有找到,就把这个表项(原MAC+VID)以及对应的端口写到L2 TABLE中,这个过程称为MAC地址学习。当然地址学习的方法有很多种,可以是硬件学习,也可以是软件学习。紧接着进行目的地址处理:目的MAC地址为广播地址(0xffffffff)的包,在vlan内广播出去;目的MAC地址为组播地址的包,进行组播流程的处理;对于单播包,查找L2 TABLE,如果没有找到,就在vlan内进行洪泛;否则就转发到L2 TABLE表项中的端口去,在egress方向,也有egress过滤设置(默认是使能的),如果egress端口不在vlan中也是不能转发的。至此,L2转发流程完成了。
如A和服务器是同一个网络,则将网关的地址封装成数据包(须要通过ARP获得其MAC地址),此时的数据须要在不同的网络间转发,须要借助路由器的功能,通过查找路由表:
不同数据链路有各自的最大传输单位MTU,在以太网中为1500,因此在以在网中必须传比1500小的报文,为了解决这个问题,IP进行分片处理,对了目的地后再组合起来,重组只能由目标主机进行,路由器虽做分片,但不进行重组。其中IP首部中的“片偏移”字段表示分片之后每个分片在用户数据中的相对位置和该分片之后是否还有后续其他分片。根据这个字段可以判断一个IP数据报是否分片以及当前分片为整个数据报的起始,中段还是末字节。
如果IP通信中某个IP包因为某种原因未能达到目的地址,如路由器,则路由器会返回一个ICMP的包给主机A。根据路由控制的范围常使用的有IGP:内部网关协议(RIP,RIP2,OSPF,)和EGP:外部网关协议(BGP).在RIP和OSPF中利用IP网络地址进行路由控制,而BGP需要放眼整个互联网进行路由控制。BGP的最终路由控制表由网络地址和下一站的路由器组来表示。