Socket
這不是一個(gè)協(xié)議,而是一個(gè)通信模型。主要用來一臺(tái)電腦的兩個(gè)進(jìn)程間的通信(進(jìn)程間通信)Socket其實(shí)就是I/O(輸入輸出)操作(A發(fā)給B,B收到)
是在應(yīng)用層和傳輸層之間的一個(gè)抽象層 把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡單的接口供應(yīng)用層調(diào)用,實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中的通訊。

socket的位置.png
- 網(wǎng)絡(luò)OSI模式 7層 每層作用
一、物理層:該層包括物理聯(lián)網(wǎng)媒介,如電纜連線連接器
數(shù)據(jù)還沒有被組織,是01單位是比特。(傳輸)(比特)
二、數(shù)據(jù)鏈路層:控制網(wǎng)絡(luò)層與物理層之間的通信(糾錯(cuò))(數(shù)據(jù)幀)
三、網(wǎng)絡(luò)層:(路由器找到某臺(tái)計(jì)算機(jī))(數(shù)據(jù)包)
四、傳輸層:(數(shù)據(jù)太大分包傳輸)(數(shù)據(jù)包)
五、會(huì)話層:(建立管理和程序之間的通信)(報(bào)文)
六、表示層:(解決不同系統(tǒng)之間的通信語法問題)
七:應(yīng)用層:為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問網(wǎng)絡(luò)服務(wù)的接口
- TCP IP模型,4層內(nèi)容
一、網(wǎng)絡(luò)接口層:
二、網(wǎng)絡(luò)互連層:網(wǎng)絡(luò)互連層是整個(gè)TCP/IP協(xié)議棧的核心。它的功能是把分組發(fā)往目標(biāo)網(wǎng)絡(luò)或主機(jī)。網(wǎng)絡(luò)互連層定義了分組格式和協(xié)議,即IP協(xié)議(Internet Protocol)。
網(wǎng)絡(luò)互連層除了需要完成路由的功能外,也可以完成將不同類型的網(wǎng)絡(luò)(異構(gòu)網(wǎng))互連的任務(wù)。除此之外,網(wǎng)絡(luò)互連層還需要完成擁塞控制的功能。
三傳輸層: 在TCP/IP模型中,傳輸層的功能是使源端主機(jī)和目標(biāo)端主機(jī)上的對(duì)等實(shí)體可以進(jìn)行會(huì)話。在傳輸層定義了兩種服務(wù)質(zhì)量不同的協(xié)議。即:傳輸控制協(xié)議TCP(transmission control protocol)和用戶數(shù)據(jù)報(bào)協(xié)議UDP(user datagram protocol)。
四、應(yīng)用層:TCP/IP模型將OSI參考模型中的會(huì)話層和表示層的功能合并到應(yīng)用層實(shí)現(xiàn)。
應(yīng)用層面向不同的網(wǎng)絡(luò)應(yīng)用引入了不同的應(yīng)用層協(xié)議。其中,有基于TCP協(xié)議的,如文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)、虛擬終端協(xié)議(TELNET)、超文本鏈接協(xié)議(Hyper Text Transfer Protocol,HTTP),也有基于UDP協(xié)議的。
網(wǎng)絡(luò)通訊要素 IP 端口 傳輸協(xié)議概念
TCP UDP區(qū)別
TCP是流協(xié)議,而UDP是數(shù)據(jù)報(bào)協(xié)議
TCP(傳輸控制協(xié)議)
1.建立連接,形成傳輸數(shù)據(jù)的通道
2、TCP提供超時(shí)重發(fā)
3、用于傳輸大量數(shù)據(jù)(流模式)
UDP(用戶數(shù)據(jù)報(bào)協(xié)議)
1、面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去
2、UDP適用于一次只傳送少量數(shù)據(jù)(數(shù)據(jù)包)、對(duì)可靠性要求不高的應(yīng)用環(huán)境
3、沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快
|名稱|安全性|傳輸速率|傳輸數(shù)據(jù)大小|是否面向連接
|:---|:---|:---|
|TCP|高|慢|無限制|面向連接
|UDP|低|快|64k|面向非連接
- 網(wǎng)絡(luò)進(jìn)程如何通訊,如何標(biāo)識(shí)唯一網(wǎng)絡(luò)進(jìn)程
網(wǎng)絡(luò)層的“ip地址”可以唯一標(biāo)識(shí)網(wǎng)絡(luò)中的主機(jī),而傳輸層的“協(xié)議+端口”可以唯一標(biāo)識(shí)主機(jī)中的應(yīng)用程序(進(jìn)程)
。這樣利用三元組(ip地址,協(xié)議,端口)就可以標(biāo)識(shí)網(wǎng)絡(luò)的進(jìn)程了,
網(wǎng)絡(luò)中的進(jìn)程通信就可以利用這個(gè)標(biāo)志與其它進(jìn)程進(jìn)行交互
(在本地可以通過進(jìn)程PID來唯一標(biāo)識(shí)一個(gè)進(jìn)程)。
- socket基本操作(表) 函數(shù)

