socket理解

1. 什么是TCP/IP、UDP?

  TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。

  UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。

  这里有一张图,表明了这些协议的关系。    

socket理解

图1

  TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IP与UDP的关系了吧。

2.  进程间如何通信

进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进

程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如

UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)

UNIX system V有:消息(message)、共享存储区(shared memory)和信号量(semaphore)等.

他们都仅限于用在本机进程之间通信。网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。为此,首先要解决的是网间进程标识问题。同一主机上,不同进程可用进程号(process ID)唯一标识。但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。例如,主机A赋于某进程号5,在B机中也可以存在5号进程,因此,“5号进程”这句话就没有意义了。 其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。因此,网间进程通信还要解决多重协议的识别问题。 

其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX  BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆socket”。

2.  什么是socket,socket在哪

         是一组接口,应用层与传输层通信中间软件层

        把复杂的TCP/IP协议族封装到socket上

socket理解

3. 为什么要用socket, 它解决了什么问题

       解决了计算机进程间进行通信

4. Socket通信有几种方式?及其特点
 要把这个问题具体回答起来,我估计要起写几千字:在这里简单做个介绍:
Socket通信时有我们常使用TCP,UDP协议等等方式进行通信,TCP是面向连接,安全的协议,例如,我们进行下载等等,就得使用TCP协议,UDP面向无连接,不安全的协议,但传输数据要比UDP快,用于视频聊天等等

5. socket 服务端,客户端

一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。    生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。

socket理解  

图3

  先从服务器端说起。服务器端先初始化Socket(安装好一部电话),然后与端口绑定(bind)(电话号码),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket(安装一部电话),然后连接服务器(connect)(像服务端打电话),如果连接成功(拨通了),这时客户端与服务器端的连接就建立了。客户端发送数据请求(说话),服务器端接收请求并处理请求,然后把回应数据发送给客户端(回话),客户端读取数据,最后关闭连接,一次交互结束。

      在客户端输入服务器端的IP地址和发送的数据,然后按发送按钮,服务器端接收到数据,然后回应客户端。客户端读取回应的数据,显示在界面上。

服务器端:

  在服务器端,主要是启动Socket和监听线程。

       服务器端一直在监听是否有客户端连接,如有连接,处理客户端的请求,给出回应,然后继续监听

维持:

一般为了保持长连接,在不发送业务数据的时候,通过发送心跳数据来维持链路。
否则,该socket可能会因为超时,被中间的网络设备或者server强制关闭

https://bbs.****.net/topics/390922591