美文网首页
iOS-网络学习1

iOS-网络学习1

作者: 快乐的tomato | 来源:发表于2021-08-21 17:27 被阅读0次

一、OSI 7层参考模型

OSI 7层参考模型参考模型.png

二、HTTP

1、什么是HTTP?

超文本传输协议的简称,通过这个协议我们可以向服务端发起请求,获得服务端的数据。这也是我们开发人员需要操作的。

2、HTTP工作原理?

HTTP协议采用了请求/响应模型,客户端按照一定的格式要求向服务器发送一个请求报文,服务器会返回我们一定格式内容。如果不按照格式去写,是请求不到数据的。

过程:
1、客户端先与服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2、通过TCP套接字,客户端向Web服务器发送一个请求报文。
3、服务器接受请求并返回HTTP响应。
4、释放连接TCP连接。
5、客户端解析并显示返回的内容。

3、请求报文格式

请求报文格式包括:请求行、请求头部和请求数据

image.png image.png
  • 请求方法

最常用的是get和post方法。

get的的特点

1、请求的参数放在URL后面
2、是安全性的。就是不会改变数据,仅仅是查询。
3、是幂等的。发起请求的结果都是一样的。
4、会被浏览器主动缓存
5、GET 方法的 URL 一般都具有长度限制,这个长度限制主要是由浏览器和 Web 服务器所决定的。
6、GET 方法只产生一个 TCP 数据包。

post的的特点
1、是将请求信息放置在请求数据中的。
2、因为有可能修改服务器上的资源,所以它是不符合安全和幂等性的。
3、请求信息是没有长度限制的。
4、POST 方法会产生两个 TCP 数据包。

4、响应格式

主要包括状态行、响应头部、响应正文。


image.png
image.png
  • 状态码

常见状态码:
2xx 请求已成功被服务器接收、理解、并接受。
4xx 客户端看起来可能发生了错误,妨碍了服务器的处理。
5xx 服务器在处理请求的过程中有错误或者异常状态发生。

5、HTTP的特点

1、无连接:服务器收到了客户端的请求之后,响应完成并收到客户端的应答之后,即断开连接。
2、无状态:对于发送过的请求或响应都不做持久化处理。
为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session,后面我们再细讲它们。


三、TCP

1、什么是TCP?

传输控制协议的简称。是一种面向连接的、可靠的、基于字节流的传输层通信协议
在用HTTP发送数据之前,需要TCP进行连接。
TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。这个不需要我们程序员去管理,各个平台的操作系统都已封装好,我们直接去用就好了。

2、TCP的连接过程

连接的过程:三次握手、数据传输、四次分手。

image.jpeg
  • 三次握手

三次握手的目的就是客户端和移动端双方建立连接,即双方开辟队列空间
双方有资源为对方就是有连接了。

1、客户端向服务端发送一个含有SYN的数据包
2、服务端接收到这个SYN包之后,向客户端发送一个SYN+ACK的包
3、客户端收到SYN+ACK的包后,再把含有ACK的包发给服务端

SYN:同步序列编号(Synchronize Sequence Numbers)
ACK :确认字符 (Acknowledge character)

为什么是3次握手?
主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而>产生错误,减少不必要的错误和资源的费。
2次可能会浪费资源,4次多余。

  • 四次挥手

三次握手建立连接,开始进行数据的传输,传输完之后连接就要断开

断开连接双方销毁资源

1、客户端向服务端发送一个含有FIN的数据包
2、服务端接收到这个FIN包之后,向客户端发送一个FIN+ACK的包
3、服务端紧接着发送一个FIN包向客户端
4、客户端把含有ACK的包发给服务端
FIN:结束(finsh)

为什么四次分手?
关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。


三、Socket

1、什么是Socket?

接口四元组: ip+port:ip+port,保证连接的唯一性
Socket编程理解为对TCP协议的具体实现,介于应用层和传输层之间。


image.png

2、Socket的工作过程

1、创建Socket
2、连接到服务器
3、发送数据给服务器
4、从服务器接收数据
5、关闭连接
从Socket的工作过程也可以看出跟TCP的工程过程差不多,所以也可以理解为对Socket编程理解为对TCP协议的具体实现。

3、Socket的简单实现

