iOS技术

iOS面试之__HTTP、Socket、TCP的区别

2017-04-08  本文已影响116人  努努Nunu

写于: 2016年05月08日

这三个概念经常被谈到, 也是比较容易被混淆掉的概念. 在会回顾之前我们先看一下这三者在TCP/IP协议族中的位置关系:


图1. 图层关系图1. 图层关系

HTTP是应用层的协议, 更靠近用户端;
TCP是传输层的协议; 而Socket是从传输层上抽象出来的一个抽象层,本质是接口.

所以本质上三种还是很好区分的.
尽管如此, 有时候你可能会懵逼, HTTP连接、TCP连接、Socket连接有什么区别?

好吧, 如果上面的图解释的还是不够清楚的话, 我们继续往下看.

1. TCP连接和HTTP连接的区别

上文提过, HTTP是基于TCP的, 客户端往服务端发送一个HTTP请求时第一步就是要建立与服务端的TCP连接, 也就是先三次握手, "你好, 你好, 你好". 从HTTP1.1开始支持持久连接, 也就是一次TCP连接可以发送多次的HTTP请求.

==小结: HTTP基于TCP==

2. TCP连接与Socket连接的区别

在图1 中我们提到, Socket层只是在TCP/UDP传输层上做得一个抽象接口层, 因此一个Socket连接可以基于连接, 也有可能基于UDP. 基于TCP协议的Socket连接同样需要三次握手建立连接, 是可靠的. 基于UDP协议的Socket连接不需要建立连接的过程, 不管对方能不能接收到都会发送过去, 是不可靠的, 大多数的及时通讯IM都是后者.

==小结: Socket也基于TCP==

3. HTTP连接和Socket连接的区别

区分这两个概念是比较有意义的, 毕竟TCP看不到摸不着, HTTP与Socket是实实在在能用到的.

4. 问题来了:什么时候该用HTTP, 什么时候该用Socket

这个问题的提出是自然而然的. 当你接到一个与另一方的网络通讯需求, 自然会考虑用HTTP还是Socket.

在iOS中, 发HTTP请求一般用原生的 NSURLConnection、NSURLSession或者开源的AFNetworking(推荐)、ASIHttpRequest(已停止更新). 连接Socket连接 可以用CocosAsyncSocket.

The end

祝所有的母亲,节日快乐,健健康康!

==欢迎留言, 写的不对的地方还请不吝赐教.==

上一篇 下一篇

猜你喜欢

热点阅读