TCP編程模型

- server創建socket套接字
- socket套接字--可以理解為檔案描述符(file descriptor),UNIX把網路看成檔案
/**
* @param domain domain引數指定了一個通信域;它選擇了將被用于通信的協議族, 比如 AF_UNIX AF_INET
* @param type type of sockfd 通信協議
* SOCK_STREAM : 資料流協議 TCP協議
* SOCK_DGRAM : 資料報協議 UDP協議
* @param protocol 特殊通信型別 一般指定為0
* @return On success, a file descriptor for the new socket is returned.
* On error, -1 is returned, and errno is set appropriately.
*/
int socket(int domain, int type, int protocol);
2. bind 系結指定的IP 和 Port埠
~~~c
typedef unsigned int socklen_t ;
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
/*
bind 系結的地址,必須是沒有被注冊過的
On success, zero is returned.
On error, -1 is returned, and errno is set appropriately.
*/
- listen
- 所謂監聽服務,服務器可以 使 系結的套接字變為被動模式 只能用于接收client的connect 請求
- 不能用于 read or write
int listen(int sockfd, int backlog);
// backlog 包括連接上的client和在連接的client 最大數量 如何大于這個數量,client會受到ECONNREFUSED;
- accept && connect
- 3次握手
| Client | doing | Server |
|---|---|---|
| closed | closed | |
| SYN_SENT | [SYN]Seq=n ---> | listen |
| <--- [SYN,ACK] Ack =n+1 Seq=m | SYN_RCVD | |
| --->[ACK] Ack=m+1 Seq=n+1 | ||
| ESTABLISHED | ESTABLISHED |
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- recv && send
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
- close
#include <unistd.h>
int close(int fd); // on success return zero,On error, -1 is returned and errno is set appropriately.
UDP編程模型

-
socket
-
bind
-
recvfrom && sendto
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
- close
TCP與UDP的區別
TCP
- Transmission Control Protocol 傳輸控制協議
- 面向連接 (客戶端需要呼叫connect進行連接,三次握手)
- 可靠 資料傳輸保證資料的完整性和有序性 資料檢驗、超時自動重傳、丟失重傳、滑動視窗機制(保證資料收發一致)應答機制
A B C D E ---> ABCDE - 傳輸效率比較慢
- 安全性要高
UDP
- User Datagram Protocol 用戶資料報文協議
- 不連接 (客戶端和服務器不會建立連接)
- 不可靠 資料傳輸可能導致資料丟失 接收到的資料順序和發送資料的順序可能不一致
A B C ---> C A - 傳輸效率比較高
- 安全性比較低
| TCP | UDP |
|---|---|
| Transmission Control Protocol 傳輸控制協議 | User Datagram Protocol 用戶資料報文協議 |
| 面向連接(三次握手四次分手) | 無連接 |
| 可靠、安全、保證資料有序 | 不可靠、不安全、資料可能丟失、順序不確定 |
| 延時重傳、丟失重傳、應答、檢驗、滑動視窗 | 沒有重傳、沒有檢驗、沒有應答 |
| 復雜、傳輸效率稍低 | 簡單、高效、傳輸速度快 |
| 適合場合:安全性高、資料量少 | 適合場景:視頻傳輸、資料量大的情況、對資料安全性要求不高 |
| SOCK_STREAM | SOCK_DGRAM |
| socket/bind/listen/accept/recv/send/connect/close | socket/bind/recvfrom/sendto/close |
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/507104.html
標籤:其他
上一篇:Linux之vim編輯器
下一篇:docker部署安裝Nginx
