betway必威-betway必威官方网站
做最好的网站

betway必威官方网站:iOS网络请求博文笔记,网络

网络编程

1、导读

记得上大学时上过《计算机网络基础》专门课,当时真是单纯善良无知,觉得我以后又不搞网络这一块的东西,没必要好好学习计算机网络这们课程,只要考试通过就行了。但是工作后的我发现,不管是我们是不是做软件开发,都会多多少少接触接触到计算机网络,因为计算机网络无处不在。平时生活中我们要接触到路由器,交换机,dns,ping,修改dns等等这些基本的操作,作为软件开发者,我们要接触到tcp、udp、http、tcp连接三次握手,断开四次挥手、socket等等这些专业点的知识,真是这些专业点的知识真是书到用时方恨少啊,接下来我们就好好复习吧。

OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层数据链路层网络层传输层会话层表示层应用层

记忆方法:记住前面的第一个字

物 数 网 传 会 表 应

这七层每一层都有自己的作用,作用如下图分解:

betway必威官方网站 1

这里写图片描述

多个请求问题

//1.使用group
    dispatch_group_t reqeuGroup = dispatch_group_create();
    dispatch_queue_t requeQueue = dispatch_queue_create("com.nd.erp.timetable_requet", NULL);
    dispatch_group_enter(reqeuGroup);
    dispatch_async(requeQueue, ^{
        [self requestCalendarListData:reqeuGroup];
    dispatch_group_leave(group);
    });
    dispatch_group_enter(reqeuGroup);
    dispatch_async(requeQueue, ^{
        [self rquestGetConfig:reqeuGroup];
    dispatch_group_leave(group);
    });
    dispatch_group_notify(reqeuGroup, requeQueue, ^{
        [self rqeustData:[NSDate date]];
    });
//2.使用计数方式
     NSInteger requestCount = 0;
    //第一个网络请求
    [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {
        NSLog(@"duihuan11");
        requestCount  ;
        if (self.complete) {
            self.complete();
        }
    } onFailure:^(NSError *error) {
    }];
    //第二个网络请求
    [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {
        NSLog(@"duihuan22");
        requestCount  ;
        if (self.complete) {
            self.complete();
        }
    } onFailure:^(NSError *error) {
    }];
    //第三个网络请求
    [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {
        NSLog(@"duihuan33");
        requestCount  ;
        if (self.complete) {
            self.complete();
        }
    } onFailure:^(NSError *error) {
    }];
    self.complete = ^{
            //请求网络的数量等于3表示三个网络请求已完成
            if (requestCount == 3) {
                //在这里 进行请求后的方法,回到主线程
                dispatch_async(dispatch_get_main_queue(), ^{

                    //更新UI操作

                });
            }
        };
//3.使用group和信号量
//4.使用NSOperation

计算机网络体系结构分为3种:OSI体系结构、TCP / IP体系结构、五层体系结构

相关概念

  • OSI七层模型:开放系统互连参考模型。它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

  • TCP/IP:在OSI七层模型的基础上简化抽象出来的一套网络协议簇,现在得到了广泛使用。

  • TCP:传输控制协议

    • 有连接的,数据是安全有保障的

    • 传输的速度稍慢,三次握手、四次挥手、数据检查

  • UDP:用户数据报协议

    • 无连接的,数据是不可靠的

    • 传输的速度比较快

  • IP地址:唯一的一台计算标识

    • 查看:ipconfig
  • ping:检查网络连通性

    • 使用:ping IP/域名
  • 端口号:每个应用可以拥有唯一的端口号

    • 范围:0~65535

    • 系统:0~1024,常用的应用所占用

      • http:80

      • https:443

      • smtp:25

      • ftp:21

      • ssh:22

      • mysql:3306

      • redis:6379

    • 自己:大于1024

  • 网络编程核心:

    • IP 端口

    • 库:socket

2、Http

HTTP(HyperText Transfer Protocol、超文本传输协议)是OSI七层中应用层的协议。

OSI体系结构:

概念清楚 & 理念完整,但复杂 & 不实用
1.物理层,2.链路层,3.网络层,4.传输层,5.会话层,6.表示层,7.应用层

TCP协议

  • 说明:面向连接、数据可靠(校验重发)、三次握手、四次挥手、传输速度较慢

  • 原理:见tcp.png

  • 示例:见01-tcp-http.py

  • TCP协议的服务器与客户端:见02-tcp-server.py03-tcp-client.py

协议解释:

HTTP 是基于 TCP/IP协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

有人说HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等),我觉这句话有问题,HTTP要是定义为协议那么http只是一种规定规则,规定了客户端的URI请求格式以及服务端数据响应格式,要说HTTP请求这个概念久比较笼统了,客户端发送一次HTTP请求,经过OSI的七层协议的组装、传输、拆分、传输等一些操作,最终可以获得我们想要的数据。

