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都属于什么层呢?

ios tcp和udp区别 ios 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,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则建立成功,Client和Server进入已确立(ESTABLISHED)状态,完成三次握手,随后Client和Server之间可以开始传输数据了。

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

WebSocket就像HTTP一样,是一个典型的应用层协议。
总结:
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通信通道进行数据传送。