408四大块之所以非常重要,很大一部分原因在于编程到实现以及传输的过程中,涉及很多原理性的东西。作为科班出身的学生,在学习过程中可能把科目单独学习了,没有串起来联合理解。恰逢春招,金三银四正式学习查缺好时光。这部分讲的是Python开发中的一些学习笔记,关于网络编程的基本概念。
博文关键词:IP地址、端口、socket
这篇博文主要包含课程红线部分。
目录
1.网络传输
首先是理解网络传输,网络的必要性可以结合线下单机的小霸王游戏啊,一些单主机的场景需求来理解。
为什么需要网络呢? 通信,交换数据,或者可以想象假如没有网络的情况。
老师用了一张图片说明,我们的编程,需要相互传递数据,不仅仅在局域网内,还要考虑到不同地域的特点。
可以从图片中看到,通过IP地址,来找寻访问目标主机(不管在不在同一片局域网下)。
所以,IP地址应运而生,用来标记电脑,可以说本地局域网中是唯一的,但在万维网上,会不会一样呢?如果出现这种情况,就会引起我们日常所说的“IP冲突”。
2.IP地址
为了避免冲突,最优的方式就是先制定规则,所以对于IP地址的分配,可以学习一下。
IP地址分两部分:网络地址 + 主机地址 : X.X.X.X
图中C类,列举的“192.168.1.1~254”是我们常用的类型范围。这里标注一下,为什么没有0和255?这两个主机号是不能用的。
对于A类IP地址来说,最高位为“0”,网络地址(X-1字节-8位) + 主机地址(XXX-3字节-24位),可用126个,每个网络最多1677214主机
对于B类IP地址来说,最高位为“10”,网络地址(XX-2字节-16位)+主机地址(XX-2字节-16位),可用16384个,每网络最多65534主机
对于C类IP地址来说,最高位为“110”,网络地址(XXX-3字节-24位)+主机地址(X-1字节-8位),可用2097152个,每网最多254
D类来说,用于多点广播(Multicast),第一个字节“1110”,是保留地址,用来寻址一组计算机,范围是224.0.0.1~239.255.255.254
E类用的不多,就不说了。
还有私有IP,拿来自己用就好了:10/172/192.0/16/168.0.0 ~ 10/172/192.255/31/168.255.255。
用来回环测试的IP地址是:172.0.0.1~172.255.255.255。
这里引入一个小知识,IPV4和IPV6的问题,V后面跟的数字就是版本号,现在多用V4,等到V4用完就需要用V6。原因是IPV6将32位的地址增加到128位,并不是XXXX→到XXXXXX的区别,还有更多的特性不同,在安全或更优传输上为了改进优化IPV4的一些问题。
说回自身电脑,我们如何能看到当前所使用主机的IP地址呢?
Windows有多种方法,可视化的和命令行的,这里为做对比,只演示命令行的:
打开命令行,输入“ipconfig”后回车:
而Linux系统来说,打开shell命令行界面,输入“ifconfig”后回车,也可以看到。
3.端口和端口号
那么传输的层面讲完,我们传达的信息,是如何找到进入的方式呢?比如我们使用QQ进行交流,IP地址只是标记了网中电脑的位置,怎么通过QQ找到我们的消息窗口,又发送给目标呢?这就涉及到进程问题,我们电脑中有很多程序,运行中的程序及运行时所需要的资源就叫进程,可以通过任务管理器来看到电脑中当前运行了哪些程序:
那么主机接收到消息,该如何判断是送往哪个进程的呢?是通过什么方式得到,是否唯一?
答案是端口,端口用来标识我们进程占用的位置也好内存也罢,理解端口号和进程绑定,那么传输来的消息中,除了要有目标主机的IP地址外,还需要有端口号,对消息进行识别后找到对应的端口号,通过端口号传输给进程。也就完成了网络传输。
Linux系统中,端口号的范围:0 ~ 65535
知名端口:有 80 - HTTP服务 | 21 - FTP服务 | <1024
4.socket
理解上面部分我们可以知道了网络传输的收发机制,接下来熟悉一下socket,说到这个,前两天代码跑出错,提示“套接字错误”还上网检索了很久。结果发现是端口冲突的问题,这里可以再全面学习一遍,以后尽量少踩网络有关的坑。
使用套接字,那么按照工具的常用规律,先用先建,用完再关。
函数的参数 协议簇,UDP/TCP,具体用法如下:
熟悉然后直接使用就行。下篇老师会带着一起做个小练习,更能理解这部分的作用。
一句!刻意练习,每日精进~