1. 程式人生 > 其它 >Ch13 TCP/IP和網路程式設計

Ch13 TCP/IP和網路程式設計

Ch13 TCP/IP和網路程式設計

13.2 TCP/IP

TCP/IP資料流路徑

13.3 IP主機和IP地址

  • 主機是支援TCP/IP協議的計算機或裝置。

  • IP地址分為兩部分,即NetworkID欄位和HostID欄位。

13.4 IP協議

  • IP協議用於在IP主機之間傳送/接收資料包,IP協議盡最大努力交付資料包。

13.5 IP資料包格式

IP資料包由IP頭、傳送方IP地址和接收方IP地址以及資料組成。每個IP資料包的大小最大為64KB。

13.12 網路程式設計

13.12.2 伺服器-客戶機計算模型

大多數網路程式設計任務都基於伺服器-客戶機計算模型。在伺服器-客戶機計算模財中我們首先在伺服器主機上執行伺服器程序。然後,我們從客戶機主機執行客戶機在UDP中,伺服器等待來自客戶機的資料報,處理資料報並生成對客戶機的響應。在TCP中,伺服器等待客戶機連線。客戶機首先連線到伺服器,在客戶機和伺服器之間建立一個虛擬電路,建立連線後,伺服器和客戶機可以交換連續的資料流。


13.13 套接字程式設計

在網路程式設計中,TCP/IP的使用者介面是通過一系列C語言庫函式和系統呼叫來實現的, 這些函式和系統呼叫統稱為套接字API (( Rago 1993; Stevens等2004 )。

13.13.1 套接字地址

struct sockaddr_in {
sa_family_t sin_family; // AF_INET for TCP/IP
in_port_t sin_port; // port number
struct in_addr sin_addr; // IP address
};
struct in_addr { // internet address
uint32_t s_addr; // IP address in network byte order
};
  • TCP/IP 網路的 sin_family 始終設定為 AF_INET。
  • sm_port包含按網路位元組順序排列的埠號。
  • sin_addr是按網路位元組順序排列的主機IP地址。

13.13.2 套接字API

  1. init套接字

    //udp
    int udp_sock = socket(AF_INET, SOCK_DGRAM, 0);
    //tcp
    int tcp_sock = socket(AF_INET, SOCK_STRAM, 0);
    
  2. int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen)

  3. UDP套接字

    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
    
  4. TCP套接字

    int listen(int sockfd, int backlog);
    int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
    int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    
    
  5. send()/read() and recv/write()

    ssize_t send(int sockfd, const void *buf, size_t len, int flags);
    ssize_t write(sockfd, void *buf, size_t, len)
    ssize_t recv(int sockfd, void *buf, size_t len, int flags);
    ssize_t read(sockfd, void *buf, size_t len);