TCP数据包的旅程和每一跳中的更改(IP地址和端口发生)

Rat*_*lle 1 networking routing mac-address ipv4 tcp-ip

我试图了解Hop期间IP数据包发生了什么样的结构变化.

请允许我以示例解释我的问题.

traceroute -w 1 google.com

traceroute to google.com (216.58.199.174), 64 hops max, 52 byte packets
 1  192.168.0.1 (192.168.0.1)  1.055 ms  0.857 ms  0.822 ms
 2  10.0.0.1 (10.0.0.1)  2.038 ms  1.477 ms  1.540 ms
 3  * * *
 4  114.79.130.1.dvois.com (114.79.130.1)  3.091 ms  2.076 ms  2.329 ms
 5  10.241.1.6 (10.241.1.6)  3.245 ms  3.102 ms  3.358 ms
 6  10.240.254.140 (10.240.254.140)  4.388 ms  2.149 ms  2.319 ms
 7  10.240.254.1 (10.240.254.1)  3.067 ms  3.336 ms  2.852 ms
 8  10.241.1.1 (10.241.1.1)  2.542 ms  2.339 ms  3.231 ms
 9  1.186.191.10.dvois.com (1.186.191.10)  3.046 ms  3.076 ms  3.382 ms
10  216.239.62.212 (216.239.62.212)  3.290 ms  3.559 ms  3.466 ms
11  209.85.143.5 (209.85.143.5)  3.699 ms  3.250 ms  4.062 ms
12  bom05s08-in-f174.1e100.net (216.58.199.174)  3.739 ms  4.038 ms  3.803 ms
Run Code Online (Sandbox Code Playgroud)

假设我正在向google.com提出请求

IP数据包源自我的机器的第一件事就是将这个位添加到数据包中.

  1. (我的机器)源IP即假设它 192.168.0.100
    • 此外,为了简单起见,我们还会根据请求来分配端口号 6000
  2. 目标IP即google.com IP 216.58.199.174(为了简单起见,还指定了目标端口,假设它是80)
  3. 我的mac地址

还有其他细节,IP数据包包含,但我们只关注这3部分

现在我知道IP数据包在跳跃中的其他设备/路由器的帮助下从源传输到目的地(可以在traceroute输出中看到)

但我不清楚IP数据包中的源IP和端口是否在Hop中更新.

我假设它是这样的,因为它来自服务器的响应(这里的谷歌服务器)可以被转发回请求的预期发起者(即我的笔记本电脑浏览器窗口).

所以,如果我所假设的是正确的.这就是事情的运作方式

在第一跳到我的路由器我的路由器更新源IP 192.168.0.1和源端口到6001(假设)在内部它维护一个反向条目表告诉我如果我碰巧192.168.0.1在端口收到响应6001然后我必须将它路由192.168.0.100到端口6000.

像中的每个跳明智(跳变到114.79.130.1.dvois.com,1.186.191.10.dvois.com等等)一个条目是更新即源IP和源端口(在IP包)和反向映射被保持来中继回响应.

我的理解是否正确?也是在跳跃中MAC发生的事情.

Ron*_*pin 5

您需要查看网络层.应用程序将数据发送到传输层,例如TCP.

TCP具有称为端口的地址,并且应用程序被分配给其中一个地址,例如端口6000.TCP将对这些数据进行分段,并将TCP标头放在数据段上.TCP标头包括源和目标端口号.

TCP将段发送到第3层(IPv4或IPv6).IP将TCP段封装成IP数据包.IP数据包标头将包含源和目标IP地址.

IP将IP数据包发送到第2层,例如以太网.并非所有第2层协议都使用MAC地址.MAC LAN地址由IEEE LAN协议使用.其他第2层协议使用其他内容,或者根本不使用任何内容进行寻址.以太网将第3层IP数据包封装在第2层以太网帧中.以太网帧将具有源和目标MAC地址.主机(您的计算机)将屏蔽源和目标第3层IP地址,以确定目标地址是否在同一LAN上.如果目标位于同一LAN上,则将使用目标主机的MAC地址寻址帧,否则将使用配置的网关的MAC地址作为目标主机进行寻址.这将需要将第3层地址解析为第2层地址.ARP(地址解析协议)将查看目标主机MAC地址是否在其ARP缓存中.如果不是,它将发送ARP请求以获取目标MAC地址.

然后,第2层将帧发送到第1层(物理接口)进行编码并放置在线路上.

当路由器接收到帧时,第2层帧(包括MAC地址)将从数据包中剥离并丢弃,从而丢失原始MAC地址.路由器将递减TTL并创建新的报头校验和,并检查第3层IP数据包以获取目标地址.然后,路由器将查找如何到达其路由表中的目标IP地址.如果在路由表中找不到到目的IP地址的路由,则丢弃该数据包,否则路由器会将数据包切换到目的地的下一个接口,并为新接口创建新的第2层帧.如果下一个接口是WAN接口,它可能使用不使用MAC地址的PPP.

路径中的下一个路由器将获得新帧,并将重复路由过程.这种情况发生在数据包到达最后一个路由器之前,最后一个路由器将放在目标LAN的帧上.目标主机将从发送主机以相反的顺序处理.目标主机将具有来自数据包和段的源第3层和第4层地址,并且它可以使用这些地址以与原始主机是发送方相同的方式发送回源.

路由器是第3层设备,它们只查看第3层数据包,而不是第4层数据包.路由器只会更改数据包的TTL和Header Checksum字段.