TCP下socket(套接字)通信-----理论版

目录

一、socket是什么?

二、如何利用socket在两端进行数据传输?

服务器端:

客户端:

三、在编程中如何实现TCP套接字通信?

四、进一步理解socket


一、socket是什么?

socket又叫套接字,是用于主机间进行通信的API,工作在TCP/IP协议之上,浏览器、手机应用、用于服务器管理的SSH客户端等均是基于socket实现的。

要通过socket与不同主机间建立通信,需要指定主机的ip地址和端口号;ip地址用于标识唯一主机,端口号用于标识主机上的特定服务或者应用程序,其值是一个16位的数字,取值范围从0到65535。

常用的socket有两种类型:TCP套接字和UDP套接字。

TCP:传输控制协议,基于数据流,可靠传输、有序传输,更适合需要可靠传输的应用,如文件传输、电子邮件、Web浏览等。

UDP:用户报文协议,以报文为单位收发数据,不保证数据一定被收到,更低延迟、占用更少系统资源,更适合语音通话等实时性较高的应用。

本文主要关注TCP套接字。

在TCP中,数据收发的双方分别称为:服务器和客户端,服务器被动等待客户端的连接,不会主动发起请求。

二、如何利用socket在两端进行数据传输?

服务器端:

1.创建套接字(socket)

服务器使用socket()函数创建一个套接字。

socket(int domain, int type, int protocol)

int domain:AF_INET:代表使用IPv4的地址家族

int type:SOCK_STREAM:代表使用的socket类型是TCP协议

2.绑定套接字(bind)

服务器使用bind()函数将套接字关联到某一个网卡(网络接口)和端口号上,网卡可以通过ip地址指定,这样客户端就可以通过这个地址和端口找到该服务器。

3.监听连接(listen)

服务器使用listen()函数使套接字进入监听状态,并等待客户端的连接请求。

4.接受连接(accept)

服务器使用accept()函数等待并接受客户端的连接请求。accept()函数会阻塞,直到一个客户端连接请求到达。一旦接受连接,accept()会返回一个新的套接字socket c(称为已连接套接字)和客户端的ip地址,专门用于与客户端进行通信。

5.数据传输(send/recv)

一旦连接建立,服务器可以使用send()函数发送数据,使用recv()函数接收数据,可以多次调用,发送接收多个数据包。

6.关闭连接(close)

数据传输完成后,服务器端使用close()函数关闭套接字。这会触发TCP的四次挥手过程,正式关闭连接。

客户端:

1.创建套接字(socket)

客户端使用socket()函数创建一个套接字。

2.发起连接请求(connect)

客户端使用connect()函数向服务器的ip地址和端口号发起连接请求,这个请求会触发TCP的三次握手过程。

3.数据传输(send/recv)

一旦连接建立,客户端可以使用send()函数发送数据,使用recv()函数接收数据,可以多次调用,发送接收多个数据包。

4.关闭连接(close)

数据传输完成后,客户端使用close()函数关闭套接字。这会触发TCP的四次挥手过程,正式关闭连接。

具体相关实现函数可见以下参考:

博主:后知~

TCP的套接字的socket通信_如何用套接字描述一个tcp连接-CSDN博客

三、在编程中如何实现TCP套接字通信?

几乎所有的编程语言都支持socket,用法相同,语法不同。

c实现socket通信参见:

博主:后知~ 

TCP的套接字的socket通信_如何用套接字描述一个tcp连接-CSDN博客

python实现socket通信参见:

TCP/IP网络通信之Socket编程入门_哔哩哔哩_bilibili

四、进一步理解socket

socket其实是个代码库or接口层,位于内核和应用程序之间,提供一些高度封装的接口。在os内核空间中,实现网络传输功能的结构是sock,基于不同的协议和应用场景有不同类型的sock,它们结合硬件共同实现了网络传输功能。

为了将这部分功能暴露给用户的应用程序使用,便引入了socket层,同时将sock嵌入到文件系统的框架中,sock就变成了一个特殊的文件,同时创建一个文件,文件有个句柄fd,之后将这部分功能抽象成一个个简单的API接口,之后只需要调用这些接口即可实现数据的传输,这些接口即是send()、listen()、bind()、recv()等等。

socket fd是一个int类型的数字,可以理解为文件系统的身份证号码,通过其可以确定是哪一个sock,将文件句柄暴露给用户,用户操作fd文件系统,就可以将操作指向内核sock结构,从而操作内核sock的网络传输能力。

参考视频:

socket到底是什么?_哔哩哔哩_bilibili

参考资料:

[网络] TCP协议是什么?套接字Socket是什么?它们是什么关系?_网络_虎猫_EICHO-Cloudpods (csdn.net)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值