scoket

语义scoket就是一个结构体,里面存储有资源的位置:TCP四元组的数据、IO缓存队列、文件描述符(使得应用程序可以读取IO文件里的内容)。
关键点客户端中的内核scoket,会维护发送和接受两个缓存队列。发送队列的数据来自于浏览器程序,接受队列的数据来自于服务器程序。
关键点服务端中的内核scoket,也会维护发送和接受两个缓存队列。发送队列的数据来自于服务器程序,接受队列的数据来自于浏览器程序。
关键点说到底不管应用程序还是服务器程序,读取的IO数据都来自于内核中的scoket管理的缓存队列。
关键点建立scoket意思就是内核开辟的IO资源,资源的标识符就是四元组。资源并不是无限的,首先内核可以分配的端口号就是65535个。

  1. 启动服务器,监听端口号。

image.png

  1. 客户端连接到陈前的阿里云服务器。

    1. //通过nc软件建立TCP连接
    2. nc 101.132.105.76 80
    3. GET / HTTP/1.1
  2. 服务器端:浏览器并不是建立了一个TCP连接,而是多个TCP连接到服务器的80端口。每个连接都有缓存队列,内核从服务器接受到数据,放到发送的缓存队列里。

关键点客户端最多可以同服务器建立66535个scoket,内核可以开辟65535个IO资源。
image.png

端口号

语义由通信协议分配,用于找到接受IO数据的进程。