什么是Socket?

时间:2022-11-24 15:00:44

网络应用程序员最熟悉的就是Socket,现在抛开计算机网络理论,从应用层的角度来理解到底什么是Socket。

  • 1)Socket 是什么;

数据包经由应用程序产生,进入到协议栈中进行各种报文头的包装,然后操作系统调用网卡驱动程序指挥硬件,把数据发送到对端主机。

一个Socket就是五元组:

1)协议;

2)本地地址;

3)外部地址;

4)状态;

5)PID。

什么是Socket?

  • 2)Socket 是如何创建的;

Socket 是和应用程序一起创建的。

应用程序中有一个 socket 组件,在应用程序启动时,会调用 socket 申请创建Socket,协议栈会根据应用程序的申请创建Socket:首先分配一个Socket所需的内存空间,这一步相当于是为控制信息准备一个容器,但只有容器并没有实际作用,所以你还需要向容器中放入控制信息;如果你不申请创建Socket所需要的内存空间,你创建的控制信息也没有地方存放,所以分配内存空间,放入控制信息缺一不可。至此Socket的创建就已经完成了。

Socket创建完成后,会返回一个Socket描述符给应用程序,这个描述符相当于是区分不同Socket的号码牌。根据这个描述符,应用程序在委托协议栈收发数据时就需要提供这个描述符。

  • 3)Socket 是如何连接的;


什么是Socket?

 上图引用自《跟着动画来学TCP三次握手和四次挥手》

  • 4)Socket 是如何收发数据的;


什么是Socket?

上图引用自《跟着动画来学TCP三次握手和四次挥手》

  • 5)Socket 是如何断开连接的;

当通信双方不再需要收发数据时,需要断开连接。不同的应用程序断开连接的时机不同。

什么是Socket?

上图引用自《跟着动画来学TCP三次握手和四次挥手》

  • 6)Socket 套接字的删除等。

上述通信过程完成后,用来通信的Socket就不再会使用了,此时我们就可以删除这个Socket了。这时候Socket不会马上删除,而是等过一段时间再删除。