网络知识点总结

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的过程

推荐阅读更多精彩内容