网络编程的基础是计算机网络,计算机网络的每个层都可以展开讲很多,这里只是概括的讲述计算机网络体系的基本知识。
计算机网络
通信的链路(分为有线/无线链路)连接到一起的一组计算机/设备的集合,通信技术与计算机技术的产物。
以太网、因特网、互联网、万维网都是啥?
以太网 Ethernet
因特网 Internet
互联网internet
万维网(World Wide Web)
互联网、因特网、万维网三者的关系是:互联网 包含 因特网 包含 万维网。
根据网络规模分为:
网络体系结构
划分结构的目的:为网络硬件、软件、协议提供标准。eg: OSI (open system internection)
协议:
关于协议,就像英语,法语,日语的人互相无法交流一样,不同的公司制定不同的协议,显然是无法进行高效沟通的,为解决这个问题,ISO(International Organization for Standards) 国际标准化组织,制定了OSI国际化标准,对通信系统及逆行了标准化。OSI虽然现在没有普及,但是为其他网络协议的制定提供了指导。
分层
计算机网络的复杂使其有了分层-----‘分而治之’,不同层之间的通讯需要接口。
接口分为两种:
OSI七层:
初期不同厂商有不同的网络体系结构。1979年 国际化组织ISO 创立七层协议标准。
分层并不是真的有这么几层,只是概念上的标准框架。
下图简述各层的功能及相对应的协议。
细细展开每一层都可以讲很多,不再细数。
比较重要的有:
简单提一嘴 IP协议
位于网络层,由于其重要地位,又把网络层叫IP层,提供网络传送的最基本任务。同时也是实现网络互联的基本协议,除了ARP, RARP报文外,几乎所有数据都要经过IP传输。
IP主要特点如下:
IP数据报的分片与重组:
IP数据报从信源到信宿的传输过程中,往往要穿过多个不同的物理网络,即每个IP数据报都通过底层物理网络进行传输,那么问题来了,不同的物理网络存在差异,对传输帧的最大长度有不同规定。每种物理网络有其自身最大传输单元MTU(Maximum Transfer Unit),所以TCP/IP 引入了IP数据报动态分片技术。
应用层(源原数据) ---->传输层(TCP报文) ----> 网络层(IP数据报)----> 数据链路层(封装成MAC帧) ---->物理层(‘0101’比特流)
怎么个分片,就是下图这个意思:
注意:分片可以发生在信源到信宿的任何一台路由器上进行,且数据包在传输过程中只进行分片,不进行重组。
分片重组:
只发生在信宿,过程如下:
补充:路由器转送时只涉及下三层(网络层,链路层,物理层)
一些常见计算机网络名词(干货):
IP地址:
同一物理网络中不同机器之间可通过硬件地址,如网卡的MAC地址定位对方从而进行通信。
IP地址:统一因特网中所有物理设备的编址,即:是对连接在互联网中设备进行唯一标识的设备码。
IPV4:IP地址32位2进制组成。(与电脑64位,32位不一回事,IP可不会因为你是64位CPU而变,别搞混咯)
32位分四段,每段8位,然后每8位转换为10进制。
eg: 192.168.1.4
为了便于管理 IP地址分为网络地址和主机地址。
同一个物理网络上所有主机网络地址相同。
A类IP地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,
地址范围1.0.0.1-126.255.255.254
二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
可用的A类网络有126个,每个网络能容纳1677214个主机
B类IP地址
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,
地址范围128.1.0.1-191.255.255.254
二进制表示为:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
可用的B类网络有16384个,每个网络能容纳65534主机
C类IP地址
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”
范围192.0.1.1-223.255.255.254
二进制表示为: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
C类网络可达2097152个,每个网络能容纳254个主机
D类地址用于多点广播
D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。
它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中
多点广播地址用来一次寻址一组计算机 s 地址范围224.0.0.1-239.255.255.254
E类IP地址
以“1111”开始,为将来使用保留
E类地址保留,仅作实验和开发用
私有ip
在这么多网络IP中,国际规定有一部分IP地址是用于我们的局域网使用,也就
是属于私网IP,不在公网中使用的,它们的范围是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
IP地址127.0.0.1~127.255.255.255用于回路测试,
如:127.0.0.1可以代表本机IP地址,用http://127.0.0.1
就可以测试本机中配置的Web服务器。
子网和子网地址
IPv4的IP地址方案中,最初次啊用了网络地址和主机地址两级结构,然而在实际组网过程中,常常出现C类地址主机编址空间不够用,而用B,A类地址又造成IP地址浪费。为此,人们在两级地址的基础上提出了三级地址。
引入子网后,原来两级地址中的主机地址分为子网地址和主机地址。子网地址所占地址位数要根据子网实际的规模来定。
若子网内主机数量较多,则子网地址位数相对较少,主机地址位数多。反之,则子网多主机少。
子网掩码
是一个32位的地址掩码,对应于网络地址和子网地址的地址掩码位设置为‘1’, 对应于主机地址的地址掩码位设置为‘0’,这样,获得的子网地址的方法是将子网掩码和IP地址进行按位与运算。(上图可见)
子网划分:
子网的划分通过子网掩码来确定,子网掩码又取决于子网的规模和主机数量,子网的划分过程也就是子网掩码的确定过程,同城步骤如下:
超网:
A、B类网络地址初期的大量分配,造成其资源的紧张,一些中型网络的需求又超过一个C类地址,因此考虑把几个C类地址段合并成一个大型网络的方法就是超网。
与子网相反,超网是借用一部分网络地址位作为主机位,从而达到减小因特网路由表的目的。
IPv6 (了解):
下一代因特网协议,用来代替现行的IPv4的一种新的网际协议。
特点:将现有IPv4地址长度扩大了4倍,32位---->128位,支持大量的网络节点。
移动IP: (移动设备,爪机,pad ...)
一种计算机网络通信协议,顾名思义,能保证计算机移动过程中,在不改变现有IP地址,不中断正在执行的网络应用的情况下对现有网络不断访问。待续。。。
DNS 域名解析,顾名思义,不再赘述。
ARP 地址解析,IP ----> MAC
IP地址是逻辑地址,数据最终还是在物理设备上传输的,使用的还是物理地址(MAC),因此因特网在网络层是用IP地址的同时,在物理网络中依然使用物理地址,即网络中存在两套地址。如此,两套地址之间就必须建立映射关系。否则无法工作,就像你的昵称和真实名字一样,没有身份认证,怎么找到你,给你送温暖啊?
地址映射的两种方式:
RARP 逆地址解析,物理地址 ----> IP地址
网络上有些主机自己的IP都不知道,RARP就是做这个的。
为了避免本文更加臭长,ARP 与 RARP 具体实现就不展开说了。
通过IP可以定位通信对方,而端口可以定位具体的某个进程(程序)。
通俗理解比如叫外卖,IP就是你的宿舍楼号,而端口是你的门牌号。
如果一个程序需要收发网络数据,那么就需要有这样的端口
在linux系统中,端口可以有65536(2的16次方)个之多!
既然有这么多,操作系统为了统一管理,所以进行了编号,这就是端口号
知名端口(Well Known Ports)
知名端口是众所周知的端口号,范围从0到1023
80端口分配给HTTP服务
21端口分配给FTP服务
可以理解为,一些常用的功能使用的号码是估计的,好比 电话号码110、10086、10010一样。
一般情况下,如果一个程序需要使用知名端口的需要有root权限。
动态端口(Dynamic Ports)
动态端口的范围是从1024到65535
之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。
动态分配是指当一个系统程序或应用程序程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。
当这个程序关闭时,同时也就释放了所占用的端口号。
怎样查看端口 ?
关于socket 及更多 ,请看 Python网络编程
更多python相关:https://blog.csdn.net/Scrat_Kong/article/details/90257118