专栏首页sickworm深入理解计算机系统(第三版)/ CSAPP 杂谈,第11章:网络编程

深入理解计算机系统(第三版)/ CSAPP 杂谈,第11章:网络编程

  • IP 协议提供基本的命名方法和递送机制
  • UDP 稍微扩展了 IP 协议(增加端口概念),使其从原来的主机间传送变成可以在进程间传送(通过端口区分不同进程),通讯粒度从主机变为进程
  • TCP 基于 IP 协议提供进程间可靠通信
  • 网络通信总是使用大端传输(网络字节序=大端)
  • Linux,Mac,Windows 都是使用 socket 通信。

int socket(int domain, int type, int protocol) // 创建套接字描述符,成功返回非负数描述符,失败为-1 int connect(int clientfd, const struct sockaddr *addr, socklen_t addrlen) // 连接服务器,成功为 0,失败为 -1 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) // 连接客户端,成功为 0,失败为 -1 int listen(int sockfd, int backlog) // 等待客户端连接。此函数将主动套接字转化为监听套接字,成功为 0,失败为 -1 int accept(int listenfd, struct sockaddr *addr, socklen_t addrlen) // 等待来自客户端的连接,成功返回非负数连接描述符,失败为-1 int getaddrinfo(const char* host, const char* service, const struct addrinfo* hints, struct addrinfo** result) // 用于主机名,主机地址,服务名,端口号的字符串表示转换成 addrinfo // addrinfo 是一个列表,客户端调用 getaddrinfo 后需要遍历 result 这个列表,直到某个元素可以执行 socket 和 connect 成功 // host 可以是域名也可以是 ip 地址 // service 可以是服务名(http)或端口号 // hints 用于设置一些参数以便对返回的 result 列表做更好的控制 int getnameinfo(const struct sockaddr *sa, socklen_t salen, char* host, size_t hostlen, char *service, size_t servlen, int flags) // 用于 sockaddr 转换成 主机名,主机地址,服务名,端口号的字符串表示 // 简化版(非 Linux 内核内置) int open_clientfd(char *hostname, char *port) // 客户端连接服务器 int open_listenfd(char* port) // 服务器监听端口

123456789101112131415161718192021222324

int socket(int domain, int type, int protocol) // 创建套接字描述符,成功返回非负数描述符,失败为-1int connect(int clientfd, const struct sockaddr *addr, socklen_t addrlen) // 连接服务器,成功为 0,失败为 -1 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) // 连接客户端,成功为 0,失败为 -1int listen(int sockfd, int backlog) // 等待客户端连接。此函数将主动套接字转化为监听套接字,成功为 0,失败为 -1int accept(int listenfd, struct sockaddr *addr, socklen_t addrlen) // 等待来自客户端的连接,成功返回非负数连接描述符,失败为-1 int getaddrinfo(const char* host, const char* service,    const struct addrinfo* hints, struct addrinfo** result)// 用于主机名,主机地址,服务名,端口号的字符串表示转换成 addrinfo// addrinfo 是一个列表,客户端调用 getaddrinfo 后需要遍历 result 这个列表,直到某个元素可以执行 socket 和 connect 成功// host 可以是域名也可以是 ip 地址// service 可以是服务名(http)或端口号// hints 用于设置一些参数以便对返回的 result 列表做更好的控制 int getnameinfo(const struct sockaddr *sa, socklen_t salen,    char* host, size_t hostlen,    char *service, size_t servlen, int flags)// 用于 sockaddr 转换成 主机名,主机地址,服务名,端口号的字符串表示 // 简化版(非 Linux 内核内置)int open_clientfd(char *hostname, char *port) // 客户端连接服务器int open_listenfd(char* port) // 服务器监听端口

  • HTTP 请求由 request line,request header,空行 组成。

GET / HTTP/1.1 // method URI version Host: www.aol.com

1234

GET / HTTP/1.1  // method URI versionHost: www.aol.com

  • HTTP 有 GET,POST,OPTIONS,HEAD,PUT,DELETE,TRACE
  • HTTP 响应由 response line(1),response header,空行,response body,空行组成

HTTP/1.0 200 OK // version status-code status-message MINE-Version: 1.0 Date: Mon, 8 Jan 2010 4:59:42 GMT Server: Apache-Coyote/1.1 Content-Type: text/html Content-Length: 42092 <html> ... </html>

1234567891011

HTTP/1.0 200 OK  // version status-code status-messageMINE-Version: 1.0Date: Mon, 8 Jan 2010 4:59:42 GMTServer: Apache-Coyote/1.1Content-Type: text/htmlContent-Length: 42092 <html>...</html>

  • CGI,Common Gateway Interface,通用网关接口
  • CGI 收到客户端请求后:解析参数,fork 子进程,子进程执行请求路径上的程序,使用 dup2 将标准输出重定向到客户端的已连接描述符。

版权所有,转载请注明出处: https://sickworm.com/?p=1665

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《敏捷软件开发:原则、模式与实践》笔记(2)

    https://www.twblogs.net/a/5b957acb2b717750bda47bd5/zh-cn/

    sickworm
  • 二维码扫描开源库ZXing定制化

    最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下。

    sickworm
  • FIDO UAF各文档主要内容介绍

    介绍了appID和facetID的命名规则和作用。 appID是app(可能是手机软件,也可能是网页)调用UAF Client时提供的标识名,而facetID...

    sickworm
  • LeetCode 69 题

    这道题很明显不是让我们调用 Math.sqrt() 方法来计算,而是自己实现一个求平方根的算法。第一反应想到的方法是暴力循环求解!从 1 开始依次往后求平方数,...

    Carlos Ouyang
  • 洛谷P4396 [AHOI2013]作业(树套树)

    attack
  • Java改善性能小技巧

    不管有多少经验,都会被问到一些优化建议,从代码层面到数据库层面,下面介绍一些改善性能的小技巧

    三哥
  • 【计算机本科补全计划】CCF计算机职业资格认证 2016-04-1/2(俄罗斯方块)详解

    正文之前 果然,上一篇文章结尾的预言果然一语成谶,2016-09-4我果然没做出来。没错,昨晚到现在都没有做出来,当然,也是我做了一晚上心灰意冷,然后去欺负本文...

    用户1687088
  • HDU-5955-Guessing the Dice Roll

    ACM模版 描述 ? 题解 ACAC 自动机 ++ 高斯消元。 ? Ps. 截图来源 mcginn’s blog。 代码 #include <queue> #i...

    f_zyj
  • 挑战程序竞赛系列(19):3.1最小化第k大的值

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1147447
  • 挑战程序竞赛系列(35):3.3Binary Indexed Tree

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1147447

扫码关注云+社区

领取腾讯云代金券