02 | 网络编程模型:认识客户端-服务器网络模型的基本概念
02 | 网络编程模型:认识客户端-服务器网络模型的基本概念
讲述:冯永吉
时长11:43大小10.74M
客户端 - 服务器网络编程模型
IP 和端口
保留网段
子网掩码
全球域名系统
数据报和字节流
总结
思考题
赞 33
提建议
精选留言(68)
- a、置顶2019-08-051.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 条评论153 - 剑衣清风置顶2019-08-05172.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 - 莫珣置顶2019-08-05172.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来表示的,理论上服务端选择端口只要在这个短整型的表示范围内即可。知名服务端软件的默认端口本身是一种建议而非规范,但是因为它们太有名了,慢慢的就变成了一种约定俗成的东西。如果你在部署的时候给改变了这个默认端口,那么你就需要告诉客户端你部署时使用的端口是什么。 如果是你自己开发的服务端,那么端口号尽可能的不要与这些知名软件的端口冲突。当然你是不可能记住每一个软件的端口,所以你必须在你的文档中说明你所选择的默认端口是什么。并且你还需要将监听端口设计为可配置的,以便在端口冲突时为你的客户提供一个简单易行的解决方案。展开
作者回复: 总结的很棒
23 - Skrpy置顶2019-08-05“网络地址位数由子网掩码(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 条评论6 - Eglinux2019-08-05”Stream sockets 是可靠的,双向连接的通讯串流。⽐如以“1-2-3”的顺序将字节流输出到套接字 上,它们在另⼀端⼀定会以“1-2-3”的顺序抵达,⽽且不会出错。“ 这里还是要分层的吧,在应用层可以说是顺序到达的,那是因为传输层干了活,但是传输层收到包就不一定是顺序到达的了。
作者回复: 是这样的,因为TCP就是传输层协议,就是它帮我们做到顺序的
7 - 摸鱼哥2019-08-08无论是原先子网划分还是 CIDR 表示法都应该有 2 个保留地址,全是 0 的网关地址和全是 1 的广播地址,那个 4 个 host 是不是应该只有 2 个
作者回复: 按照道理说,是这样的
共 2 条评论5 - 啦啦的小猪2019-08-05讲的很好啊,期待下来的课程
作者回复: 谢谢,会慢慢进入高潮部分的
4 - 钱2019-11-19老师,IP是自包含区域信息的嘛?比如:中国有台电脑,美国有台电脑,他们都接入互联网有自己唯一的IP,当他们需要通信的时候,寻找彼此,是直接就知道寻找的方向了吧!而不是全世界都找一遍,这个是不是就是路由信息?另外,每个路由器的路由信息是都包括世界上所有的嘛?TCP的长链接是怎么维护的,还是刚才的例子中国的一台机器和美国的一台机器,他们中间隔了许多的网络设备和很远的距离,他们第一次通信和第二次通信,走的路很难想象是一样,距离太远变数太大了,不过我也很难想象他们之间的长链接是怎么维护的,好像有了一条专用通信线路,实际不可能,它怎么实现的?展开
作者回复: 这些是计算机网络的基础知识,简单的说,这个是通过路由器、交换机,以及IP地址和DNS等一系列网络配套设备和协议一起完成的。建议你找一本计算机网络的书看一下。所谓长链接,并不是一条真正的物理链接,只是从软件实现角度来说,维护了这条通信的一条"逻辑"链路。
共 3 条评论3 - 桓2019-08-29我觉得老师对保留网段和子网掩码那部分讲得太晦涩了。本来看之前我还有点懂,看完之后反而不太懂了。这部分缺乏一个比较通俗的例子来说明,而且只字未提网关。平时配置局域网的时候ip,肯定会遇到网关。我看到评论里也有人说这部分看不明白。
作者回复: 网关是一个转发设备,跟我这里的网段和子网掩码其实关系不大,不过实际是把类似192.168.1.1和10.10.101.1这样的ip当做网关使用的。 也许我应该把网关内容加进去的,嗯。
共 3 条评论4 - 小伟2019-08-14172.16.0.0/12 B类 因为是B类,所以默认前16位是网络号,但这里/12,所以实际上前12位是网络号,后面的都是主机号,16比12多4位,4位换算成10进制最大是16,故该地址表示了16个B段。 192.168.0.0/16 同理,C类地址默认前24位都是主机号,/16表示前16位是网络号,24-16=8,故有8位本应表示网络号的,现在用来表示主机号,故有256个C段。 客户端和服务端的端口先靠约定,如1521就是Oracle的服务端默认监听端口,也是Oracle客户端默认请求端口,当然也可以改成1522,那需要两端一起改,不然不工作。 没有约定的端口需要显示指定,可以通过配置文件等来实现。展开3
- 王亮平2019-08-0816位整数的ip端口最多为什么不是65535而是65536呢?
作者回复: 整数的编码,0x0001到0xffff,因为端口0是不能用的
共 4 条评论3 - 郑祖煌2020-06-12172.16.0.0/12 描述为 16 个连续的 B 段说明 前12位是固定网段,如果是B段的话,则B的host有两个字节,则说明16+12=28 公共网络端+Host号已经占用了28位,然后32-28=4,2的4次方就代表有16个连续的B网络可以用了 172.16.0.0~172.31.255.255 。 192.168.0.0/16 描述为 256 个连续的 C 段地址, C段地址 是有1个字节的Host号 16+8=24 则还剩下2的8次方=256.共 1 条评论2
- Eleven2019-11-13根据开发经验来看,如果是外部访问端口,一般都是固定的,例如https为443,http为80,如果内部服务间的通讯端口,就是大家事先约定好的,是多少无所谓了,一般是10000以上,防止占用常见端口。2
- 码农Kevin亮2019-09-01请教一下老师,以C类保留网段为例,同一子网下的两主机通信,与不同子网下的两主机通信,它们有何差异之处呢
作者回复: 一个需要通过核心路由,一个不需要通过,同一个子网下的通信效率要高很多
2 - 码农Kevin亮2019-09-01请教老师,能否补充一下在什么情况下会用到A类与B类的保留网段?因为平常常见的都只有C类保留网段
作者回复: 大型组织内部进行网络划分的时候,很有可能是通过A类或者B类网段来进行规划的。像现在在云上进行VPC划分时,也都会使用A或B类网段来进行内部VPC网段的规划。
2 - null2021-03-12原文:其实它们二者的区别也很简单:TCP 中连接是谁发起的,在 UDP 中报文是谁发送的。 问题:没太理解冒号之后的这句话。 -------------------------------- 原文:类似这样:192.0.2.12/30, 这样就很容易知道有 30 个 1, 2 个 0,所以主机个数为 4。 问题:从 192.0.2.0/24,可以反推出这 256 台机器的 IP 地址是:192.0.2.[0~255]。 同理可得,从 192.0.2.12/30 反推出这 4 台机器的 IP 地址是:192.0.2.[12~15]。 可得结论:「IP_ADDR/十进制」这种格式的子网掩码,其首个 IP 地址「必然」是 IP_ADDR,是么? 推断过程: 从 192.0.2.12/30 可得: IP 地址 192.0.2.12 转为二进制:11111111 11111111 11111111 00001100 子网掩码:11111111 11111111 11111111 111111_xx 拿 IP 地址与子网掩网做与运算,子网掩网高 30 位均为 1,为了方便观看,我们只取低 8 位: 00001100 & 111111_00 => 192.0.2.12 00001100 & 111111_01 => 192.0.2.13 00001100 & 111111_10 => 192.0.2.14 00001100 & 111111_11 => 192.0.2.15 请问老师,我的结论和推断过程,是否正确。谢谢老师!!展开
作者回复: 第一个问题是说怎么区分客户端,TCP中连接发起方就是客户端;UDP中发送报文的一端就是客户端。 第二个推断我认为是正确的。
1 - 我也曾是少年2019-10-13老师,请教个问题,多线程对同一个socket进行并发写,在高并发的情况下会出现什么问题呢?
作者回复: 这个问题的前提是你怎么知道现在这个socket可以被写入,这就需要通过事件分发知道socket的事件,如果可写了,我就往这个socket里写。如果感知socket这个事情在多个线程来做,就会引起事件的"脑裂",因为你不知道什么时候这个事件是真正有效的,有可能一个线程感知时,另外一个线程已经把这个事件给处理掉了。 所以,单独说多个线程往一个socket里并发写,并不是推荐的方式。如果把一个大文件分成很多小文件,通过多个连接(套接字)来做,这是另外一个话题了。
共 2 条评论1 - Suiyek2019-08-16准确来讲 端口号是一个 16 位的无符号整数,最多为 655351
- Hello_dzm2019-08-14当一个客户端发起连接请求时,客户端的端口是由操作系统内核临时分配; 这个操作系统是客户端的吧
作者回复: 是的
1 - 影子2019-08-08我想问下老师,你写完后有人来校对么?还是请老师仔细检查一下呗
作者回复: 欢迎指正
1