兩台主機通信有兩種情況:1.在同一網段中 2.不在同一網段中
(1.)在同一網段的通信過程
主機在應用層上的操作:
TCP/IP協議上tcp的端口對應的各種應用程序,客戶機要訪問某個應用程序就會要求打開主機的這個固定的端口。而客戶機自己會打開一個大於1024的隨機端口用來跟對方的主機進行通信。用戶使用應用程序編輯信息,一個單一的會話,實際上就是一個主機應用層之間的邏輯的軟件連接。
主機在傳輸層的操作:
對數據分段(Segment),添加TCP報頭(包含源端口,目的端口,順序號等)
分段的原因:
(A):可同時多個應用程序發送數據。
(B):數據包過大產生錯誤時,還需重新傳送,即占帶快又占時間,小數據包對數據流影響就小很多。
(C):各種網絡傳輸介質有其最大的傳輸單元限制,不允許在網絡上出現巨大的數據包。
主機在網絡層的操作:
當傳輸層為數據分段添加了TCP頭之后,將數據下發給網絡層處理。網絡層會為傳輸層傳來的數據包添加IP報頭(包含源IP地址,目的IP地址)封裝成數據包
主機在數鏈路層的操作:
數據鏈路層在數據包的前面封裝上數據幀頭,在數據包的后面封裝上校驗位,從而把數據包封裝成數據幀。(添加源MAC地址和目的MAC地址,如果主機不知道目標MAC地址則想交換機發送ARP廣播從而得到目標MAC地址)
主機對物理層的操作:
將從邏輯鏈路層發送過來數據幀轉換成能在物理線路上傳輸的電子信號,傳遞給網絡上的轉發設備交換機,由交換機進行處理。
交換機對數據幀的處理:
交換機接收到數據流后根據發送過來的數據幀的MAC地址查找目的主機,將數據發送給目的主機。轉發過程不改變數據幀結構。
目的主機接收到數據幀的操作:
當目的主機接收到數據幀后對比目的MAC,如是發送給自己的,則拆去數據幀頭,發往網絡層,網絡層對比目的IP,如相同則拆包發往傳輸層,傳輸層再對比目的端口,確認相同則拆去數據段交給應用程進行數據組裝。
(2.)位於不同網段上的兩台主機之間的通信過程
主機A上的工作:
由於主機A和主機B並不在同一個網段,主機A是不可能通過ARP解析到主機B的MAC地址的,同時,主機A也是一個沒有路由能力的網絡節點,所以主機A是不可能依靠自己的力量把數據發送到主機B上去的。主機A必須依靠網絡中的路由器將數據包路由到相應的目的網絡。
主機A網絡配置:配置自己IP和子網掩碼 同時配置網關(誰為主機提供訪問其他網段的可能,默認網關就填誰的IP地址。‘路由器、代理服務器’)
[DNS:DNS提供目的地址的域名解析,如在局域網的不同網段內,可填本局域網內的DNS服務器。如果訪問INTERNET外網的域名,則填寫ISP的DNS服務器。]
填寫了默認網關之后,主機A通過ARP解析,就可以知道路由器A的MAC地址。當主機A要向主機B發送文件時,就可以通過路由器A將數據包發送到目的地。
例: 主機A發送數據到其他網段的B主機過程。
1.主機A應用層數據到傳輸層被分段,打上TCP頭(含源端口,目的端口),再向下發給網絡層,打上IP地址(含源IP,目的IP),再向下發送給數據鏈路層,打上數據幀(含源MAC,目的MAC),由於不知道目的MAC,則在MAC上打上於網關(路由器接口)的MAC地址,發往路由器A。
2.路由器A收到消息后,重新封裝數據幀(得知發送到B主機需要經過路由器B),於是修改源MAC地址為路由器A的MAC地址,目標地址為B的MAC地址,(路由器A進行NAT地址轉換)
3.路由器B收到路由器A的信息,核對地址,檢查IP,修改MAC,源MAC改為路由器B的MAC,(假如主機B在路由器B的子網中)目標MAC填寫主機B的MAC,即下一步將信息發送給主機B。
4.主機B接收到數據后對數據拆幀、包,TCP頭,檢查其目的地址與校驗,重新整合這些數據流之后,將這個數據流傳遞給應用層處理。
大體思路就是以上部分,學習之后再補充,2016.11.30 22:43
NAT 參考:http://blog.csdn.net/cy_cai/article/details/35986855