数据包是由每一层的首部和从上一层接受到的包的信息所组成的,每个首部都包含着该层的必要信息,如发送的目标地址和协议相关的信息。网络
如下五个术语用于描述数据单位编码
包流动的时候会从前日后依次附加以太包首部、IP包首部、TCP或者UDP首部以及传输层以上应用本身的包的首部信息。在最后也会添加一个包尾。3d
每一个包里面至少包含两个信息:一个是接收端和发送端的信息,另外一个是上一层的协议。cdn
在通过每一层的时候都会分析接收端和发送段的信息,以太网会用MAC地址,IP会用IP地址,TCP/UDP会用端口号。blog
仍是以发送邮件为例子(图解TCP这本书很喜欢发送邮件为例子),讲解一下数据包的流向过程。路由
首先应用层就是点击发送邮件,表示层进行编码处理,而会话层则控制何时创建链接发送数据。it
TCP根据会话层的指示创建起链接,为了实现与接受端的可靠传输,必须在上一层接收过来数据(应用层数据)前面添加一个首部信息。其中包括着源端口号、接收端端口号、序号(用以识别发送的包中哪部分是数据)和检验和(用于判断是否被损坏)。io
IP将TCP传输过来的TCP首部和TCP信息变成IP信息,而且在前面添加一个首部,所以IP首部后面紧随着TCP首部,以后才是数据自己。IP首部信息中包含着源IP地址,接收端的IP地址和后面协议类型(判断是否TCP或UDP)。编译
IP包生成之后会参考路由控制表后决定接受此IP包的主机,而后把IP包发送到链接这些路由的以太网驱动,实现真正得发送数据。class
接受从IP层传过来的数据之后,像IP层同样进行添加首部处理,首部的信息里面包括源MAC地址,接收端的MAC地址和以太网协议类型。
包的接收就是一个逆转过程了。
先判断MAC地址是否匹配,不匹配则丢掉。
若是匹配则判断以太网协议类型,若是是IP则交给IP模块处理,若是是其余协议如ARP协议,则交给ARP处理。若是遇到识别不了的协议,则丢掉。
接收到IP包首部和后面的数据之后,先分析IP地址是否匹配。若是匹配,则判断上一层协议类型,交给相关的协议处理(TCP或者UDP)。若是有路由器的状况下,IP是每每不匹配的,须要借助路由控制表进行转发处理。
首先计算校验和,判断是否损坏。而后判断是否按照序号接收数据,最后检查端口号,肯定具体的应用。
若是接受完毕,接收端会发送一个确认给发送端。若是发送端没收到,会一直发送数据。
当数据接收完成后会传给相关端口号的应用。
经过表示层的编译后会传输到应用层,若是应用层上没有相关的邮件地址,则会返回给发送端一个错误信息。若是硬盘超出负荷,也会报错。