网络知识点总结
2016-06-03 本文已影响98人
没有名字就是我的名字
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
参数说明:
- 常用
AF_INET
(ipv4+端口号)(将来苹果要强烈要求使用ipv6
) - TCP用
SOCK_STREAM
(流式),UDP用SOCK_DGRAM
(数据报式) - TCP用
IPPROTO_TCP
,UDP用IPPROTO_UDP
。可以直接写0
,这样会根据前两个形参自动选择
返回值:
是socket描述符
。每个进程(一般的程序只有一个进程)中都有一个 socket描述符表,通过socket描述符就可以在操作系统的内核缓存中找到相应的socket。
返回-1为失败
方法名:
socket(int, int, int)
2. 发起connect
参数:
socket描述符
-
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()的作用是把任意数改成大尾顺序;
- 结构体的大小,
sizeof()
;
返回值:
返回0为成功,其它为失败
方法名:
connect(int, const struct sockaddr *, socklen_t)
3. send数据:
参数:
socket描述符
-
char *
要发送的字符串 - 字符串长度,
strlen()
- 与阻塞有关,可选项非常的多,一般置
0
返回值:
-1
失败,大于0是发送的字节数
。
函数:
send(int, const void *, size_t, int)
4. recv数据
参数:
socket描述符
uint8_t类型的数组
- 字符串长度,
strlen()
- 与阻塞有关,可选项非常的多,一般填写
0
返回值:
-1
失败,大于0则是接收的字节数
。
方法名:
recv(int, void *, size_t, int)
5. close连接:
参数:
socket描述符
方法名:
close(int)
请求的格式:(一行二头三体)
请求行:请求方法``空格``路径``协议和版本号``\r\n
请求头:头字段名``:``空格``头字段值``\r\n
结束符:\r\n
请求体:默认的GET请求没有请求头
比较常用几个请求头
- Host:主机地址;
- Connection:长连接或短连接。工作中遇到的部分长连接需要使用定时器发送规定内容的字符串,以这种方式发送的请求叫做
心跳包
;
数据解析
序列化和反序列化
- 序列化
在向服务器发送数据之前,将 NSArray / NSDictionary 转换成二进制的过程
- 反序列化
从服务器获取数据之后,将二进制数据转化为NSArray / NSDictionary的过程