UNIX网络编程_第2章_TCP端口号与并发服务器

首先,在主机上启动服务器,该主机是多宿的,其IP地址为12.106.32.254和192.168.42.1。服务器在它的众所周知的端口(本例为21)上执行被动打开,从而等待客户请求。

我们使用记号{*:21, :}指出服务器的套接字对。服务器在任意本地接口的端口21上等待连接请求。外地IP与端口都不指定,称之为监听套接字。通配地址通过在调用bind之前把套接字地址结构中的IP地址字段设置成INADDR_ANY来指定。

稍后在IP地址为206.168.112.219的主机上启动第一个客户,它对服务器的IP地址之一的12.106.32.254执行主动打开。假设客户主机为此选择的临时端口为1500。

当服务器接收并接受时,它fork一个自身的副本,让子进程来处理该客户的请求。

至此我们必须要在服务器主机上区别监听套接字和已连接套接字。注意已连接套接字使用与监听套接字相同的本地端口21。还要注意在多宿服务器主机上,连接一旦建立,已连接套接字的本地地址(12.106.32.254)随即填入。

下一步,我们假设在客户主机上另有一客户请求连接到此服务器。客户主机的TCP为这个新客户的套接字分配一个未使用的临时端口如1501,服务器的这俩连接是有区别的:第一个连接的套接字对和第二个连接的套接字对不一样,因为客户的TCP给第二个连接选择了一个1501。

此处应当注意,TCP无法仅仅通过查看目的端口号来分离外来的分节到不同的端点。它必须查看套接字对的所有4个元素才能确定。上图中对于同一个本地端口21存在3个套接字。如果一个分节来自206.168.112.219端口1500,目的地为12.106.32.254端口21,它就被递送给第一个子进程。如果一个分节来自 206.168.112.219端口1501,目的地为12.106.32.254端口21,它就被递送给第二个子进程。所有目的地端口为21的其他TCP分节都被递送给拥有监听套接字的最初的那个服务器(父进程)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、TCP状态linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lso...
    北辰青阅读 9,696评论 0 11
  • 最近在看《UNIX网络编程 卷1》和《FREEBSD操作系统设计与实现》这两本书,我重点关注了TCP协议相关的内容...
    腩啵兔子阅读 1,277评论 0 7
  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,516评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,455评论 19 139
  • 世俗的风吹痛我的眼,命运的顽石却安然不动 我不甘,却不敢疾呼。 一队队大雁飞过荒漠,越过海洋, 向着既定的方向前行...
    竹心一脉香阅读 445评论 0 3

友情链接更多精彩内容