iOS开发网络协议----HTTP/TCP/IP浅析&&Socket

1. OSI分层

国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI模型。
OSI(Open System Interconnection)模型定制的七层标准模型分别是:

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

虽然国际化标准组织定制了这样一个网络协议的模型,但是实际上互联网通讯使用的网络协议时TCP/IP网络协议(Transmission Control Protocol)。TCP/IP是一个协议族,也是按照层次划分。共四层:

  • 应用层
  • 传输层
  • 互联网络层
  • 网络接口层

OSI网络协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP中有两个重要的协 议,传输层的TCP协议和互连网络层的IP协议,因此就拿这两个协议做代表,来命名整个协议族了,在说TCP/IP协议时,是指整个协议族。

2.TCP和UDP的区别?

先说传输层,传输层有多个协议,但最主要的是TCP和UDP协议。两者两则的区别在于TCP协议需要接收方反馈,UDP协议不需要接收方反馈。因此,TCP传输比UDP传送更可靠,但是TCP传输的效率就不如UDP了。至于,在传送过程中具体选择哪种传送方式,需要具体问题具体分析。在不可靠的 网络传送过程中一般选择TCP传送方式。在讲求效率,或者不在乎传送失误的情况下可以选择UDP方式来提高传输速率。
TCP与UDP区别总结:
TCP和UDP都是传输层的两个协议,他们之间的一个区别主要从以下三个方面来提现:

  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
  2. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。决定了TCP是一个可靠的传输协议,它可以保证数据传输的正确性,保证我们的不丢包不重复,而且数据是按顺序到达的,UDP协议是一个不可靠的协议,它不能保证我们数据能够可靠完整的到达,它只是尽最大努力去完成交互。
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
  5. TCP首部开销20字节;UDP的首部开销小,只有8个字节。
  6. TCP的传输效率低,UDP的传输效率高,在一些注重传输效率,不在意丢包的场景比如ip电话、流媒体等都会选择用UDP协议传输。

3、TCP/IP协议

http、tcp、ip都属于什么层呢?
在这里插入图片描述

  • http协议对应于应用层
  • tcp协议对应于传输层
  • ip协议对应于网络层

三次握手:
所谓三次握手即建立TCP连接,就是指建立一个TCP连接时,需要客服端和服务端总共发送3个包已确认连接的建立。
(1)第一次握手:是客户端向服务器发起的,客户端将标志位SYN设置为1,所以这个包也叫做SYN包,随机产生一个seq=J,并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待Server确认。
(2)第二次握手:是服务器向客户端发起的,收到数据包后由标志位SYN=1知道客户端请求建立连接,Server将标志位SYN位和ACK位都置为1,ack=J+1,随机产生一个seq=K,并将该数据包(SYN-ACK包)发送给客户端以确认连接请求,服务端进入SYN_RCVD状态。
(3)第三次握手:是客户端发给服务器的,客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包(ACK包)发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则建立成功,Client和Server进入已确立(ESTABLISHED)状态,完成三次握手,随后Client和Server之间可以开始传输数据了。

为什么TCP的连接过程是3次握手而不是2次握手(服务端回复SYN+ACK包后就建立连接)?
答:这是为了防止已经失效的请求报文,突然又传到服务器引起错误

一包数据可能采取拆成多包发送,如何处理丢包问题?这些数据包到达的顺序不同,如何处理乱序问题?
答:tcp协议为每一个连接建立了一个发送缓冲区,从建立连接后的第一个字节的序列号为0,后面每一个字节的序列号都会增加1,发送数据时从发送缓冲区取一部分数据组成发送报文,在其tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ACK等于接收序列号加长度,也就是下一包数据需要发送的起始序列号,这样一问一答的放松方式能够使发送端确认发送的数据已经被对方收到,发送端也可以一次发送连续的多包数据,接收端只需要回复一次ACK就可以了,这样发送端可以把待发送的数据分割成一系列的碎片发送到对端。对端根据序列号和长度在接收后重构出来完整的数据,假设其中丢失了某些包数据,在接收端可以要求发送端重传。

四次挥手:
所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
(1)第一次挥手:客户端发送一个FIN包,用来关闭客户端和服务器的数据传送,客户端进入FIN_WAIT_1状态。
(2)第二次挥手:服务端收到FIN包后,发送一个ACK包给客户端,服务端进入CLOSE_WAIT状态。
(3)第三次挥手:服务端发送一个FIN包,用来关闭服务端到客服端的数据传送,服务端进入LAST_ACK状态。
(4)第四次挥手:客户端收到FIN包,客户端进入TIME_WAIT状态,接着发送一个ACK包给服务端,服务端进入关闭状态,完成四次挥手。

4、SOCKET连接与HTTP连接

通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

5.SOCKET连接与TCP/IP连接

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。
实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使用TCP/IP协议。
总结:
1.HTTP是应用层协议,定义的是传输数据的内容以及格式的规范。
2.TCP是底层通讯协议,定义的是数据传输和连接方式的规范。
3.Socket可以支持不同的传输层协议(TCP/UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接,Socket是发动机,提供了网络通信的能力

6.什么是单工、半双工、全双工通信?

单工:信息只能单向传送
半双工:信息能双向传送但不能同时双向传送;
全双工:信息能够同时双向传送。

7.WebSocket与Socket的关系

总结:Socket和WebSocket在运行方式实现机制应用场景等方面存在较大差异,它们各自适用于不同的场景和需求。

Socket其实并不是一个协议,而是为了方便使用TCP/UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。

WebSocket就像HTTP一样,是一个典型的应用层协议。
总结:
Socket是传输控制层接口,WebSocket是应用层协议。
两者区别:

  • 协议层次不同
    Socket不是一种具体的协议,而是位于应用层和传输控制层之间的一组接口,用于实现不同计算机之间的数据传输,其提供了一套调用TCP/IP协议的API,隐藏了复杂的TCP/IP协议族,使得用户可以通过简单的接口进行通信。而WebSocket是一项HTML5技术规范,是一种应用层协议,它定义了WebSockets API,支持页面使用WebSocket协议与远程主机进行全双工通信。
  • 运行方式不同
    Socket在服务器创建后监听端口和IP地址,等待客户端的请求并建立连接后才能进行数据传输。而WebSocket由浏览器发起,在收到响应后保持长连接,使服务器可以主动向客户端推送信息。
  • 实现机制不同
    Socket接口不依赖于任何协议、格式或地址,是一种独立的抽象接口。而WebSocket基于HTTP协议,通过在建立连接时升级为WebSocket协议来实现全双工通信。
  • 应用场景不同
    Socket主要应用于服务器之间的通信以及大吞吐量的数据交换场景,如消息队列和数据同步。而WebSocket适合处理实时性要求较高且频率较高的数据传输,如在线游戏、视频直播、通知提醒等。

8.WebSocket与HTTP的关系

WebSocket是HTML5规范提出的一种协议。HTML5 Web Sockets规范定义了Web Sockets API,支持页面使用Web Socket协议与远程主机进行全双工的通信。它引入了WebSocket接口并且定义了一个全双工的通信通道,通过一个单一的套接字在Web上进行操作。
相同点:
1.都是一样基于TCP的,都是可靠性传输协议。
2.都是应用层协议。
不同点:
1.WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
2.WebSocket是需要浏览器和服务器握手进行建立连接的。而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接。

联系:
WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。
WebSocket连接的过程:
1.客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
2.服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
3.客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。
总结:
在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP通信通道进行数据传送。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值