网络知识点总结

作者: 没有名字就是我的名字 | 来源:发表于2016-06-03 09:10 被阅读98次

    IP地址

    凡是连接了互联网的主机都有一个IP地址;
    如果该主机借用了路由器的网络,那么这个主机只有局域网内的IP;

    端口号

    • 每个端口号一般对应一个APP

    • 如果使用的是http协议,http服务的默认端口号是80
      端口号是16位的,最大值是65535

    URL(统一资源定位符)

    • 组成结构: 协议://主机地址:端口号/路径

    组成结构分析

    • 协议:规定了网络中两个主机之间的沟通流程相关语法
    • 主机地址:可以是IP地址,也可以是域名;(如果是域名需要通过DNS转换为ip地址)
    • 1个主机对应1个IP地址
    • 端口号:用来表示进程,一般的APP都是单进程的;
    • 1个进程对应1个APP
    • 路径:是你访问的服务器中的资源代码源文件的地址;

    B/S和C/S

    • B/S:浏览器/服务器
    • C/S:客户端/服务器

    Unicode和UTF8编码的关系

    • Unicode:是一个字符集(说通俗点就是个表)
    • UTF8:是对Unicode字符集的一种编码方式。

    字符集是一种与存储无关的表,只有编码才是真正可传输可存储的格式。

    GB2312和Unicode的优缺点

    • GB2312只对中英文编码,所以单个字符的编码长度更短,可以节约流量提高传输速率;
    • Unicode可以兼容更多种语言,兼容性更好,但单个字符的编码长度稍长,需要的流量更多;

    TCP/IP网络模型的四层

    • 应用层——对应不同协议的不同端口号
    • 传输层——对应TCP或UDP协议
    • 网络层——对应IP
    • 网络接口层(数据链路层)——对应物理帧

    UDP与TCP的优缺点

    TCP:

    • 面向链接
    • 速度较慢! 因为在交换数据前,必须先在双方之间建立一个TCP连接;
    • 可靠! 提供数据校验超时重发,丢弃重复数据,流量控制等;

    UDP:

    • 不可靠! 只是把应用层(APP)传给网络层(封装IP报头)的数据报发送出去;
    • 速度较快! 没有数据校验,没有超时重发机制,协议规定的报头格式简单,不面向连接;

    WebView的使用方法

    加载HTML格式的字符串
    • (void)loadHTMLString:(NSString*****)stringbaseURL: (nullableNSURL *****)baseURL;

    Socket通信过程

    1. 创建socket

    参数说明:
    1. 常用AF_INET(ipv4+端口号)(将来苹果要强烈要求使用ipv6)
    2. TCP用SOCK_STREAM(流式),UDP用SOCK_DGRAM(数据报式)
    3. TCP用IPPROTO_TCP,UDP用IPPROTO_UDP。可以直接写0,这样会根据前两个形参自动选择
    返回值:

    socket描述符。每个进程(一般的程序只有一个进程)中都有一个 socket描述符表,通过socket描述符就可以在操作系统的内核缓存中找到相应的socket。
    返回-1为失败

    方法名:

    socket(int, int, int)

    2. 发起connect

    参数:
    1. socket描述符
    2. struct sockaddr_in结构体,里面保存了五个变量,其中最重要的有3个
    • (互联网协议) 协议族:sin_family 常用 AF_INET 以后苹果要求是用IPV6;
    • IP地址:sin_addr.s_addr 赋值为 inet_addr("XXX.XXX.XXX.XXX");
    • 端口号:sin_port 赋值为 htons(XXXXX),htons()的作用是把任意数改成大尾顺序;
    1. 结构体的大小,sizeof();
    返回值:

    返回0为成功,其它为失败

    方法名:

    connect(int, const struct sockaddr *, socklen_t)

    3. send数据:

    参数:

    1. socket描述符
    2. char *要发送的字符串
    3. 字符串长度,strlen()
    4. 与阻塞有关,可选项非常的多,一般置0
    返回值:

    -1失败,大于0是发送的字节数

    函数:

    send(int, const void *, size_t, int)

    4. recv数据

    参数:
    1. socket描述符
    2. uint8_t类型的数组
    3. 字符串长度,strlen()
    4. 与阻塞有关,可选项非常的多,一般填写0
    返回值:

    -1失败,大于0则是接收的字节数

    方法名:

    recv(int, void *, size_t, int)

    5. close连接:

    参数:

    1. socket描述符
    方法名:

    close(int)

    请求的格式:(一行二头三体)

    请求行:请求方法``空格``路径``协议和版本号``\r\n
    请求头:头字段名``:``空格``头字段值``\r\n
    结束符:\r\n
    请求体:默认的GET请求没有请求头

    比较常用几个请求头

    • Host:主机地址;
    • Connection:长连接或短连接。工作中遇到的部分长连接需要使用定时器发送规定内容的字符串,以这种方式发送的请求叫做心跳包

    数据解析

    序列化和反序列化

    • 序列化

    在向服务器发送数据之前,将 NSArray / NSDictionary 转换成二进制的过程

    • 反序列化

    从服务器获取数据之后,将二进制数据转化为NSArray / NSDictionary的过程

    相关文章

      网友评论

        本文标题:网络知识点总结

        本文链接:https://www.haomeiwen.com/subject/dkwkdttx.html