-(void)useSocket{
/*
 1、创建Socket:第一个参数,domin 协议族 制定IPv4
            第二个参数,type Socket类型
              第三个参数,protocol 协议
 */
    int clientSocket = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
    
    /*
     2、连接服务器:
     */
    
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;//协议类型
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");//ip地址
    addr.sin_port = htons(80);//端口
    int result = connect(clientSocket,(const struct sockaddr *)&addr, sizeof(addr));
//    if (result==0) {
//        NSLog(@"成功");
//    }else{
//        NSLog(@"失败");
//    }
    
    if (result !=0) {
        
        NSLog(@"失败");
    }
    
    //3、向服务器发送信息
    const char *mag = "ni hao";
    ssize_t sendCount =  send(clientSocket, mag, strlen(mag), 0);
    NSLog(@"发送的字节数==%zd",sendCount);
    
    
    //4、向服务器发送信息
    uint8_t buffer[1024];
    ssize_t recvCount = recv(clientSocket, buffer, sizeof(buffer), 0);
    NSLog(@"发送的字节数==%zd",recvCount);
    
    //把字符数组转化成字符串
    NSData *data = [NSData dataWithBytes:buffer length:recvCount];
    NSString *recv = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"收到数据==%@",recv);
    
    //5、关闭连接
    close(clientSocket);
}

四、iOS中简单实现网络请求

项目中要比这复杂,要进行各种加密、编码等等,这里只是简单示范。

#pragma mark - Http的使用
/*
 iOS 7.0 以后使用NSURLSession 替代 NSURLConnection 来发送网络请求。
 NSURLSession的特点:
 1、支持后台运行网络任务
 2、暂停、停止、重启网路任务,不需要自己z再封装NSOperation
 3、下载、断点续传、异步下载
 4、获取下载、上传的进度
 5、默认所有的服务都是挂起的
 
 */
-(void)dataTaskWithHttp{
    
    //默认是get请求
    NSURL *url = [NSURL URLWithString:@"http://ldu.fanya.chaoxing.com/portal"];//请求地址
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"post";//请求方式
    NSString *body = @"username=123&password=123";//请求体
    request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];
    
    //发起请求
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
//        id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
        NSLog(@"请求返回的数据==%@",data);
        
    }];
    
    //任务默认是挂起的,开启任务
    [dataTask resume];
}

请求返回的结果,由于data不知后台解析的方法,所以没哟做解析

2021-08-22 13:22:08.562998+0800 Study[95854:1776782] 请求返回的数据data=={length = 16230, bytes = 0x3c21444f 43545950 45206874 6d6c2050 ... 0a3c2f68 746d6c3e }
2021-08-22 13:22:08.563708+0800 Study[95854:1776782] 请求返回的数据response==<NSHTTPURLResponse: 0x600000d45ec0> { URL: http://ldu.fanya.chaoxing.com/portal } { Status Code: 200, Headers {
    Connection =     (
        "keep-alive"
    );
    "Content-Encoding" =     (
        gzip
    );
    "Content-Type" =     (
        "text/html;charset=UTF-8"
    );
    Date =     (
        "Sun, 22 Aug 2021 05:15:21 GMT"
    );
    P3P =     (
        "CP=CAO PSA OUR"
    );
    "Set-Cookie" =     (
        "JSESSIONID=7F0FF0824691664C169933FE6CA27905.jvm1402; Path=/; HttpOnly",
        "fanyamoocs=11401F839C536D9E; Domain=chaoxing.com; Path=/; HttpOnly",
        "route1=67f81b350dca6d80ab086f60f29cf817; Path=/"
    );
    "Transfer-Encoding" =     (
        Identity
    );
    Vary =     (
        "Accept-Encoding"
    );
    "X-FRAME-OPTIONS" =     (
        SAMEORIGIN
    );
} }

参考:
HTTP协议超级详解
请说说GET和POST请求有什么区别?
TCP 详解

相关文章

  • iOS-网络学习1

    一、OSI 7层参考模型 二、HTTP 1、什么是HTTP? 超文本传输协议的简称,通过这个协议我们可以向服务端发...

  • iOS-用手机网络测试Ipv6

    iOS-用手机网络测试Ipv6

  • iOS-网络学习2

    四、HTPPS 1、为什么有HTTPS? http的缺点:通信使用明文,数据可以被窃听、篡改风、冒充风 2、HTT...

  • 网络

    iOS面试备战-网络篇[https://www.jianshu.com/p/0e5b22cd3409]IOS-网络...

  • ios-网络

    HTTP请求的常见方法 GET所有参数拼接在URL后面,并且参数之间用&隔开比如http://520it.com?...

  • iOS-私有API与runtime

    iOS-私有API与runtime iOS-私有API与runtime

  • iOS-代码混淆加固策略

    iOS-代码混淆加固策略 iOS-代码混淆加固策略

  • iOS-性能优化深入探究

    iOS-性能优化深入探究 iOS-性能优化深入探究

  • iOS-模拟网络工具

    iOS-模拟网络工具 真实的网络环境远比实验室复杂,在3G、4G、WiFi、等各种条件下,网络都不尽相同。而网络模...

  • iOS-自动打包及分发(三)

    iOS-自动打包及分发(一)iOS-自动打包及分发(二)iOS-自动打包及分发(三) 废话不多说了,上正文: 一、...

网友评论

      本文标题:iOS-网络学习1

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