socket网络编程:传输层详解(TCP / UDP)

Posted py-xiaoqiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket网络编程:传输层详解(TCP / UDP)相关的知识,希望对你有一定的参考价值。

8.2 传输层详解 TCP/UDP

作为软件程序猿,我们只能决定应用层的协议用什么。其他层都是固定的

TCP

  • TCP协议又称Stream协议(流式协议):像水流一样传递,所以需要一个双向管道
    • 建立连接(挖管道):(3次握手)
      • 1次握手:客户端向服务端发一个请求(SYN=1,Seq=x):我要去连接你,可以吗? →
      • 2次握手:服务端回复客户端的请求(ACK=1,Seq=x):可以。 同时,服务端向客户端发一个请求(SYN=1,Seq=y):我也要连接你,可以吗?
      • 3次握手:客户端回复服务端的请求(ACK=1,Seq=y):可以。

        这样就建立了双向的连接

    • 断开连接:由于服务端传向客户端的数据不一定传完,所以需要4步(4次分手)
      • 1次:客户端向服务端发送结束请求(FIN=1)
      • 2次:服务端回复客户端的请求(ACK=1)

        在这里服务器会把传向客户端的数据传完才发送断开请求

      • 3次:服务端向客户端发送请求(FIN=1)
      • 4次:客户端回复服务端的请求(ACK=1)

SYN = 1 表示这是一个请求
ACK = 1 表示这是一个确认
seq = x 表示序列号是x,用来确认服务端是刚才我发送的服务端的回复

TCP是可靠协议,什么是可靠协议呢? 可靠指定是:当发送方发送数据给接受端的时候,另一端一定会回复一个信息告诉发送方我已经收到。如果发送方没收到回复,就重发。

  • TCP特点:
    • 传输效率低
    • 数据传输可靠

      TCP协议又称流式协议(STREAM),因为数据是以流式发送的,所以会发生粘包现象

    • 流式协议:
      • 会发生粘包现象
      • 不能发送空数据
      • 发送和接受可以是多对多

UDP

  • UDP不需要挖管道(没有连接存在),只要知道目标,直接发包,不确认对方是否收到。
    • UDP传输速度很快:不需要建立连接,不需要确认对方是否收到
    • 不可靠协议(如果网络等出现问题,很可能丢包)

      UDP协议又称数据报协议(DataGRAM),不会发生粘包现象

    • 数据报协议:
      • 不会发生粘包现象
      • 可以发送空数据(自带报头,所以实际上数据不是空)
      • sendto和recvfrom是一对一关系

以上是关于socket网络编程:传输层详解(TCP / UDP)的主要内容,如果未能解决你的问题,请参考以下文章

Socket编程详解

iOS中 HTTP/Socket/TCP/IP通信协议详解

Java开发之Socket编程详解

linux系统socket通信编程详解函数

网络编程socket基本API详解

[网络] SOCKET, TCP/UDP, HTTP, FTP