对于socket的一些理解
在大学刚接触到网络编程以及web编程的时候,听说过socket以及端口号,但是当时只是知道写法如下:
1 | // server |
但是并不明白为什么要这样做,在学习了计算机网络后,有了一些个人理解。
在计算机网络中,我们编写的代码,是属于应用层的内容,当需要传输数据时,需要先将数据传送给运输层,然后运输层送往网络层,依次往下传送。
其实我们可以将应用层与其他的几层拆分开,然后把运输层及其以下的几层当作是一个其他人已经封装好了的计算机网络。我们传输数据,只需要把数据交给这个计算机网络,它就能帮我们把数据传输到我们的目的地。而socket,就是我们的编写的程序与计算机网络之间的接口,也可以理解为一个桥梁,连接我们应用程序与计算机网络。
而我们在web编程,比如使用springboot框架,也需要在配置文件中指定端口号,它其实也是用于底层封装的socket指定对应端口号。
一个较为形象的比喻,我们的应用程序可以理解为手机,也就是应用层。而运输层及其以下的那几层可以理解为我们的房子内的电线。我们想要充电,就需要一个充电器,连接我们的手机以及那些电线。而这个充电器,可以理解为socket。
也就是说,每个socket都需要绑定端口号,用于标识它对应于哪个进程,我们的进程需要指定这个端口号,然后将数据通过socket传送到运输层,并进行第一次数据封装,用于目的主机找到对应的进程。到这里,就可以认为我们进程要传送的数据已经交给计算机网络,剩余的内容就由计算机网络处理。