网络编程基础-------计算机网络快速一览

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Scrat_Kong/article/details/99441988

网络编程的基础是计算机网络,计算机网络的每个层都可以展开讲很多,这里只是概括的讲述计算机网络体系的基本知识。

基本概念

计算机网络

        通信的链路(分为有线/无线链路)连接到一起的一组计算机/设备的集合,通信技术与计算机技术的产物。

以太网、因特网、互联网、万维网都是啥?

以太网 Ethernet

  • 最早是有XEROX公司在20世纪70年代提出的一个基带局域网标准 传输速率是10Mbit/S.选用介质为同轴电缆.采用CSMA/CD作为MAC层控制协议。

因特网 Internet

  • 世界上最大的信息网, 用户可以实现全球范围内的电子邮件.WWW.信 息查询 电子邮件 文件传输.网络娱乐.语音与图象通信服务等功能.因特网前身是美国国防部高级研究计划署(ARPA)的军用实验网络, 名字为ARPANET,起初只有4台主机.分别位于美国国防部.原子能委员会.加州理工大学和麻省理工大学 经过几十年发展就达到今天的规模。

互联网internet

  • 概念就广了,局域网什么的都可以是互联网,应该说2台以及2台以上电脑组成的网络都称为互联网。

万维网(World Wide Web)

  • 只要应用层使用的是HTTP协议,就称为万维网(World Wide Web)。之所以在浏览器里输入http://www.aorb.org时,能看见矛盾网提供的网页,就是因为您的个人浏览器和矛盾网的服务器之间使用的是HTTP协议在交流。

互联网、因特网、万维网三者的关系是:互联网 包含 因特网 包含 万维网。

根据网络规模分为:

  • 局域网(LAN):local area network
  • 城域网  (MAN) :metropolitan area network
  • 广域网  (WAN):  wide area network

网络体系结构

划分结构的目的:为网络硬件、软件、协议提供标准。eg: OSI (open system internection)

协议

  • 计算机网络中,为进行网络数据交换而创建的规则,(涵盖:语法、语义、同步(事件实现匹配及顺序))
  • 为了使两个不同实体能够正确的进行通信,通常需要一系列相互协调的工作协议,如:TCP/IP协议族。

关于协议,就像英语,法语,日语的人互相无法交流一样,不同的公司制定不同的协议,显然是无法进行高效沟通的,为解决这个问题,ISO(International Organization for Standards) 国际标准化组织,制定了OSI国际化标准,对通信系统及逆行了标准化。OSI虽然现在没有普及,但是为其他网络协议的制定提供了指导。

 

 

分层

计算机网络的复杂使其有了分层-----‘分而治之’,不同层之间的通讯需要接口。

接口分为两种:

  1. 服务:同意计算机不同层之间的。垂直的接口
  2. 协议:与另一台计算机定义的对交接口。

OSI七层:

初期不同厂商有不同的网络体系结构。1979年 国际化组织ISO 创立七层协议标准。

OSI七层协议(图片来源于百度百科,侵删)

分层并不是真的有这么几层,只是概念上的标准框架。

下图简述各层的功能及相对应的协议。

图片来源于网络,侵删

细细展开每一层都可以讲很多,不再细数。

比较重要的有:

  • 应用层:HTTP DNS FTP SNMP
  • 传输层:TCP UDP
  • 网络层:IP ICMP
  • 数据链路层:ARP RARP
  • 物理层:了解

简单提一嘴 IP协议

IP协议 :

位于网络层,由于其重要地位,又把网络层叫IP层,提供网络传送的最基本任务。同时也是实现网络互联的基本协议,除了ARP, RARP报文外,几乎所有数据都要经过IP传输。

IP主要特点如下:

  1. 点对点协议,虽然IP数据报携带源IP地址和目的IP地址,但进行数据传输的对等实体一定是同一物理网络的对等实体。
  2. 不保证可靠性,不对数据进行差错校验和跟踪,当数据报发生损坏时不向发送方通告,如果要求数据传输具有可靠性,则要在IP层上加其他协议加以保证。
  3. 无连接数据报服务,各个数据报独立传输,可能沿着不同路径到达目的地,也可能不会按序到达目的地。

IP数据报的分片与重组:

IP数据报从信源到信宿的传输过程中,往往要穿过多个不同的物理网络,即每个IP数据报都通过底层物理网络进行传输,那么问题来了,不同的物理网络存在差异,对传输帧的最大长度有不同规定。每种物理网络有其自身最大传输单元MTU(Maximum Transfer Unit),所以TCP/IP 引入了IP数据报动态分片技术。

应用层(源原数据) ---->传输层(TCP报文) ----> 网络层(IP数据报)----> 数据链路层(封装成MAC帧) ---->物理层(‘0101’比特流)

怎么个分片,就是下图这个意思:

