ip数据报的转发
IP數據包經由路由轉發的時候源IP,目的ip是否改變?
這是個搞網絡的基礎問題,答案是不能改變的,除非做了nat轉換才能改變。否則,數據包在整個傳輸過程中,源IP和目的IP不會發生改變。
不過MAC地址是變化的,因為發送端開始不知道目的主機的MAC地址,所以每經過一個路由器,MAC地址都會發生變化。
目的MAC地址是如何得到的?
TCP/IP里面是用的ARP協議。比如新建了一個內網,如果一臺機器A找機器B,封裝Fram時(OSI的第二層用的數據格式),要封裝對方的 MAC,開始時A不知道B的MAC,只知道IP,它就發一個ARP包,源IP是自己的,目的IP是B的,源MAC是自己的,目的MAC是廣播的。然后這個ARP請求包在內網內被廣播,當其他機器接到這個包時,用目的IP和自己的IP比較,不是的話就丟棄。是的話,B接到時,發現IP與自己的一樣,就答應這個包的請求,把自己的MAC送給A。如果B是其他子網的機器,那么路由器會判斷出B是其他子網,然后路由器把自己的MAC返回給A,A以后再給B發包時,目的MAC封裝 的是路由器的。
路由轉發過程:
當主機A發向主機B的數據流在網絡層封裝成IP數據包,IP數據包的首部包含了源地址和目標地址。主機A會用本機配置的24位IP網絡掩碼255.255.255.0與目標地址進行與運算,得出目標網絡地址與本機的網絡地址是不是在同一個網段中。如果不是將IP數據包轉發到網關。
在發往網關前主機A還會通過ARP的請求獲得默認網關的MAC地址。在主機A數據鏈路層IP數據包封裝成以太網數據幀,然后才發住到網關……也就是路由器上的一個端口。
當網關路由器接收到以太網數據幀時,發現數據幀中的目標MAC地址是自己的某一個端口的物理地址,這時路由器會把以太網數據幀的封裝去掉。路由器認為這個IP數據包是要通過自己進行轉發,接著它就在匹配路由表。匹配到路由項后,它就將包發往下一條地址。
路由器轉發數據包就是這樣,所以它始終是不會改IP地址的。只會改MAC.
當有數據包傳到路由器時,路由器首先將其的目的地址與路由表進行對比,如果是本地網絡,將不會進行轉發到外網絡,而是直接轉發給本地網內的目的主機;但是如果目的地址經路由表對比,發現不是在本網中,有nat就將改變源地址的IP(原源地址的Ip地址改為了路由器的IP地址),路由器將數據包轉發到相應的端口,進行通信。
舉個例子,如:A訪問B:
首先對比是否同一子網,如果是,檢查ARP表,有B的MAC就直接發送,沒有就發送ARP請求.如果否,發送到默認網關C,源IP為A,源MAC為A,目的IP為B,目的MAC地址為C,
C接收到這個包,檢查路由表,發送到下一跳D,源IP為A,源MAC為C,目的IP為B,目的MAC為D……
如此循環,直到發送到B.
NAT為特殊應用,會修改源IP為網關自己外網IP。
需要注意的是:ARP高速緩存中存儲的是本局域網內,mac地址與ip地址的映射。
原文鏈接:https://blog.csdn.net/weixin_33953384/article/details/85066699
總結
- 上一篇: 旅游业的未来
- 下一篇: 互联网晚报 | 9月7日 星期二 | 徐