Socket机制概念讲解说明

44 篇文章 4 订阅

 

Socket两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。

我们已经知道网络中的进程是通过 socket 来通信的,那什么是 socket 呢?


首先明确Socket在网络模型中哪里:是应用层与传输层之间的桥梁

image回顾一下网络模型:OSI七层网络模型:

1.应用层.

2.表示层.

3.会话层.

4.传输层.

5.网络

层.

6.数据链路层.

7.物理层

TCP/IP四层网络模型:应用层.传输层.网络层,网络接入层

HTTP协议:属于应用层面向对象的协议(超文本传输协议),常基于TCP连接方式,特点是:

1.支持客户/服务端模式

2.简单快捷灵活

3.客户端发送的每次请求都需要服务器回

送响应,请求结束后主动释放连接,俗称”短连接”

TCP协议:传输控制协议,提供面向连接.可靠的字节流服务,提供超时重发,丢弃重复数据,检验数据,流量控制等功能。在正式收发数据前,必须建立可靠的连接,也即:三次握手.

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN (ack=j+1),同时自已也发送一个SYN 包(syn=k),即SYN+ ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

(关于四次挥手

先由客户端向服务器端发送一个FIN,请求关闭数据传输。

当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于FIN+SEQ

然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。

当客户端收到服务器端的FIN是,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ

UDP协议:用户数据报协议,面向非连接,不保证可靠性的数据传输服务,没有超时重发等机制,故而传输速度很快.特点:它不与对方建立连接,而是直接就把数据包发送过去,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。

Socket:又称”套接字”,应用程序通过”套接字”向网络发送请求或应答,它是一个针对TCP和UDP编程的接口,借助它建立TCP/UDP连接。

socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉HTTP协议一Socket连接- -TCP连接关系:1.HTTP协议提供了封装或者显示数据的具体形式;

2.Socket连接提供了网络通信的能力;

3.TCP连接提供如何在网络中传输;

4.socket是纯C语言的,跨平台;

5.HTTP协议是基于socket的,底层使用的就是socket;

6.创建Socket连接时,可以指定使用的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

TCP和UDP区别:

1.基于连接和无连接

2.对系统资源要求(TCP较多,UDP较少)

3.UDP程序结构较简单

4.TCP是流模式,UDP是数据报模式

5.可靠性:TCP保证数据正确性,UDP可能丢包,不保证数据准确性

 


 

Socket(套接字)是计算机网络编程中的一个概念,它提供了一种通信机制,使得不同的进程(程序)之间可以在网络上相互通信。Socket 可以看作是一种特殊的文件,它支持在网络上读写数据,通过 Socket 可以实现进程之间的通信和数据交换。 Socket 通常是指一个 IP 地址和一个端口号的组合,这个组合可以唯一标识网络中的一个进程(程序)。在网络通信中,Socket 通常会被分为客户端和服务器端两种类型。客户端负责向服务器发送请求,并等待服务器的响应;服务器端则负责接收客户端请求,并返回相应的数据。 Socket 编程一般分为以下几个步骤: 1. 创建 Socket:使用 socket() 函数创建一个 Socket,指定协议类型(如 TCP 或 UDP)、IP 地址和端口号等参数。 2. 绑定 Socket:使用 bind() 函数将 Socket 绑定到指定的 IP 地址和端口号上,使得其他进程可以通过这个地址和端口号来访问该进程。 3. 监听 Socket:使用 listen() 函数将 Socket 设置为监听状态,等待客户端请求的到来。 4. 接受连接:使用 accept() 函数接受客户端的连接请求,返回一个新的 Socket,用于与客户端进行通信。 5. 发送和接收数据:使用 send() 和 recv() 函数进行数据的发送和接收。 6. 关闭 Socket:使用 close() 函数关闭 Socket,释放资源。 Socket 编程是一种基于网络通信的编程方式,它可以实现进程之间的通信和数据交换,是网络编程领域中非常重要的一种技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值