網路基礎(二)

2021-08-22 16:11:15 字數 3308 閱讀 2718

應用層(重要寫**)

協議:是雙方的一種約定

報頭:http協議(超文字傳輸協議)

urlencode:特殊字元的編碼

urldecode:編碼之後的解碼

http抓包

http常見header:

cookie:儲存身份標識,避免重複登入,存字串,儲存資料有限(4k)

post:有body

get:沒body

referer:當前頁面是從哪個頁面跳轉過來的,通過公升級成https來解決修改referer問題

location:告訴接下來要去哪個頁面,搭配3xx使用

set_cookie:儲存身份資訊,下次訪問此網路是就不需要在登入

http狀態碼(響應結果如何):

2開頭:成功

3開頭:重定向(302重定向到其他頁面)

4開頭:客戶端異常(例404,418(彩蛋))

5開頭:伺服器異常(504(閘道器超時))

http請求(客戶端發給伺服器)

首行:方法+url+http版本號

header:請求屬性 冒號空格鍵值對

由空行結束

body:空行後面的都是body

http響應(伺服器回發給客戶端)

首行:http版本號 +狀態碼  +對狀態碼的含義補充    

header:鍵值對

空行表示header結束

body:空行後面都是body

寫乙個最簡易版本的http伺服器

//不管什麼請求,響應都是hello world

#include #include #include #include #include #include #include #include //其實可以使用c++多型來解決類似問題

typedef struct sockaddr sockaddr;//通用形式

typedef struct sockaddr_in sockaddr_in;//儲存真正的ip位址和埠號

int serverinit(const char *ip,short port)

sockaddr_in addr;

addr.sin_family = af_inet;

addr.sin_addr.s_addr = inet_addr(ip);

addr.sin_port = htons(port);

socklen_t len = sizeof(addr);

int ret = bind(fd,(sockaddr *)&addr,len);

if(ret < 0)

ret = listen(fd,5);

if(ret < 0)

return fd;

}void *threadentry(void *arg)

;    read(new_fd,buf,sizeof(buf)-1);

printf("[request] %s\n",buf);

//構造http的響應

//首行

//字串拼出來啥樣頁面就是啥樣

//多執行緒版本

while(1)

pthread_t tid;

pthread_create(&tid,null,threadentry,(void *)new_fd);

pthread_detach(tid);

}  return 0;

}

應用層協議:http,https,ftp,ssh......,還有自定製的協議,序列化與反序列化

傳輸層(問題除錯)

埠號埠號範圍劃分

0-1023:知名埠號,一些知名的應用層協議http,ftp等都有固定的埠號

1024-65535:作業系統動態分配的埠號

知名的埠號

乙個程序可以繫結多個埠號,建立多個程序就可以同時繫結多個埠號了

乙個埠號不能被多個程序繫結

(易考)檢視程序的pid

ps aux | grep 程序名:檢視程序的pid

pidof 程序名

(易考)給乙個埠號檢視繫結的程序:

netstat -anp | grep 埠號

udp協議

udp協議端格式

教科書格式

通用格式

網路基礎(二)

關於internet的描述中 正確的是 是乙個物聯網 2.是乙個資訊資源網 rip和ospf的描述中 正確的是 1.rip採用向量 距離演算法2.ospf採用鏈路 狀態演算法 3.ospf通常比rip收斂快4.rip中的距離以跳數計算 提高網域名稱解析效率的方法可以為 1.從本地網域名稱伺服器中開始...

網路程式設計基礎《二》

一 通訊基礎 1.tcp通訊流程 伺服器呼叫socket bind listen 完成初始化後,呼叫accept 阻塞等待,處於監聽埠的狀態,客戶端呼叫socket 初始化後,呼叫connect 發出syn段並阻塞等待伺服器響應,伺服器應答乙個syn ack段,客戶端接收到後從connect 返回,...

Linux網路程式設計基礎 二

1 位元組轉換函式 在網路上面有著許多態別的機器,這些機器在表示資料的位元組順序是不同的,比如i386晶元是低位元組在記憶體位址的低端,高位元組在高階,而alpha晶元卻相反.為了統一起來,在linux下面,有專門的位元組轉換函式.unsigned long int htonl unsigned l...