应用层:首先结合应用层的协议,我们把这些数据放到一个缓冲区内,然后形成了应用层的报文data。
传输层:数据通过传输层发送,比如TCP。在这里报文打上了传输头的包头(TCP/UDP),主要包含端口号。这样就组成了tcp的数据传送单位segment。tcp是一种端到端的协议,利用这些信息,比如tcp首部中的确认序号(根据这个确保数据顺序接收,IP也有不过那叫分片),根据这些数字,发送的一方不断的进行数据发送和等待确认,发送一个数据段后,会开启一个计数器,只有当收到确认后才会发送下一个,如果超过计数时间仍未收到确认则进行重发,在接受端如果收到错误数据,则将其丢弃,这将导致发送端超时重发。通过tcp协议,控制了数据包的发送序列的产生,不断的调整发送序列,实现流控和数据完整。
网络层:然后将待发送的数据段送到网络层,在网络层被打包,封装上了网络层的包头(IP),包头内部含有源及目的的ip地址,该层数据发送单位被称为packet。网络层开始负责将数据包在网络上传输,如何穿过路由器,最终到达目的地址。在这里,根据目的ip地址,查找下一跳路由的地址。
- (1)根据目的地址,得到目的网络号,如果处在同一个内网,则可以直接发送。
- (2)如果不是,则查询路由表,找到一个路由。
- (3)如果找不到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
- (4)数据包中包含一个最大路由跳数(TTL),如果超过这个跳数,就会丢弃数据包,这样可以防止无限传递。
如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或 “网络不可达”的ICMP错误。