TCP/IP详解——数据转发过程
文章目录
一、数据转发过程
数据转发过程
- 数据从接口发出时,第一个承接的设备是二层交换机,二层交换机识别最外层以太网封装的。会按照源MAC和目的MAC在局域网之间进行一个短距离的传输。传递给路由器。
- 路由器会获取到交换机传递来的数据。路由器是根据IP地址进行转发的,所以会解封装查看IP地址。确认好IP地址后,在其发送出去的时候会重新封装一层以太网。
- 最终数据会传递到服务器中。而服务器是一个七层的,同样会进行逐层的解封装,然后查看端口号对应的服务是否开放,应用程序对数据进行处理。之后服务器会给客户端进行响应,同样的流程进行封装和解封装。
交换机转发的是数据帧
因特网中转发的是数据包
实例
运行FTP的两台主机
- 大多数的网络应用程序都被设计成客户——服务器模式。
- 双方都有对应的一个或多个协议进行通讯。
- 应用程序通常是用户进程,而下三层一般在内核执行(链路层,网络层,传输层)。
- 应用层关心应用程序的细节,下三层处理通讯细节。
通过路由器连接的两个网络
-
端系统:pc和服务器(end system)。
-
中间系统:路由器(intermediate system)。
-
应用层和传输层使用端到端(end-to-end)协议。
-
网络层提供的是逐跳(hop-to-hop)协议。
-
网络IP提供的是一种不可靠的服务,只是尽可能快的把分组从源节点送到目的结点,但是不提供可靠性保障。
-
TCP在不可靠的IP层上提供了一个可靠的传输层。
-
链路层逐介质的。
-
互联网的目的之一就是在应用程序中隐藏所有的物理细节。
封装
分用
1. TCP封装(传输层封装)
-
当建立TCP连接后,开始对应用层数据进行封装。首先执行数据相关加密和压缩操作,然后进行传输层封装。Web应用基于传输层的TCP协议传输数据。
-
使用TCP进行报文封装,首先填充源端口,目的端口字段,初始序列号,确认序列号,标识位,窗口字段以及校验和字段。源端口号主机A随机选择1027端口,目的端口为服务器的TCP知名端口80。
2. IP封装(网络层封装)
-
主机A完成传输层封装,一般进行网络层数据封装,使用IP封装时,需明确IP报文源地址和目的地址,且IP报文大于网络最大传输单元(MTU),则该报文有可能在传输中被分片。
-
TTL字段用来减少网络环路造成的影响。
-
协议字段Protocol标识传输层使用协议,如使用TCP,则为0X06。
3. 查找路由
- 每个主机维护各自的路由表项,主机A发送数据前检查能否到达目的端,是通过查找路由来完成的。
- 本例中,主机A有一条到达“任何网络”的路由,它发往其他网络的数据都通过IP地址为10.1.1.1的接口跳到网关10.1.1.254。
4. ARP(数据链路层封装)
- 接下来,数据包要封装成帧,需要下一跳MAC地址,也就是网关MAC地址,主机首先查询ARP缓存表,本例中ARP缓存表存在网关MAC地址表项。
- 如果没有查到,会通过发送ARP请求获取网关MAC地址。
5. 以太网封装
- 主机A封装数据帧的时候,遵循IEEE 802.3 或Ethernet_II 标准,Ethernet_II 帧头类型字段填充为0X0800,表示IP协议。并填充上源MAC地址和目的MAC地址。
6. 数据帧转发过程
- 主机工作在半双工状态,用CSMA/CD来检测链路是否空闲。如果空闲,主机A还会将一个前导码(Preamble)和一个帧首定界符(SFD)附加帧头上。
- 前导码作用是使接受设备进行同步并做好接受数据帧的准备,包括7个字节的1,0交替代码,即101010…10共56位。
- 帧首定界符是长度为1个字节的10101011二进制序列,是使接收端对帧第一位定位。
7. 数据帧转发过程
本例中数据帧发送到共享以太网,此网络所有设备都会收到。
- 收到帧后,首先进行FCS校验,与本机计算的值对比来确定帧在传输过程中是否保持了完整性,未通过直接丢弃,然后再看MAC地址。
- 如果目的MAC地址与自己不同,丢弃。相同继续处理,处理过程中帧头帧尾会被剥去(解封装),剩下数据报文根据帧头类型字段值送到网络层对应协议模块处理。
8. 数据包转发过程
- RTA收到收到数据报文后,网络层进行处理,首先根据IP头部检验和字段检查IP头部完整性。
- 根据目的IP查看路由表,确定是否能够将数据包转发到目的端。
- RTA还会对TTL值进行处理。
- 报文不能超过MTU值,否则将会被分片。
- 网络层处理完成后,报文将送到数据链路层重新进行封装,成为一个新的数据帧,该帧头部封装新的源MAC地址和目的MAC地址。如果不知道下一跳MAC地址,将使用ARP协议来获得。
9. 数据帧解封装
数据链路层解封装
-
RTB继续以服务器A的MAC地址作为目的MAC继续转发。在一个网络中,两台服务器都会受到数据帧,只有服务器A的数据帧发现目的MAC地址为自己的MAC地址,会继续处理该数据帧。
-
服务器A收到该帧,先查看MAC地址是否和自己的MAC地址一致,如果一致那么进行FCS校验,通过FCS校验,根据帧中类型字段判别上层协议即网络层协议,解封装后交给网络层IP协议进行处理。
10. 数据包解封装
网络层解封装。
- 首先会通过检验和字段验证报文头的完整性。
- 服务器A检查数据包目的IP地址,发现与自己IP相同。
- 如果数据传输中发生分片,在目的端会重新组合,标识字段标识属于同一数据源的分片报文,偏移量(Fragment Offset)是该分片在原分片组的相对位置。
- 标志字段Flags只有两位有意义,最低位为1,表示后面还有分片,为0表示已经是最后一个数据片,中间一位为1表示不能分片,为0表示允许分片。所有分片被目的端全部接受后才进行重新组合。
- 协议字段表示上层是哪种协议(下一个报头并非一定是传输层协议,也可能是网络层的ICMP报文,也是用IP协议进行封装,协议字段0x01)
11. 数据段解封装
传输层解封装。
- IP报文头被剥离后,发送到传输层进行处理,此例中使用TCP,且已经通过三次握手进行链接,TCP查看目的端口号为80,用于表示处理该数据的应用层协议为HTTP协议,TCP处理完头部信息后将此数据段头部剥离,将剩余的应用程序数据发送给HTTP协议进行处理。
12. 总结
-
数据在进行二层和三层封装之前,主机需要了解哪些信息?
- 主机在封装数据包之前,必须要知道目的端IP地址。
- 在封装数据帧之前,必须要知道去往目的网络的路由以及下一跳的MAC地址。
-
当数据帧发送到非目的主机时,非目的主机将如何处理?
- 如果主机接收到一个不是发往自己的数据帧,在检验帧头中的目的MAC地址之后会丢弃该帧。
-
传输层如何能够准确的将数据交给特定应用?
- 传输层会检查TCP或UDP报文头中的目的端口号,以此来识别特定应用。
-
当两台主机同时访问服务器HTTP服务,该服务器如何区分数据属于哪个会话?
- 服务器可以只通过源IP地址识别两台主机的HTTP流量,另外TCP报文头中包含的源端口也可以被用来区分同一台主机通过不同的浏览器发起的不同的会话。例如,两个来自源IP为10.1.1.1的HTTP流量使用的目的端口号都是80,但源端口号可能为1028和1035。
源端口
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!