函數(shù)作用
8.

socket使用
socket使用的庫函數(shù)
1.創(chuàng)建套接字
Socket(af,type,protocol)//建立地址和套接字的聯(lián)系
bind(sockid, local addr, addrlen)//服務(wù)器端偵聽客戶端的請求
listen( Sockid ,quenlen)//建立服務(wù)器/客戶端的連接 (面向連接TCP)
2.客戶端請求連接
Connect(sockid, destaddr, addrlen)//服務(wù)器端等待從編號(hào)為Sockid的Socket上接收客戶連接請求
newsockid=accept(Sockid,Clientaddr, paddrlen)//發(fā)送/接收數(shù)據(jù)
3.面向連接:
send(sockid, buff, bufflen)
recv()
4.面向無連接:
sendto(sockid,buff,…,addrlen)
recvfrom()
5.釋放套接字
close(socked)
NSStream:數(shù)據(jù)流的父類,用于定義抽象特性,例如:打開、關(guān)閉代理,NSStream繼承自CFStream(CoreFoundation)
NSInputStream:NSStream的子類,用于讀取輸入
NSOutputStream:NSSTream的子類,用于寫輸出。
三次握手連接過程
(在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。
第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);SYN:同步序列編號(hào)(Synchronize SequenceNumbers)。
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。)

三次握手.png
- 四次釋放過程
(1) TCP客戶端發(fā)送一個(gè)FIN,用來關(guān)閉客戶到服務(wù)器的數(shù)據(jù)傳送。
(2) 服務(wù)器收到這個(gè)FIN,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1。和SYN一樣,一個(gè)FIN將占用一個(gè)序號(hào)。
(3) 服務(wù)器關(guān)閉客戶端的連接,發(fā)送一個(gè)FIN給客戶端。
(4) 客戶端發(fā)回ACK報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。
NSStream流
代碼Socket與HTTP連接不同
HTTP協(xié)議:簡單對(duì)象訪問協(xié)議,對(duì)應(yīng)于應(yīng)用層 ,HTTP協(xié)議是基于TCP連接的
tcp協(xié)議: 對(duì)應(yīng)于傳輸層
ip協(xié)議: 對(duì)應(yīng)于網(wǎng)絡(luò)層
TCP/IP是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。
Socket是對(duì)TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過Socket,才能使用TCP/IP協(xié)議。
通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開。但在實(shí)際應(yīng)用中,客戶端到服務(wù)器之間的通信防火墻默認(rèn)會(huì)關(guān)閉長時(shí)間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連,
因此需要通過輪詢告訴網(wǎng)絡(luò),該連接處于活躍狀態(tài)。
而HTTP連接使用的是“請求—響應(yīng)”的方式,不僅在請求時(shí)需要先建立連接,而且需要客戶端向服務(wù)器發(fā)出請求后,服務(wù)器端才能回復(fù)數(shù)據(jù)。