注意:分片可以发生在信源到信宿的任何一台路由器上进行,且数据包在传输过程中只进行分片,不进行重组。

分片重组:

只发生在信宿,过程如下:

  1. 开始重组时会引入重组定时器来规定重组时间,首先启动重组定时器。
  2. 将相同标识,协议号,信源地址、目的地址的各分片根据分片首部中的相关字段(标志、片偏移和总长度)信息,将他们重新组成完整的原始数据报。
  3. 最后将重组的IP数据报按照上层协议标识字段中的协议号提交给上层相应的协议模块。
  4. 如果重组定时器超时且未完成重组操作,信宿将丢弃该数据报,产生超时错误返回给信源。

补充:路由器转送时只涉及下三层(网络层,链路层,物理层)

一些常见计算机网络名词(干货):

  • MAC地址:在设备与设备之间数据通信时用来标记收发双方(网卡的序列号)
  • IP地址:在逻辑上标记一台电脑,用来指引数据包的收发方向(相当于电脑的序列号)
  • 网络掩码:用来区分ip地址的网络号和主机号
  • 网关:负责网络层以上数据的中继,实现不同体系结构的网络协议转换。
  • 默认网关:网络层概念,PC本身不具备寻址功能,当需要发送的数据包的目的ip不在本网段内时,就会发送给默认的一台电脑,称为网关,可在路由上,交换机上,防火墙上,服务器上。
  • 集线器:物理层,已过时,用来连接多态电脑,缺点:每次收发数据都进行广播,网络会变的拥堵
  • 网桥:链路层,解决集线器多借口冲突域问题。
  • 交换机:链路层,多接口网桥,有学习功能知道需要发送给哪台设备,根据需要进行单播、广播
  • 路由器:网络层,隔离冲突,隔离广播,连接多个不同的网段,让他们之间可以进行收发数据,每次收到数据后,ip不变,但是MAC地址会变化。
  • 网段:使用同一个物理层设备通讯的一组设备。192.168.0.1----192.168.255.255
  • DNS:用来解析出IP(类似电话簿)
  • http服务器:提供浏览器能够访问到的数据

 

IP地址及相关

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地址进行按位与运算。(上图可见)

子网划分:

子网的划分通过子网掩码来确定,子网掩码又取决于子网的规模和主机数量,子网的划分过程也就是子网掩码的确定过程,同城步骤如下:

  1. 根据需要确认子网的个数。
  2. 根据需要确认每个子网的主机数量。
  3. 根据子网数量和主机数量,确定子网掩码。
  4. 确定每个子网的网络地址。
  5. 确定每个子网上可以使用的主机地址范围。

超网:

A、B类网络地址初期的大量分配,造成其资源的紧张,一些中型网络的需求又超过一个C类地址,因此考虑把几个C类地址段合并成一个大型网络的方法就是超网。

与子网相反,超网是借用一部分网络地址位作为主机位,从而达到减小因特网路由表的目的。

IPv6 (了解):

下一代因特网协议,用来代替现行的IPv4的一种新的网际协议。

特点:将现有IPv4地址长度扩大了4倍,32位---->128位,支持大量的网络节点。

移动IP: (移动设备,爪机,pad ...)

一种计算机网络通信协议,顾名思义,能保证计算机移动过程中,在不改变现有IP地址,不中断正在执行的网络应用的情况下对现有网络不断访问。待续。。。

关于地址转换

DNS 域名解析,顾名思义,不再赘述。

  • www.baidu.com --> 180.101.49.11

ARP 地址解析,IP ----> MAC

IP地址是逻辑地址,数据最终还是在物理设备上传输的,使用的还是物理地址(MAC),因此因特网在网络层是用IP地址的同时,在物理网络中依然使用物理地址,即网络中存在两套地址。如此,两套地址之间就必须建立映射关系。否则无法工作,就像你的昵称和真实名字一样,没有身份认证,怎么找到你,给你送温暖啊?

地址映射的两种方式:

  • 静态映射:主要采用地址映射表实现IP 与 物理地址的映射。该映射表一般以人工方式建立维护。(人工哎,不行)
  • 动态映射:在需要获取映射关系时利用网络通信协议直接从其他主机获得IP和物理地址的映射关系。(采用)TCP/IP协议簇中通过ARP/RARP两个协议来实现地址映射。

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

之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。

动态分配是指当一个系统程序或应用程序程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。

当这个程序关闭时,同时也就释放了所占用的端口号。

怎样查看端口 ?

  • 用“netstat -an”查看端口状态
  • lsof -i [tcp/udp]:2425

关于socket 及更多 ,请看 Python网络编程

更多python相关:https://blog.csdn.net/Scrat_Kong/article/details/90257118

猜你喜欢

转载自blog.csdn.net/Scrat_Kong/article/details/99441988
今日推荐