iOS之网络相关4:TCP和UDP

884 阅读4分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

1. 传输层中的协议

  • 传输层为应用层提供会话和数据包通信服务。
  • 传输层承担OSI传输层的职责。
  • 传输层的核心协议是TCP和UDP。

2. TCP和UDP的区别

    1. TCP面向连接(如打电话要先拨号建立连接),UDP是无连接的,即发送数据之前不需要建立连接。
    1. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错、不丢失、不重复、且按序到达。UDP则尽最大努力交付,但不保证可靠交付。
    1. TCP面向字节流。UDP是面向报文的。
    1. UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
    1. TCP连接只能是点到点的。UDP连接支持一对一、一对多、多对一和多对多的交互通信。
    1. TCP的逻辑通信信道是全双工的可靠信道。UDP则是不可靠信道。

3. TCP和UDP的优缺点

TCP的优点:数据传输可靠、稳定、保证数据顺序正确。
TCP的缺点:数据传输慢、效率低、占用系统资源高、易被攻击。
UDP的优点:数据传输快,比TCP相对安全。
UDP的缺点:数据传输不可靠、不稳定、不保证顺序。

什么时候应该使用UDP?
当对网络通讯质量要求不高的时候,要求网络通讯速度尽量的快,这时就可以使用UDP。比如:语音、视频等。

4. TCP

4.1 TCP的特点

TCP全称是Transmission Control Protocol,中文名为传输控制协议,它可以提供可靠的、面向连接、面向字节流的网络数据传递服务。

4.2 TCP面向连接

TCP是面向连接的协议,建立和断开连接共需要经过7步,三次握手建立连接,四次挥手断开连接。

4.3 三次握手 建立连接

869753-f4089bb4667407b1.png

    1. 客户端首先向服务器申请打开某一个端口(用SYN段等于1的TCP报文)
    1. 然后服务器端发回一个ACK报文通知客户端请求报文收到
    1. 客户端收到确认报文后,再次发出确认报文确认刚才服务器发出的确认报文 至此建立了连接,这个过程也叫TCP的三次握手。如果想让双方都做好转呗的话,一定要发送三次报文,而且只需要三次报文就可以了。

问题:问什么是三次握手不是两次?

为了解决超时导致重复建立的问题。
原因:如果是两次握手会出现问题。客户端发送SYN请求建立连接时,如果网络发生延迟超时后客户端会重复发送SYN消息,服务器接收到第二次发送的建立连接请求,返回确认信息,连接建立完成。第一次发送SYN建立连接请求经过一段时间后到达服务器,服务器会认为客户端要建立新的连接,会重新发送应答响应。这就导致了重复建立连接的情况。

4.4 四次挥手 断开连接

TCP的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。

869753-6ed37416e7530aa0.png

    1. 客户端发送一个FIN为1的TCP报文,用来关闭客户端到服务器的数据传送
    1. 服务器收到这个FIN,返回给客户端一个确认ACK报文。
    1. 服务器关闭客户端的连接,并且发送一个FIN给客户端。
    1. 客户端发回ACK报文确认。 因此断开了连接。这个过程也叫TCP的四次挥手。 问题:为什么是四次挥手?

TCP的连接是全双工连接,因此关闭连接,需要双向关闭才算真正的关闭。
客户端发送FIN请求切断连接,服务器端发送ACK应答切断,当前连接处于半关闭状态。服务器端向客户端发送FIN请求切断连接,客户端返回ACK应答请求,此时连接才真正关闭。

5. 补充

  • 全双工(Full Duplex):是指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的网卡一般都支持全双工。
  • 半双工(Half Duplex):所谓的半双工就是指一个时间段内只有一个动作发生,举个简单例子,一条窄窄的马路,同时只能有一辆车通过,当目前有两辆车对开,这种情况下就只能一辆先过,等到头后另一辆再开,这个例子就形象的说明了半双工的原理。早期的对讲机、以及早期集线器等设备都是基于半双工的产品。
  • 单工通信是指通信线路上的数据按单一方向传送。