搞清楚socket

为什么要有socket?

“TCP的协议很复杂,我们不能要求每个程序员都去实现建立连接的三次握手、累积确认、分组缓存,这些应该是属于操作系统内核的部分,没必要重复开发。但是对于应用程序来讲,操作系统需要抽象出一个概念,让上层应用去编程。”

为什么叫socket?

一个比喻而已,就像插座一样,一个插头插进插座,建立了连接。实际上,这个连接有两个端点,每个端点就是一个socket。

为什么要用本端IP、端口号去对应一个socket,而不是只用IP或者IP+进程ID?

TCP是两个进程之间的通信,客户端上有很多进程同时访问多个服务器,服务器上也有多个进程对外提供服务,所以要区分开。不能使用进程号作为区分的ID是因为进程号是一个动态的东西,如果服务器的进程重启了,进程号就变了,且服务器没有办法通知客户端。而端口号是可以固定的,比如80、443,就是服务器上固定的提供HTTP、HTTPS服务的端口号,客户端只需连接这些端口即可。


socket,就是应用层调用内核TCP/IP协议栈的接口,一个TCP连接需要一组IP+端口号去唯一标识,作为应用层的进程,也要跟这个TCP连接进行绑定。

在这里插入图片描述


在这里插入图片描述


参考文章:《码农翻身》

猜你喜欢

转载自blog.csdn.net/ArtAndLife/article/details/110203569