TCP / IP体系结构

含了一系列构成互联网基础的网络协议,是Internet的核心协议 & 被广泛应用于局域网 和 广域网
1.网络接口层,2.网际层(ip,ARP,rarp),3.运输层(tpc/udp),4.应用层(http,dns,smtp,ftp,ssh等协议)

UDP协议

  • 说明:面向无连接的、数据不可靠、传输速度较快,适应于对数据要求不严格的情况

  • 原理:见udp.png

  • 示例:模拟飞秋发送数据,见04-udp-feiqiu.py

  • UDP协议的服务器与客户端:见05-udp-server.y06-udp-client.py

用途描述:

解决客户端和服务端的数据如何包装,包装两端最后得到的数据可以被识别。

五层体系结构

融合了OSI 与 TCP / IP的体系结构,目的是为了学习 & 讲解计算机原理
1.物理层,2.链路层,3.网络层,4.传输层,5.应用层

StringIO与BytesIO

  • 说明:这些类型的对象可以与open返回的对象一样操作,但是操作的内存中的数据

  • 方法:getvalue用于获取所有数据

关系描述:

TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据,而socket则是对TCP/IP协议的封装和应用(程序员层面上)。实际上http协议就是建立在tcp/ip协议之上的。,几乎每一种语言都有自己的Http实现,当然也有自己的Socket实现,比如Golang、Java,在自己的net包里都可以找到源代码。使用TCP协议是需要连接三次握手,断开连接三次挥手的。

HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。但是使用Cookie和Session可以保存状态和识别。HTTP只能是由客户端发起,服务端是无法主动想客户端发送数据的。

TCP协议

面向连接、面向字节流、全双工通信、可靠(基于TCP的应用层协议有HTTP、SMTP、FTP、Telnet 和 POP3)Transmission Control Protocol,即传输控制协议,是一种传输层通信协议。提供用户面向连接,可靠的报文服务。

  • 面向连接:指的是要使用TCP传输数据,必须先建立TCP连接,传输完成后释放连接,就像打电话一样必须先拨号建立一条连接,打完后挂机释放连接。

  • 全双工通信:即一旦建立了TCP连接,通信双方可以在任何时候都能发送数据。

  • 可靠的:指的是通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达。

  • 面向字节流:流,指的是流入到进程或从进程流出的字符序列。

2、TCP

TCP(Transmission Control Protocol,传输控制协议)是OSI七层中传输层的协议。

UDP协议

无连接的、不可靠的、面向报文、没有拥塞控制(基于UDP的应用层协议有TFTP、SNMP与DNS)
User Datagram Protocol,即用户数据报协议是一种传输层通信协议。

  • 无连接的:和TCP要建立连接不同,UDP传输数据不需要建立连接,就像写信,在信封写上收信人名称、地址就可以交给邮局发送了,至于能不能送到,就要看邮局的送信能力和送信过程的困难程度了。

  • 不可靠的:因为UDP发出去的数据包发出去就不管了,不管它会不会到达,所以很可能会出现丢包现象,使传输的数据出错。

  • 面向报文:数据报文,就相当于一个数据包,应用层交给UDP多大的数据包,UDP就照样发送,不会像TCP那样拆分。

  • 没有拥塞控制:拥塞,是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象,就像交通堵塞一样。TCP建立连接后如果发送的数据因为信道质量的原因不能到达目的地,它会不断重发,有可能导致越来越塞,所以需要一个复杂的原理来控制拥塞。而UDP就没有这个烦恼,发出去就不管了

协议解释:

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求 。

安全体现在哪儿?
连接安全:三次握手 四次挥手,具体请参考:TCP详解。
数据安全:TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

HTTP

http是基于TCP的应用层协议,tcp属于网络传输层
1.传输效率高(无连接发报文不需要建立http链接,无状态不保存历史、状态,传输格式简单请求时传方法和路径)
2.传输可靠性高(tcp作为传输层协议,面向连接,可靠传输)
3.兼容性好(支持B/S,C/S模式)
4.灵活性高 允许传输任意类型的数据对象

用途描述:

解决网络中的数据可以安全无错的传送

Http1.1 比 Http1.0 多了以下优点

引入持久连接,即 在同一个TCP的连接中可传送多个HTTP请求 & 响应
多个请求 & 响应可同时进行、可重叠
引入更加多的请求头 & 响应头

本文由betway必威发布于编程开发,转载请注明出处:betway必威官方网站:iOS网络请求博文笔记,网络

TAG标签: betway必威
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。