网络应用程序员最熟悉的就是Socket,现在抛开计算机网络理论,从应用层的角度来理解到底什么是Socket。
- 1)Socket 是什么;
数据包经由应用程序产生,进入到协议栈中进行各种报文头的包装,然后操作系统调用网卡驱动程序指挥硬件,把数据发送到对端主机。
一个Socket就是五元组:
1)协议;
2)本地地址;
3)外部地址;
4)状态;
5)PID。
- 2)Socket 是如何创建的;
Socket 是和应用程序一起创建的。
应用程序中有一个 socket 组件,在应用程序启动时,会调用 socket 申请创建Socket,协议栈会根据应用程序的申请创建Socket:首先分配一个Socket所需的内存空间,这一步相当于是为控制信息准备一个容器,但只有容器并没有实际作用,所以你还需要向容器中放入控制信息;如果你不申请创建Socket所需要的内存空间,你创建的控制信息也没有地方存放,所以分配内存空间,放入控制信息缺一不可。至此Socket的创建就已经完成了。
Socket创建完成后,会返回一个Socket描述符给应用程序,这个描述符相当于是区分不同Socket的号码牌。根据这个描述符,应用程序在委托协议栈收发数据时就需要提供这个描述符。
- 3)Socket 是如何连接的;
上图引用自《跟着动画来学TCP三次握手和四次挥手》
- 4)Socket 是如何收发数据的;
上图引用自《跟着动画来学TCP三次握手和四次挥手》
- 5)Socket 是如何断开连接的;
当通信双方不再需要收发数据时,需要断开连接。不同的应用程序断开连接的时机不同。
上图引用自《跟着动画来学TCP三次握手和四次挥手》
- 6)Socket 套接字的删除等。
上述通信过程完成后,用来通信的Socket就不再会使用了,此时我们就可以删除这个Socket了。这时候Socket不会马上删除,而是等过一段时间再删除。