網絡基礎
網絡中使用到的三種裝置
ip位址和ip位址的分類
資料在區域網路中如何傳輸
資料跨網段傳輸
基于tcp的網絡程式設計
tcp伺服器
代碼示例
tcp用戶端
修改tcp用戶端代碼
并發伺服器的實作
修改基本伺服器代碼
多程序實作伺服器并發
基于udp的程式設計
udp用戶端流程
udp的伺服器流程
所有的網絡程式設計都是基于用戶端和服務端的架構
網絡協定也就是規則。
水晶頭大小及網卡接線都是遵守的一種電氣協定,而以太網卡、令牌環網卡則都是遵守一種邏輯協定。
網絡通訊采用的協定是tcp/ip協定簇。
分别有:
osi七層模型
tcp/ip協定分為四層或者五層:
實體層
規定了網絡中使用到的電氣協定。
鍊路層
規定了網絡幀的格式。
補充:
網絡位址分為:
hub集線器
隻是将電信号放大分流,屬于實體層。
交換機
交換的是網幀,屬于鍊路層。
路由器
交換的是ip包,屬于網絡層。
ip位址包含兩部分内容:
主機号 确定了在網絡中的編号
網絡号 确定了ip位址屬于的網絡
網絡通訊中需要自動找出ip位址的網絡号
使用子網路遮罩找出ip位址的網絡号
192.168.1.130/24
192.168.1.130/255.255.255.0
ip位址和子網路遮罩做與操作,結果就是ip位址的網絡号
192.168.1.0
ip位址:192.168.1.130/25
子網路遮罩:255.255.255.128
192.168.1.128 192.168.1.129~192.168.1.254
ip位址:192.168.1.125/25
192.168.1.0 192.168.1.1~192.168.1.126
判斷目标ip位址和自己的ip位址是否是同一網段
在路由表中查找是否要出網
在本機的arp表中查找目标ip位址的mac位址。
如果arp表中有目标ip位址的mac位址。将資料發送到目标
如果arp表中沒有目标ip位址的mac位址。本機發起廣播,詢問誰的ip位址是目标位址。目标機器接收到消息,回應自己的mac位址給廣播者。這時候廣播者将資料發送過去。
網關
路由表
sudo route
arp表
sudo arp -a
測試通訊路徑是否暢通。使用ping指令
ping 目的ip位址
127.0.0.1 測試本機的網絡裝置是否正常。
環回位址
三次握手
和對方通訊的時候,需要知道對方的ip位址和端口号
基于tcp的程式設計模型
建立通訊端socket,擷取通訊描述符。
将通訊描述符和伺服器的ip位址及端口号綁定
監聽通訊描述符
阻塞等待用戶端請求的到來,擷取連接配接描述符
擷取用戶端的資料
資料處理
将處理後的資料傳回用戶端
關閉和用戶端的連接配接。
主機位元組序、網絡位元組序(大端)
具體的網絡位址空間和通用的網絡位址空間轉換
具體網絡協定族有ipv4 ipv6 local unix。
通用的位址空間 struct sockaddr類型的
sockaddr_in
server.c
使用socket建立通訊描述符
使用connect連結伺服器
使用write向伺服器發送資料。
等待伺服器的響應。
關閉和伺服器的連結。
client.c
執行結果
修改為可以使用參數連接配接伺服器位址及通過标準輸入擷取發送字元串。具體如下:
client_pro.c
使用線程實作并發伺服器
多路複用技術實作伺服器的并發(select 、poll)
使用多程序實作伺服器的并發(父程序負責監聽用戶端連接配接的到來,子程序負責處理用戶端請求,fork在accept後添加合适)
bserver.c
建立通訊描述符
使用通訊描述符向伺服器端發送資料
等待伺服器端的響應資訊
關閉通訊描述符
将通訊描述符和伺服器位址空間綁定
recvfrom等待用戶端資料的到來
處理用戶端的資料
回應用戶端消息
userver.c
uclient.c