美文网首页
iOS 网络协议相关

iOS 网络协议相关

作者: 飞不越疯人院 | 来源:发表于2019-04-02 17:57 被阅读0次

    1. HTTP

    超文本传输协议; 是基于TCP的;
    常见方式有GET, POST, HEAD, PUT, DELETE, OPTIONS;
    特点:

    • 1.无链接, 有建立链接和释放链接的过程;
    • 2.无状态; 如果没有session或者cookie即使是多次请求服务端也没法确认客户端的身份;

    知识点:GET和POST的区别有哪些?

    GET POST
    GET请求参数以?分隔拼接到URL后面; POST放在Body中;
    GET参数长度限制2048字节; POST无限制;
    GET是获取资源; POST是处理资源;
    安全性, 幂等, 可缓存; 非安全性, 非幂等, 不可缓存;

    安全性: 不引起服务端的任何状态变化;
    幂等性: 同一个请求执行多次效果是否一样;
    缓存性: 一个请求是否可以被缓存;

    日常开发中常见的状态码:
    200:正常相应;
    404:请求错误;
    500:服务器内部错误;

    持久连接


    持久连接有点:提升网络请求销量, 在一段时间内即使多次请求也只执行一次链接和断开操作;
    持久连接头部字段设置

    #允许客户端持久连接
    Connection:keep-alive
    #100s内有效, 不设置表示永久有效
    Keep-Alive: timeout=100
    

    知识点: 持久连接如何判断数据是否已经已经传输完毕?
    1: 判断数据是否已经达到Content-Length所设置的大小;
    2: 如果分块传输数据, 根据chunked编码数据判断, 如果chunked编码的数据最后有chunked的块, 则表示完成;


    2.HTTPS

    简单理解为安全的HTTP; HTTPS = HTTP + SSL/TLS;

    HTTPS使用了哪些加密方式?
    建立链接的过程使用非对称加密(耗时);(非对称加密:公钥加密, 私钥解密)
    后续通信采用对称加密;(对称加密: 只有一个密钥)
    加密方式


    3. TCP/UDP

    TCP:传输控制协议, 提供面向链接可靠的字流服务, 提供超时重发, 丢弃重复数据, 检测数据控制流量等功能, 正式收发数据之前需要建立三次握手;

    建立链接三次握手:

    • 1.客户端发送syn包,并进入syn_send(请求链接)状态, 并等待服务器确认;
    • 2.服务器收到客户端的syn(序列编号)包后,也发送一个syn(syn=k, 即syn+ack)包,并进入syn_reveive状态;
    • 3.客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack = k+1),此包发送完毕则和服务器进入建立链接(ESTABLISHED)状态,完成三次握手;

    为什么要三次握手?
    假设只有两次握手, 那么加入客户端发发送的syn包超时了, 客户端会启用重试策略再次发送syn包, 后边的的syn包先被接受, 然后链接成功, 接着最先发送的syn被接受到了, 就会再次链接; 然而初衷只是建立一次链接; 三次握手有效解决这个问题;

    断开连接的四次握手:

    • 1.客户端发送fin包到服务器, 请求是否可以断开;
    • 2.服务器收到收发送fin包,确认可以断开;
    • 3.服务器发送ack包,并断开连接;
    • 4.客户端收到服务器的包并断开链接,同时发送ack包确认断开;

    UDP:用户数据报协议, 面向非链接, 不保证可靠性的数据传输服务, 没有超时重发等一系列等机制, 故而传输速度很快;
    不与对方建立链接, 而是直接把数据包发送过去, UDP适用于一次只传送少量数据对可靠性要求不高的应用环境;

    对比.png

    4. Socket

    socket是针对TCP/IP协议的封装, socket本身并不是协议, 而是一个API,通过socket我们才能使用TCP/IP协议;
    基于TCPsocket如何保证数据的完整性, 读到包头开始,直到读到相应的包尾,取出中间的buffr,认为是一个完整的数据包;
    客户端的使用流程:

    • 1.引入头文件;
    • 2.创建socket;
    • 3.建立链接(基于TCP, 三次握手流程);
    • 4.发送数据到服务器;
    • 5.从服务器接受数据;
    • 6.关闭链接;

    5. DNS

    域名到IP地址的映射,DNS解析请求采用UDP明文数据报;
    常见的查询方式有递归查询和迭代查询

    DNS劫持问题:由于采用UDP明文数据报, 这样就容易被钓鱼DNS劫持
    返回错误的IP地址; 注意:DNS劫持HTTP是没有关系的, 因为劫持是发生在HTTP建立之前的;
    可以通过HTTPDNS长连接方案解决DNS劫持问题;


    6. Session&Cookies

    Cookies是保存在客户端用来记录区分用户状态的数据;
    Session是保存在服务器端用来记录区分用户状态的数据;
    Session依赖于Cookies的机制;


    名词解释及链接

    ack 即确认字符, 在TCP/IP协议中如果接收方成功收到数据那么会回复一个ack数据(通常ack有自己固定的格式和长度大小, 由接收方回复给发送方);
    syn即同步序列编号, TCP/IP建立链接使用的握手信号,TCP链接的第一个包; (syn攻击, 大量发送此类的包, 服务器);
    fin带有标志位的数据包用来结束一个TCP回话,但对应的端口仍处于开放状态, 准备接收后续的数据;


    参考文章
    iOS HTTP chunked
    HTTP的长连接和短连接
    HTTP Keep-Alive模式
    HttpDNS功能说明及实现

    相关文章

      网友评论

          本文标题:iOS 网络协议相关

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