网络编程实战
盛延敏
前大众点评云平台首席架构师
43618 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
网络编程实战
15
15
1.0x
00:00/00:00
登录|注册

02 | 网络编程模型:认识客户端-服务器网络模型的基本概念

你好,我是盛延敏。上一讲我们学习了 TCP/IP 的创建和历史,以及 Linux 操作系统的建立和发展,相信你对网络编程这棵大树已经有了一个宏观上的认识,那么今天我们再往前走几步,近距离看看这棵大树的细枝末节到底是怎样的。
从哪里开始呢?从网络编程的基本概念开始说起吧。

客户端 - 服务器网络编程模型

在谈论网络编程时,我们首先需要建立一个概念,也就是我们今天的主题“客户端 - 服务器”。
拿我们常用的网络购物来说,我们在手机上的每次操作,都是作为客户端向服务器发送请求,并收到响应的例子。
这个过程具体阐释如下:
当一个客户端需要服务时,比如网络购物下单,它会向服务器端发送一个请求。注意,这个请求是按照双方约定的格式来发送的,以便保证服务器端是可以理解的;
服务器端收到这个请求后,会根据双方约定的格式解释它,并且以合适的方式进行操作,比如调用数据库操作来创建一个购物单;
服务器端完成处理请求之后,会给客户端发送一个响应,比如向客户端发送购物单的实际付款额,然后等待客户端的下一步操作;
客户端收到响应并进行处理,比如在手机终端上显示该购物单的实际付款额,并且让用户选择付款方式。
在网络编程中,具体到客户端 - 服务器模型时,我们经常会考虑是使用 TCP 还是 UDP,其实它们二者的区别也很简单:TCP 中连接是谁发起的,在 UDP 中报文是谁发送的。在 TCP 通信中,建立连接是一个非常重要的环节。区别出客户端和服务器,本质上是因为二者编程模型是不同的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络编程实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(70)

  • 最新
  • 精选
  • Skrpy
    置顶
    “网络地址位数由子网掩码(Netmask)决定,你可以将 IP 地址与子网掩码进行“位与”操作,就能得到网络的值。” 老师这句话体现了子网掩码有什么用 “128 ~ 191.某.某.某” 属于 B 类网络;“192 ~ 223.某.某.某” 属于 C 类网络。(这里老师可以把 A、B、C 类网的网段区间说明一下) (一)172.16.0.0/12: 172.16.0.0 和 1111 1111.1111 0000.0.0(12个连续的 1 的子网掩码,也称 CIDR 地址掩码) 进行“与”操作后,得到网络地址的值:172.0.0.0;B 类网络中,网络号从左到右占 16 位,即 172.16(172.0000 1111)为网络号,故从 172.0000 1111 ~ 172.1111 1111 共有16个连续的 B 段网。 (二)192.168.0.0/16: 192.168.0.0 和 1111 1111.1111 1111.0.0(16个连续的 1 的子网掩码)进行“与”操作后,得到网络地址的值:192.168.0.0;C 类网络中,网络号从左到右占 24 位,即 192.168.0(192.168.0000 0000)为网络号,故从 192.168.0000 0000 ~ 192.168.1111 1111 共有 256 个连续的 C 段网。

    作者回复: 非常棒的建议和总结。子网掩码定义了一个网络段共同的部分,这个是我的理解

    3
    7
  • 莫珣
    置顶
    172.16.0.0/12,首先172表明这是这个B类网络,12表示子网掩码从左往右有12个1,可以得出网络地址是172.16,但B类网络的网络地址一共有16位,所有还有4位是可以0和1任意组合的,所以总得意思就是说在172.16这个网络地址下面你还可以划分出15个局域网,那么加上172.16自己,刚好就是16个连续的B段网络。192.168.0.0/16的理解过程和172.16.0.0/12是一样的。 端口选择,服务端端口是用一个unsigned short来表示的,理论上服务端选择端口只要在这个短整型的表示范围内即可。知名服务端软件的默认端口本身是一种建议而非规范,但是因为它们太有名了,慢慢的就变成了一种约定俗成的东西。如果你在部署的时候给改变了这个默认端口,那么你就需要告诉客户端你部署时使用的端口是什么。 如果是你自己开发的服务端,那么端口号尽可能的不要与这些知名软件的端口冲突。当然你是不可能记住每一个软件的端口,所以你必须在你的文档中说明你所选择的默认端口是什么。并且你还需要将监听端口设计为可配置的,以便在端口冲突时为你的客户提供一个简单易行的解决方案。

    作者回复: 总结的很棒

    25
  • 剑衣清风
    置顶
    172.16.0.0/12 中得出信息,172.16.0.0 为 B 类网,12 为网络号,默认 B 类网的网络号是 2*8=16 位,而此处为 12 位,那么便有 2^(16-12) = 16 个连续子网 相应的 192.168.0.0/16 ,192.168.0.0 为 C 类网,16 为网络号,默认 C 类网的网络号是 3*8=24 位,而此处为 16 位,那么便有 2^(24-16) = 256 个连续的子网 大家可以看看 趣谈网络协议,里面有介绍,另外 https://blog.csdn.net/molaifeng/article/details/88109717 为我结合所学及网络参考所成的博文,可以参考下

    作者回复: 总结的不错,这个部分还是蛮重要的

    3
    36
  • a、
    置顶
    1.172.16.0.0~172.31.255.255,因为b类网络的host只占最后两个字节,172.16~172.31就代表了16个连续的b类网络可用 2.192.168.0.0~192.168.255.255,因为c类网络的host只占最后一个字节,所以从192.168.0到192.168.255,就有256个连续的c类网络可用 3.服务器可以监听的端口有从0到65535,理论上这台服务器的这个端口只要没被占用,你都可以给服务器绑定。 4.如果是一些默认的服务,服务器绑的也是默认的端口,那么客户端是可以知道的。比如:80是给http服务,443是给https服务,21是给ftp服务等。否则的话,就需要服务器开发者告诉客户端应该连接哪个端口

    作者回复: 给你点赞

    4
    155
  • Eglinux
    ”Stream sockets 是可靠的,双向连接的通讯串流。⽐如以“1-2-3”的顺序将字节流输出到套接字 上,它们在另⼀端⼀定会以“1-2-3”的顺序抵达,⽽且不会出错。“ 这里还是要分层的吧,在应用层可以说是顺序到达的,那是因为传输层干了活,但是传输层收到包就不一定是顺序到达的了。

    作者回复: 是这样的,因为TCP就是传输层协议,就是它帮我们做到顺序的

    7
  • 摸鱼哥
    无论是原先子网划分还是 CIDR 表示法都应该有 2 个保留地址,全是 0 的网关地址和全是 1 的广播地址,那个 4 个 host 是不是应该只有 2 个

    作者回复: 按照道理说,是这样的

    2
    5
  • 我觉得老师对保留网段和子网掩码那部分讲得太晦涩了。本来看之前我还有点懂,看完之后反而不太懂了。这部分缺乏一个比较通俗的例子来说明,而且只字未提网关。平时配置局域网的时候ip,肯定会遇到网关。我看到评论里也有人说这部分看不明白。

    作者回复: 网关是一个转发设备,跟我这里的网段和子网掩码其实关系不大,不过实际是把类似192.168.1.1和10.10.101.1这样的ip当做网关使用的。 也许我应该把网关内容加进去的,嗯。

    3
    4
  • 啦啦的小猪
    讲的很好啊,期待下来的课程

    作者回复: 谢谢,会慢慢进入高潮部分的

    4
  • 老师,IP是自包含区域信息的嘛?比如:中国有台电脑,美国有台电脑,他们都接入互联网有自己唯一的IP,当他们需要通信的时候,寻找彼此,是直接就知道寻找的方向了吧!而不是全世界都找一遍,这个是不是就是路由信息?另外,每个路由器的路由信息是都包括世界上所有的嘛?TCP的长链接是怎么维护的,还是刚才的例子中国的一台机器和美国的一台机器,他们中间隔了许多的网络设备和很远的距离,他们第一次通信和第二次通信,走的路很难想象是一样,距离太远变数太大了,不过我也很难想象他们之间的长链接是怎么维护的,好像有了一条专用通信线路,实际不可能,它怎么实现的?

    作者回复: 这些是计算机网络的基础知识,简单的说,这个是通过路由器、交换机,以及IP地址和DNS等一系列网络配套设备和协议一起完成的。建议你找一本计算机网络的书看一下。所谓长链接,并不是一条真正的物理链接,只是从软件实现角度来说,维护了这条通信的一条"逻辑"链路。

    3
    3
  • 王亮平
    16位整数的ip端口最多为什么不是65535而是65536呢?

    作者回复: 整数的编码,0x0001到0xffff,因为端口0是不能用的

    4
    3
收起评论
显示
设置
留言
70
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部