套接字 - 面向连接TCP和无连接UDP
客户端 / 服务端架构
- 什么是客户端 / 服务端架构
- 服务器是一个软件或硬件,用于向一个或多个客户端(客户)提供所需要的服务
- 服务器存在的唯一目的就是等待客户的请求,给这些客户服务,然后再等待其他的请求
套接字: 通信端点
-
通信端点
- 让服务器能监听请求
-
什么是套接字
- 套接字是一种具有通信端点概念的计算机网络数据结构
- 网络化的应用程序在开始任何通讯之前都必须要创建套接字
-
套接字的类型
- 面向连接的套接字,即在通信之前一定要建立一条连接,也被称为"虚电路"或"流套接字"
面向连接与无连接
-
面向连接
-
在通信之前一定要建立一条连接,也被称为"虚电路"或"流套接字"
-
特点:
- 面向连接的通信方式提供了顺序的、可靠的、不会重复的数据传输,而且也不会被加上数据边界。
- 这也意味着每一个要发送的信息,可能会被拆分成多份,每一份都会不多不少的正确的到达目的地,然后被重新按顺序拼装起来,传给正在等待的应用程序
-
这种连接方式主要协议是传输控制协议(即TCP)。要创建TCP套接字就得在创建的时候指定套接字类型的SOCK_STREAM
-
TCP套接字采用SOCK_STREAM这个名字,表示它作为流套接字的特点
-
由于这些套接字使用网际协议(IP)来查找网络中的主机,所以这样形成的整个系统,一般有两个协议组成(TCP / IP),即 TCP / IP
-
-
无连接
-
与虚电路完全相反的数据报型的无连接套接字
-
特点:
- 无需建立连接就可以进行通讯
- 数据报会保留数据边界,意味着数据是整个发送的,不会像面向连接的协议那样先拆分成小块
-
缺点:
- 数据到达的顺序、可靠性及不重复性无法保证,甚至可能会丢失
-
优点:
- 由于面向连接需要提供一些保证,以及要维持虚电路连接,这些都是很重的额外负担
- 数据报没有这些负担,所以它更"便宜"。通常能提供更好的性能,更适合某些应用场合
-
实现这种连接的主要协议是用户数据报协议(即UDP)。
-
创建UDP套接字需要指定套接字类型为SOCK_DGRAM
-
由于UDP套接字使用的是网际协议来查找网络中的主机,所以这样形成的整个系统,一般有两个协议组成(UDP / IP),即 UDP / IP
-