※ 引述《prudent (prudent)》之銘言:
: 如題
: 如果說同一台電腦上執行了使用相同 port 的網路程式
"通常" 同一個port不能被不同程式共用~
更嚴謹一點講,
以 TCP 來說, 每一個 address/port pair 只能被 bind 一次
可以是單一address與某個特定port, 或是全部的address與某個port
ex: 192.168.1.1:80 或 本機所有 *:80
如果想要特定的幾個address(非本機所有address), 那就要每個addr各別bind
若是 SCTP 的話, 就可以直接指定特某幾個addresses/port binding
一旦bind後就會被獨站, 因此不同程式不能共用相同的 addresses/port
不過理論上同一電腦上的不同address/port
ex: 192.168.1.1:80 與 192.168.1.2:80
應可各別單獨被不同程式使用 (我沒試過, 不過應該可以)
: 在系統上是如何辨別彼此的呢
: 收到的封包怎麼樣知道該丟給哪一個網路程式處理呢??
: 查書後,書上是寫說有紀錄一些 client 與 server 的訊息
應是以 source addr/port 與 dest addr/port 作辨別的依據
(我沒看到什麼書上有明確這麼寫, 但從 Linux 的 TCP 實作看起來是這樣 .__.
有誤還請其他高手指教)
: 但是到底紀錄了什麼?? 以及紀錄在哪裡呢??
: 以下猜測
: 是記錄了 PID 相關的資訊嗎? 是紀錄在作業系統核心內嗎??
: 還是說記錄在封包哪面??
系統自己利用 header 中的 saddr/port daddr/port
與系統內部維護的連線資訊來判斷~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.128.156