網絡:不同主機,進程間通信
達到不同主機之間的困難:
? ? ? ? 解決主機之間的硬件層面的互聯互通
? ? ? ? 解決主機之間的軟件層面的互聯互通
廣域網:進行大范圍網絡數據交換
IP地址:區分不同主機 唯一的(軟件地址)
MAC地址:硬件地址
端口號:區分同一主機上的不同進程
網絡字節序:大端(逆序)
主機字節序:小端(順序)
1.osi七層模型
? OSI:開放系統互聯模式
? ? ? ? ? ? ? ? 應用層 :要傳輸的數據信息,如文件傳輸,電子郵件等;
? ? ? ? ? ? ? ? 表示層:數據加密,解密操作,壓縮,解壓縮;
? ? ? ? ? ? ? ? 會話層:建立數據傳輸通道;
? ? ? ? ? ? ? ? 傳輸層:傳輸的方式UDP TCP 端口號
? ? ? ? ? ? ? ? 網絡層:實現數據路由 路由器 ip
? ? ? ? ? ? ? ? 數據鏈路層:封裝成幀,點對點通信(局域網內通信),差錯檢測 交換機 ARP
? ? ? ? ? ? ? ? 物理層:定義物理設備標準,比如網線,光纖等傳輸介質 ?比特流 ?bit ?0 1
2.TCP/IP模型 ? ? ? ? ??
????????2.1五層模型
????????????????應用層:HTTP(超文本傳輸協議)、HTTPS(比HTTP多一層加密協議)、FTP(文件傳輸協議)、TFTP(簡單文件傳輸協議,下層選擇不一樣)、MQTT(消息隊列遙測傳輸協議)
? ? ? ? ? ? ? ? 傳輸層:TCP(傳輸控制協議)、UDP(用戶數據報協議)
網絡層:
? ? ? ? ? ? ? ? 數據鏈路層:封裝成幀,點對點通信(局域網內通信),差錯檢測 ? 交換機
? ? ? ? ? ? ? ? 物理層:定義物理設備標準,比如網線,光纖等傳輸介質 ? 比特流 ?bit
? ? ? ? 2.2四層模型
?????????????????應用層:HTTP、HTTPS、FTP、TFTP、MQTT
? ? ? ? ? ? ? ? 傳輸層:TCP(傳輸控制協議)、UDP(用戶數據報協議)
? ? ? ? ? ? ? ? 網絡層: IP
? ? ? ? ? ? ? ? 網絡接口層: 網絡接口層既是傳輸數據的物理媒介,也可以為網絡層提供一條準確無誤的線路
3.網絡層協議
? ? ? ? 3.1IP(ipv4"32bie"\ipv6"64bit")
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 網絡位:子網掩碼全為1的位是ip地址的網絡位
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 192.168.1.0(網段號:IP地址網絡位不變,主機位全為0,則為該P地址的網段號)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 廣播號:192.168.1.255:IP地址網絡位不變,主機位全為1
網關號:192.168.1.1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 主機位:子網掩碼全為1的位是ip地址的主機位
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 子網掩碼: ?255.255.255.0(前三個是網絡位,最后一位是主機位)
? ? ? ? 3.2端口號:區分同一主機上的不同進程
????????????????*16位的數值 0-65535作用:唯一的標識一個進程每一個應用進程都有一個端口號;通訊時用來區分數據包屬于哪一個進程。
Mtp :80
????????????????FTP:20/21
????????????????TFPT: 69
????????????????HTTPS: 443
????????????????MQTT:1883
ip是面向計算機的,域名是面向人的(將域名解析為ip地址? DNS"域名解析服務”)
4.udp編程常用接口
客戶端:
? ? ? ? socket():創建網絡套接字
? ? ? ? sendto():發送數據包
? ? ? ? recvfrom():接受數據包
? ? ? ? close():關閉套接字
int socket(int domain,int type,int protocol)
功能:創建一個通信套接字
參數:domain:ip層協議族
? ? ? ? AF_INET ?IP4
? ? ? ? AF_INET6 ?IP6
type:傳輸層使用的協議類型
? ? ? ? SOCK_DGRAM UDP
? ? ? ? SOCK_STREAM TCP
protocol:
? ? ? ? 0按照默認協議返回值
返回值:
成功:返回套接字
失敗:-1
size_t ?sendto(int sockfd,const void *buf,sizeof_t len,int flags,const struct sockaddr *dest_addr,socklen_t addrlen);
功能:向通信套接字發送數據
參數:sockfd:套接字
buf:要發送的數據的首地址
len:發送的數據的大小
flags:默認方式 0
dest_addr:保存接受方地址信息的指針
.sin_port = htons(50000)//
.sin_addr.s_adde =inet_addr("ip地址")//將地址轉為un int ?inet_ntoa(int 轉char)
addrlen:接收方地址變量的大小
返回值:
成功:實際發送的字節數
失敗:-1
服務端:
? ? ? ? socket()
? ? ? ? bind():綁定服務器當前主機的身份(IP+PORT)
? ? ? ? recvfrom():接收
? ? ? ? sendto():發送
? ? ? ? close():關閉
bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen)
功能:綁定當前主機的ip和進程的端口
參數:?sockfd:套接字
addr:自己信息的地址
addrlen:地址信息的大小
返回值:
成功:0
失敗:-1
?ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:從套接字接受數據
參數:sockfd:套接字
buf:存儲接收到的數據的位置的首地址
len:期待接收到的字節數
flags::默認方式:0
src_addr:送發地址信息的首地址addrlen:送發方地址變量的大小
返回值:
成功:返回接收到的字節數
失敗:-1
B/S模型:browser/server 客戶端(通用)(瀏覽器)/服務端(專用)
C/S模型:client/server 客戶端(專用)/服務端(專用)