1、tcp/ip協議族:tcp/ip為協議族,有很多子協議,為一族。
tcp:傳輸控制協議 ip:網路協議
2、我們所做的為伺服器應用軟體開發,伺服器:有相應的硬體,作業系統(電腦也為伺服器,不過多了個顯示)。
3、協議棧:存放很多協議的地方叫做協議棧,其範圍是從協議無關層(如通用的socket層介面與裝置層)到各個網路協議實現
4、傳輸加密過程:
5、linux加密過程有四層,tcp/ip加密過程有七層,加密過程(tcp/ip):
書p317
6、七層應用層的優缺點
1>七層過於複雜,資料不安全
2>四層資料安全,快速
6、七層應用層的優缺點
1>七層過於複雜,資料不安全
2>四層資料安全,快速
linux的tcp/ip四層概念模型:應用層、傳輸層、網際層、網路介面
一些網路協議解釋:
1、tftp:簡單檔案傳輸協議
2、ftp:簡單郵件傳輸協議
3、nfs(network filesystems):可以通過網路,讓不同系統分享彼此檔案
4、wais:
5、telnet:遠端登入協議
6、smtp:簡單郵件傳輸協議
7、gopher:資訊查詢系統協議
8、rlogin:實現unix主機之間遠端登入
9、dns(domain name system):用於命名組織層次結構中的計算機和網路服務
10、tcp:傳輸控制協議
11、udp:資料報協議:提供簡單不可靠的資訊傳送服務
12、ip:將資料來源送到目的地
13、icmp:控制報文協議:用於傳輸出錯報告控制資訊
14、arp:位址解析協議,根據ip位址獲取實體地址的乙個tcp/ip協議
15、rarp:反向位址轉換協議,將區域網中某個主機實體地址轉化為ip位址
位址協議主要為:ip、tcp、與udp協議,http為tcp轉化而來
(二)1、傳輸控制協議tcp(連線可靠):
1>三次握手:1、源主機a的tcp向目標主機b傳送連線請求報文段 2、目標主機b的tcp收到連線請求報文段後,如同意發回確認 3、源主機a的tcp收到目標主機b的確認後,給目標主機b給出乙個確認
a ---> b
//主機a向主機b發出連線請求資料報:「我想給你發資料,可以嗎?」,這是第一次對話;
a //主機b向主機a傳送同意連線和要求同步(同步就是兩台主機乙個在傳送,乙個在接收,協調工作)
//的資料報:「可以,你什麼時候發?」,這是第二次對話;
a ---> b
//主機a再發出乙個資料報確認主機b的要求同步:「我現在就發,你接著吧!」,這是第三次對話。
2、tcp與udp區別:
1>量:udp首部簡單,每次傳輸資料量大,實時性好,而tcp首部相對複雜,每次傳輸資料量較小
2>安全:tcp需要三次握手,易受攻擊,安全性較低
3>可靠:tcp通過三次握手建立乙個全雙工的連線,比較可靠,而udp沒有建立乙個明確的連線,相對不可靠
4>速度:由於tcp要經歷三次握手並且每次傳播資料量較少,所以傳輸速度相對慢
5>阻塞:tcp要經歷三次握手,相對容易堵塞。
(一)、unix網路便曾通過socket(套接字)介面實現,socket是乙個檔案描述符
(二)、scoket分為三類:
1、流式套接字(tcp協議中:sock_stream)
2、資料報套接字(udp協議:sock_dgram)
3、原始套接字:主要用來測試協議
(三)、socket資訊資料結構:
struct sockaddr
;//若sa_family置為af_***形式,用的為ipv4,其他的為ipv6
struct sockaddr_in
;//ip位址找到伺服器,埠號找到伺服器上對應的伺服器應用軟體。
3、struct in_addr
;使用者在表達位址時採用的是點分十進位制表示的數值,而在通常使用的scoket程式設計中使用的則是32位網路位元組序的二進位制值,這就需要將這兩個數值進行轉換
1、inet_aton(const char *cp,struct in_addr *inp);
struct in_addr
;2、inet_ntoa(struct in_addr in);
inet_ntoa用來將引數in所指的網路二進位制的數值轉換為網路位址,然後將指向此網路位址字串的指標返回
(五)、位元組序轉化:
1、網路傳輸為大端位元組序,計算機為小端位元組序
位元組序轉化:
#incude
uint32_t htonl(uint32 hostlong);
uint16_t htons(uint16 hostshort);
unit32_t ntohs(uint32 hostlong);
unit16_t ntohs(uint16 hostshort);
包含標頭檔案:#include #incldue
1、socket:建立乙個套接字
int socket (int domain,int type,int protocol);
domain:指定使用何種位址型別(ipv4,ipv6等)
type:建立何種連線
protocol用來指定socket所使用的傳輸協議編號,通常此參考不用管它,置0;
返回值:成功則返回socket處理**,失敗返回-1
int bind(int sockfd,struct *my_addr,int addrlen);
1>sockfd為socket函式成功的返回值
2>結構體指標指向的結構體:
struct sockaddr
;引數含義為將該結構體的內容,即ip位址和埠號傳給socked
3>addreln即為結構體的長度
4>返回值:成功返回0,失敗返回-1,錯誤原因存於errno中。
3、listen:用於等待連線
int listen(int s,int backlog);
1>引數s為套接字,引數backlog為設定的最大連線數
2>成功則返回0,失敗返回-1,錯誤原因存於errno。
4、accept:用於接受socket連線
int accept(int s,struct sockaddr *addr,int *addrlen);
accept用來接受引數s的socket連線。引數s的socket的socket必須先經過bind()、listen()函式處理,當有連線進來時accept會返回乙個新的socket處理**,往後的資料傳送就由新的sockfd處理,而原來的處理**可以接受新的連線要求。連線成功時,結構體引數就會被系統填入遠端主機的位址資料,引數addrlen為結構體的長度。
5、connect:用於建立socket連線
int connect(int sockfd,struct sockaddr *serv_addr,int addrlen);
connect用於將引數sockfd的socked連線至引數serv_addr指定的網路位址
成功返回0,失敗返回-1,錯誤原因存於errno中
6、linux命令列修改網絡卡ip:
ifconfig:顯示當前網絡卡ip
ifconfig eth0 192.168.1.120:修改網絡卡ip
Linux網路程式設計
linux網路程式設計 當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 1.和伺服器的步驟一樣。2.通過設定套介面位址結構,我們說明,客戶端要與之通訊的伺服器的ip位址和 埠。...
linux 網路程式設計
當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 現在讓我們來看看網路程式客戶端的程式設計步驟 以上的步驟,是比較普遍的,我們可以從中看出,編寫網路程式是很有意思的,同 時,也不...
linux 網路程式設計
套接字程式設計 struct sockaddr unsigned short sa family 位址協議,ipv4 tcp ip af inet,ipv6 af inet6 char sa data 14 14位元組的位址協議 struct sockaddr in unsigned short s...