网络编程学习记录

2020-07-26  本文已影响0人  羲牧

要学好网络编程,需要达到以下三个层次。
第一个层次,充分理解 TCP/IP 网络模型和协议。在这方面,仅仅做到理论上的理解是远远不够的。在基础篇中我们会梳理 TCP/IP 模型和网络函数接口之间的联系,并通过实例展开对套接字,套接字缓冲区,拥塞控制,数据包和数据流,本地套接字(UNIX 域套接字)等的讨论,给你一个全面而具体的知识体系。

第二个层次,结合对协议的理解,增强对各种异常情况的优雅处理能力。比如对 TCP 数据流的处理,半关闭的连接,TCP 连接有效性的侦测,处理各种异常情况等,这些问题决定了程序的健壮性。有关这一部分的内容,我们将在提升篇详细展开。

第三个层次,写出可以支持大规模高并发的网络处理程序。在这个阶段,我将带你一起深入研究 C10K 问题,引入进程、线程、多路复用、非阻塞、异步、事件驱动等现代高性能网络编程所需要的技术。我们将在性能篇深入讨论这些技术,并在实战篇结合实例,一步步教你写出高性能的网络程序。

socket编程流程图解

/* POSIX.1g 规范规定了地址族为2字节的值.  */
typedef unsigned short int sa_family_t;
/* 描述通用套接字地址  */
struct sockaddr{
    sa_family_t sa_family;  /* 地址族.  16-bit*/
    char sa_data[14];   /* 具体的地址值 112-bit */
  }; 

在这个结构体里,第一个字段是地址族,它表示使用什么样的方式对地址进行解释和保存,好比电话簿里的手机格式,或者是固话格式,这两种格式的长度和含义都是不同的。地址族在 glibc 里的定义非常多,常用的有以下几种:AF_LOCAL:表示的是本地地址,对应的是 Unix 套接字,这种情况一般用于本地 socket 通信,很多情况下也可以写成 AF_UNIX、AF_FILE;
AF_INET:因特网使用的 IPv4 地址;
AF_INET6:因特网使用的 IPv6 地址


套接字地址格式 UDP.png
上一篇 下一篇

猜你喜欢

热点阅读