1.網路模型包含,osi七層模型,tcp/ip模型
2.鏈路層,主要功能是在兩個網路實體之間提供資料鏈路連線,其中主要使用的協議是arp協議
3.網路層,主要作用是實現遠端裝置連線,其中主要使用協議是ip協議
4.傳輸層,主要是對資料報的分割,重組,排序,重傳和連線保證資料準確到達另一端tcp/udp
5.應用層,主要面對使用者,常見協議,dns,http,pop3,smtp,telent
6.協議棧,一組協議系統工作
7.資料報分析和嗅探,主要功能是,收集網路鏈路上的二進位制資料來源,轉換二進位制可讀形式,分析統計
windows下套接字程式設計
通過自己編寫程式,實現對的簡單加密(使用最簡單加密方式xor)傳送,在服務端接收到資料後進行解密,並正確顯示,同時使用wireshark進行抓包練習,抓取該資料報找到對應的資料,
wireshark工具學習:《wireshark 資料報分析實戰(第二版)》
思路:1.完成程式的編寫,
服務端**:winsockdemo.cpp,
// winsockdemo.cpp : 定義控制台應用程式的入口點。
//server
//1.包含標頭檔案及庫
//2.初始化環境
//3.繫結
//4.監聽
//5.接收
//6.收發訊息
#include "stdafx.h"
#include #include #pragma comment(lib, "ws2_32.lib")
using namespace std;
//資料解密
char *xordata(char *pdata, int nsize)
return pdata;
}int _tmain(int argc, _tchar* argv)
; if (wsastartup(makeword(2, 2), &wsd))
//判斷版本號
if (!(lobyte(wsd.wversion) == 2 &&
hibyte(wsd.wversion) == 2))
//2.建立套接字
socket sockserver = socket(af_inet, sock_stream, ipproto_tcp);
if (sockserver == invalid_socket)
//3.繫結位址埠號
sockaddr_in addrserver = {};
addrserver.sin_family = af_inet;
addrserver.sin_addr.s_un.s_addr = inet_addr("192.168.1.245");// 192.168.43.110
addrserver.sin_port = htons(1234);
int nret = bind(sockserver, (sockaddr*)&addrserver, sizeof(sockaddr_in));
if (nret == socket_error)
//4.監聽
nret = listen(sockserver, 5);
if (nret == socket_error)
//5.接收連線
sockaddr_in addrclient = {};
int nsize = sizeof(sockaddr_in);
socket sockclient = accept(sockserver, (sockaddr*)&addrclient, &nsize);
if (nret == socket_error)
//6.收訊息
nret = send(sockclient, "server:link success!", strlen("server:link success!"), 0);
if (nret == socket_error)
//收訊息
char recvbuf[1024] = {};
nret = recv(sockclient, recvbuf, 1024, 0);
if (nret == socket_error)
printf("%s", recvbuf);
//接收由客戶端傳送的
//建立檔案
//儲存接收到的
while (true)
; nret = recv(sockclient, bufrecv, 1024, 0);
//解密
char *pdata = xordata(bufrecv, nret);
if (nret == socket_error)
else if (nret < 1024 && nret>0)
else if (nret == 1024)
}closesocket(sockclient);
closesocket(sockserver);
wsacleanup();
system("pause");
return 0;
}
客戶端**:winsockdemoclient.cpp,
// winsockdemoclient.cpp : 定義控制台應用程式的入口點。
//client
//0.包含標頭檔案及庫
//1.初始化程式設計環境
//2.建立套接字
//3.連線
//4.收發訊息
#include "stdafx.h"
#include #include #pragma comment(lib, "ws2_32.lib")
using namespace std;
//獲取到緩衝區
}//資料加密
char *xordata(char *pdata, int &nsize)
return pdata;
}int _tmain(int argc, _tchar* argv)
; if (wsastartup(makeword(2, 2), &wsd))
//判斷版本
if (!(lobyte(wsd.wversion) == 2 &&
hibyte(wsd.wversion) == 2))
//2.建立套接字
socket sockclient = socket(af_inet, sock_stream, ipproto_tcp);
if (sockclient == invalid_socket)
//3.連線伺服器
sockaddr_in addrserver = {};
addrserver.sin_family = af_inet;
addrserver.sin_addr.s_un.s_addr = inet_addr("192.168.1.245");// 192.168.43.110
addrserver.sin_port = htons(1234);
int nret = connect(sockclient, (sockaddr*)&addrserver, sizeof(sockaddr));
if (sockclient == socket_error)
//4.收訊息
char recvbuf[1024] = {};
nret = recv(sockclient, recvbuf, 1024, 0);
if (nret == socket_error)
printf("%s", recvbuf);
//發訊息
nret = send(sockclient, "client:link success!", strlen("client:link success!"), 0);
if (nret == socket_error)
//傳送
//1.讀取檔案到緩衝區
//資料加密
char *pdata = xordata(pread, nsize);
//2.傳送
while (true)
; memcpy(p, pdata, 1024);
nret = send(sockclient, p, 1024, 0);
pdata += 1024;
nsize -= 1024;
if (nsize < 1024)
}closesocket(sockclient);
wsacleanup();
system("pause");
return 0;
}
2.開啟wireshark工具選擇對應的網絡卡,開始進行抓包,由於直接在本機進行測試,因此直接新增過濾資料報條件ip.dst == 192.168.1.245 && ip.src == 192.168.1.245,過濾資料報,然後本機抓取本機資料報需要新增一條靜態路由,使用命令route add 192.168.1.245 mask 255.255.255.255 192.168.1.1,即可抓取本地資料報。
網路協議 學習筆記(一)
語法 協議內容要符合一定的規則和格式 語義 協議內容要代表某種意義 順序 協議規定要先乾啥,後幹啥 應用層 dhcp http https rtmp p2p dns gtp rpc 傳輸層 udp tcp 網路層 icmp ip ospf bgp ipsec gre 鏈路層 arp vlan stp...
趣談網路協議筆記 一
第一講 為什麼要學習網路協議 第二講 網路分層的真正含義是什麼?第三講 ifconfig 最熟悉又陌生的命令列 第四講 dhcp與pxe ip是怎麼來的,又是怎麼沒的 第一模組正如其名只是乙個綜述,不會對於每個細節都拿捏到極致,我也不會死扣細節,只希望能夠對整體有乙個了解,不能只見樹木不見森林!人類...
網路協議筆記
總結記錄網路協議相關知識。osi七層模型 tcp ip四層模型 五層模型 資料型別 常用協議 應用層應用層 應用層資料 表示層資料 會話層資料 傳輸層傳輸層 傳輸層分段 tcp udp 網路層網際層 網路層分組 資料報 ip icmp igmp arp 資料鏈路層 網路介面層 資料鏈路層 幀sdlc...