zoukankan      html  css  js  c++  java
  • CSAPP笔记(第十一章 网络编程01)

    第十一章的内容为p677~p713. 分2部分, p677~p699, p700~p713.

    摘要

    网络

    集线器: 主机之间用集线器连接
    网桥: 集线器之间用网桥连接
    路由器: 不兼容的局域网之间用路由器连接

    网络协议: 通过统一协议实现不同网络间的通信

    因特网3特性:

    1. 主机集合被映射为一组32位的IP地址.
    2. 这组IP地址被映射位一组称为因特网域名(IP)的标识符
    3. 因特网主机上的进程能够通过连接和其他因特网主机上的进程通信

    IP

    一个IP地址是一个32位无符号整数

    struct in_addr {
        uint32_t s_addr;
    }
    

    IP地址总是以大端法网络字节顺序存放的.

    域名是IP地址的别名, 能够以容易记忆的地址访问. 直到1988年, 域名与IP的映射都是通过一个HOSTS.TXT的文本文件来手工维护的. 后来通过一个而分布到世界范围内的数据库(DNS)来维护的. 域名与IP的映射是多对多的, 一个域名可以对应多个IP, 一个IP也可以对应多个域名.

    套接字

    一个套接字是连接的一个断点, 由一个因特网地址和一个16位的整数端口组成, 用"地址: 端口"表示.
    客户端的端口是临时分配的, 称为临时端口(ephermeral port), 服务器端的是固定端口. 一个连接由它两端的套接字地址唯一确定的, 这对套接字地址叫做套接字对(socket pair), (cliaddr:cliport, servaddr:servport)

    struct sockaddr_in {
        uint16_t sin_family;
        uint16_t sin_port;
        struct in_addr sin_addr;
        unsigned char sin_zero[8];
    }
    
    struct sockaddr {
        uint16_t sa_family;
        char sa_data[14];
    }
    

    socket函数, 创建一个套接字描述符(socket descriptor), clientfd = Socket(AF_INET, SOCK_STREAM, 0);

    #include <sys/types.h>
    #include <sys/socket.h>
    
    int socket(int domain, int type, int protocol);
    

    connect函数, 客户端通过connect来建立和服务器的连接

    #include <sys/socket.h>
    int connect(int clientfd, const struct sockaddr *addr, socklen_t addrlen);
    

    bind函数, bind, listen, accept, 服务器用它们来和客户端建立连接.

    #include <sys/socket.h>
    int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    

    listen函数

    #include <sys/socket.h>
    int listen(int sockfd, int backlog);
    

    accept函数, 服务器通过调用accept等待来自客户端的连接请求.

    #include <sys/socket.h>
    int accept(int listenfd, struct sockaddr *addr, int *addrlen);
    

    套接字连接的辅助函数

    open_clientfd函数, 客户端调用该函数建立与服务器的连接, 成功的话返回描述符, 否则返回-1

    #include "csapp.h"
    int open_clientfd(char *hostname, char *port);
    

    open_listenfd函数, 服务器创建一个监听描述符, 准备好接收连接请求

    #include "csapp.h"
    int open_listenfd(char *port);
    

    code

    从网上找了段c# socket的代码, csharp socket demo

  • 相关阅读:
    day3 程序流程控制
    day2 程序流程控制
    String.prototype.formatWith
    未能找到文件“in oslyncsc.exe”
    Azure DocumentDB
    查询表中所有字段的最大长度(大数据情况)
    查询表中所有字段的最大长度
    linux开发
    sql server cvs 导入
    清除“远程桌面连接”的历史记录
  • 原文地址:https://www.cnblogs.com/winwink/p/CSAPP_Note_Chapter11_Network_01.html
Copyright © 2011-2022 走看看