美文网首页
网络编程相关

网络编程相关

作者: hehc08 | 来源:发表于2019-01-25 15:43 被阅读0次

    HTTPS

    1. HTTPS简介

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

    2. HTTPS通信过程

    image.png

    3. HTTPS与HTTP的区别

    超文本传输协议HTTP协议 被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

    为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

    iOS中发送HTTP请求的方案

    NSURLConnection
    NSURLSession
    AFNetworking

    NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        completionHandler(data, response, error);
    }];
    
    NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:completionHandler];
    [task resume];
    

    NSURLSession

    1. NSURLSesscion使用步骤

    • 使用NSURLSession对象创建Task
    • 执行Task
    NSURLSessionUploadTask:NSURLSessionDataTask:NSURLSessionTask
    NSURLSessionDownloadTask:NSURLSessionTask
    

    2. NSURLSesscion 常用方法

    常见方法
    - (void)suspend; // 暂停
    - (void)resume; // 恢复
    - (void)cancel; // 取消
    @property (readonly, copy) NSError *error; // 错误
    @property (readonly, copy) NSURLResponse *response; // 响应
    
    // 取消任务 这个方法可以拿到恢复下载需要的数据
    - (void)cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler;
    

    TCP拥塞控制4个核心算法:慢开始(slow start)、拥塞避免(Congestion Avoidance)、快速重传(fast retransmit)、快速回复(fast recovery)

    TCP在连接过程的三次握手完成后,开始传数据,并不是一开始向网络通道中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞;而是根据初始的cwnd大小逐步增加发送的数据量,cwnd初始化为1个最大报文段(MSS)大小(这个值可配置不一定是1个MSS);每当有一个报文段被确认,cwnd大小指数增长。

    开始 —> cwnd = 1
    1个RTT后 —> cwnd = 21 = 2
    2个RTT后 —> cwnd = 2
    2= 4
    3个RTT后 —> cwnd = 4*2 = 8

    拥塞窗口(cwnd,congestion window),其大小取决于网络的拥塞程度,并且动态地在变化。
    TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复

    UDP如何实现可靠传输

    传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
    最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。

    1、添加seq/ack机制,确保数据发送到对端
    2、添加发送和接收缓冲区,主要是用户超时重传。
    3、添加超时重传机制。

    详细说明:发送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据

    相关文章

      网友评论

          本文标题:网络编程相关

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