iOS 网络协议相关

1. HTTP

超文本传输协议; 是基于TCP的;
常见方式有GET, POST, HEAD, PUT, DELETE, OPTIONS;
特点:

  • 1.无链接, 有建立链接和释放链接的过程;
  • 2.无状态; 如果没有session或者cookie即使是多次请求服务端也没法确认客户端的身份;

知识点:GET和POST的区别有哪些?

GET POST
GET请求参数以?分隔拼接到URL后面; POST放在Body中;
GET参数长度限制2048字节; POST无限制;
GET是获取资源; POST是处理资源;
安全性, 幂等, 可缓存; 非安全性, 非幂等, 不可缓存;

安全性: 不引起服务端的任何状态变化;
幂等性: 同一个请求执行多次效果是否一样;
缓存性: 一个请求是否可以被缓存;

日常开发中常见的状态码:
200:正常相应;
404:请求错误;
500:服务器内部错误;

持久连接


持久连接有点:提升网络请求销量, 在一段时间内即使多次请求也只执行一次链接和断开操作;
持久连接头部字段设置

#允许客户端持久连接
Connection:keep-alive
#100s内有效, 不设置表示永久有效
Keep-Alive: timeout=100

知识点: 持久连接如何判断数据是否已经已经传输完毕?
1: 判断数据是否已经达到Content-Length所设置的大小;
2: 如果分块传输数据, 根据chunked编码数据判断, 如果chunked编码的数据最后有chunked的块, 则表示完成;


2.HTTPS

简单理解为安全的HTTP; HTTPS = HTTP + SSL/TLS;

HTTPS使用了哪些加密方式?
建立链接的过程使用非对称加密(耗时);(非对称加密:公钥加密, 私钥解密)
后续通信采用对称加密;(对称加密: 只有一个密钥)
加密方式


3. TCP/UDP

TCP:传输控制协议, 提供面向链接可靠的字流服务, 提供超时重发, 丢弃重复数据, 检测数据控制流量等功能, 正式收发数据之前需要建立三次握手;

建立链接三次握手:

  • 1.客户端发送syn包,并进入syn_send(请求链接)状态, 并等待服务器确认;
  • 2.服务器收到客户端的syn(序列编号)包后,也发送一个syn(syn=k, 即syn+ack)包,并进入syn_reveive状态;
  • 3.客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack = k+1),此包发送完毕则和服务器进入建立链接(ESTABLISHED)状态,完成三次握手;

为什么要三次握手?
假设只有两次握手, 那么加入客户端发发送的syn包超时了, 客户端会启用重试策略再次发送syn包, 后边的的syn包先被接受, 然后链接成功, 接着最先发送的syn被接受到了, 就会再次链接; 然而初衷只是建立一次链接; 三次握手有效解决这个问题;

断开连接的四次握手:

  • 1.客户端发送fin包到服务器, 请求是否可以断开;
  • 2.服务器收到收发送fin包,确认可以断开;
  • 3.服务器发送ack包,并断开连接;
  • 4.客户端收到服务器的包并断开链接,同时发送ack包确认断开;

UDP:用户数据报协议, 面向非链接, 不保证可靠性的数据传输服务, 没有超时重发等一系列等机制, 故而传输速度很快;
不与对方建立链接, 而是直接把数据包发送过去, UDP适用于一次只传送少量数据对可靠性要求不高的应用环境;

对比.png


4. Socket

socket是针对TCP/IP协议的封装, socket本身并不是协议, 而是一个API,通过socket我们才能使用TCP/IP协议;
基于TCPsocket如何保证数据的完整性, 读到包头开始,直到读到相应的包尾,取出中间的buffr,认为是一个完整的数据包;
客户端的使用流程:

  • 1.引入头文件;
  • 2.创建socket;
  • 3.建立链接(基于TCP, 三次握手流程);
  • 4.发送数据到服务器;
  • 5.从服务器接受数据;
  • 6.关闭链接;

5. DNS

域名到IP地址的映射,DNS解析请求采用UDP明文数据报;
常见的查询方式有递归查询和迭代查询

DNS劫持问题:由于采用UDP明文数据报, 这样就容易被钓鱼DNS劫持
返回错误的IP地址; 注意:DNS劫持HTTP是没有关系的, 因为劫持是发生在HTTP建立之前的;
可以通过HTTPDNS长连接方案解决DNS劫持问题;


6. Session&Cookies

Cookies是保存在客户端用来记录区分用户状态的数据;
Session是保存在服务器端用来记录区分用户状态的数据;
Session依赖于Cookies的机制;


名词解释及链接

ack 即确认字符, 在TCP/IP协议中如果接收方成功收到数据那么会回复一个ack数据(通常ack有自己固定的格式和长度大小, 由接收方回复给发送方);
syn即同步序列编号, TCP/IP建立链接使用的握手信号,TCP链接的第一个包; (syn攻击, 大量发送此类的包, 服务器);
fin带有标志位的数据包用来结束一个TCP回话,但对应的端口仍处于开放状态, 准备接收后续的数据;


参考文章
iOS HTTP chunked
HTTP的长连接和短连接
HTTP Keep-Alive模式
HttpDNS功能说明及实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容