- 一、网络基础
- 1. IP地址
- 2. 子网掩码
- 3. MAC地址
- 二、网络设备及相关技术
- 集线器
- 主机&路由器:ARP缓存表+ARP寻址
- 交换机
- 路由器:路由+NAPT
- 三、网路数据传输流程
- 1. 局域网传输流程
- 集线器
- 交换机
- 交换机+路由器
- 2. 广域网传输流程
- ※ 浏览器中输入url后,按回车后发生了什么?
这篇博客主要复习网络编程的理论基础,希望大家能够理解最基本的东西。
1. IP地址IP地址主要用于标识网络通信过程中不同主机的逻辑地址,以此来屏蔽物理地址的差异。32位二进制数,通常以‘点分十进制’的形式表示。目前,IP地址有两种形式:IPv4和IPv6;可惜的是,这两种形式是不兼容的。
IPv4的数量是2的32次方,大约43亿左右,如果每个主机都有一个IP地址,那么数量是远远不够的,后来推出IPv6(长度128位),IP升级意味着要耗费大量的人力物力财力,牵扯到相关设备的升级,所以IPv6还没有特别普及。
那么地址不够用怎么办呢
①最开始想到的办法就是动态分配IP,一个IP地址被多个主机共享,这种方式显然不行的。
②NAT是一个神奇的技术,几乎使IPv4起死回生,NAT网络地址转换,直白说就是使用一个IP地址代表一批主机。这也是现在使用最多的方法。
③如果在资源充裕,财力支撑的情况下,还是升级到IPv6吧。
IP地址是以网络号和主机号来标示网络上的主机,我们把网络号相同的主机称之为本地网络,网络号不相同的主机称之为远程网络主机,本地网络中的主机可以直接进行通信;远程网络中的主机要相互通信必须通过**本地网关(Gateway)**来传递转发数据。
网络号:标识网段,区别两个不同的网段
主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号(唯一标识)
如何划分:五类~(原始分类)
各类地址表示范围:
分类 | 范围 |
---|---|
A类 | 0.0.0.0~127.255.255.255(大型网络) |
B类 | 128.0.0.0~191.255.255.255(中型网络) |
C类 | 192.0.0.0~223.255.255.255(小型网络) |
D类 | 224.0.0.0~239.255.255.255 |
E类 | 240.0.0.0~247.255.255.255 |
注:主机最大连接数减去2,是除主机号为全0和全1的特殊IP地址。
表示局域网的三类IP(剩下的都属于外网IP):
①10.*
②172.16.* - 172.31.*
③ 192.168.*
特殊的IP地址:
①将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
②127.* 的IP地址用于本机环回(loop back)测试,通常是127.0.0.1(自己);本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
③将IP地址中的主机号设为1,通常表示当前网段的网关(这个网络的出入口)。
上述的分类方法,造成IP地址浪费的现象,为了解决这种情况就引入了子网掩码。
子网掩码格式和IP地址格式一样,也是一个32位二进制数,必须结合IP地址一起使用,只用通过子网掩码才能区分一台主机所属子网与其他子网的关系,使网络正常工作。它可以将网络划分为多个子网,防止主机过多阻塞或者过少浪费IP地址。
经过子网划分,IP地址表示为:网络号+子网号+主机号,前两者统一为网络标识(划分子网后的网段),后面是主机标识。
子网掩码的表示方法有两种:
①点分十进制表示法
例如:子网掩码二进制11111111.11111111.11111111.00000000,表示为255.255.255.0
②CIDR斜线记法
IP地址/n
例如:172.16.198.12/20,其子网掩码表示为255.255.240.0,二进制表示为11111111.11111111.11110000.00000000
20表示共有20个1,所以n是这么来的。运营商ISP常用这样的方法给客户分配IP地址。
相关计算:
将IP地址与子网掩码按位与 *** 作,得到网络号;
将子网掩码二进制位取反,再与IP地址与计算,得到主机号。
为什么要使用子网掩码呢?
上面提到,子网掩码可以分离出IP地址的网络地址和主机地址,在网络通信的过程中,子网掩码结合IP地址可以计算获得网络号和主机号,用于判断源IP和目的IP是否在同一网段。
如果网络号相同,说明两台主机属于同一个网段,这样通过ARP广播可以发现对方的MAC地址,双方实现通信。
如果网络号不同,ARP广播会在本地网关终结,这时候会先把数据发送到本地网关,网关再根据目的主机IP在路由表中查找下一跳地址,再将数据包继续传递转发,最终到达目的地。
MAC地址:用于标识网络设备的硬件物理地址。网络通信,本质上就是网络硬件设备,将数据发送到网卡上,或者从网卡接收数据,实现网络数据传输。
MAC地址用来识别数据链路层中相连的节点;长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)。在网卡出厂时就确定了,不能修改。虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址。
特殊的MAC地址:
广播数据报(FF:FF:FF:FF:FF:FF):发送广播数据报,意味着对当前同网段的所有主机发送。
IP地址和MAC地址区别:
IP地址描述的是路途总体的起点和终点;是给人使用的网络逻辑地址。
MAC地址描述的是路途上的每一个区间的起点和终点,即每一跳的起点和终点;是给网络硬件设备使用的网络物理地址。
集线器的作用是转发至所有端口。它是工作在物理层的网络设备,发送到集线器的任何数据,都只是简单的将数据复制并转发到其他所有端口。(端口指集线器后边的物理端口)
主机&路由器:ARP缓存表+ARP寻址我们上面提到,子网掩码可以判断当前通信的源IP和目的IP是否属于同一网段,方便确定之后处理流程。属于不同网段时,我们可以通过路由表查找下一跳的IP地址,但该设备的MAC地址(即目的MAC)可能不知道,就需要使用ARP寻址:
首先,ARP是一个介于数据链路层和网络层之间的协议;ARP协议建立了IP地址与MAC地址的映射关系。
在数据链路层,寻找下一跳设备MAC地址的过程,称为ARP寻址:
(1)主机和路由器中都保存了一张ARP缓存表:通过IP地址可以找到对应的MAC地址。
(2)根据下一跳设备的IP地址,在ARP缓存表中能找到对应的MAC地址,则可以设置目的MAC并发送
数据报。
(3)如果找不到,则发送ARP广播数据报:目的MAC为广播地址,询问下一跳设备的MAC地址。
交换机工作在数据链路层,交换机内部会记录并维护一张MAC地址转换表:
- MAC地址转换表主要记录MAC地址与端口之间的映射关系。(端口指交换机后边的物理端口)
- 主机连接到交换机,在主机发送数据的时候,交换机可以学习并记录该主机MAC地址与端口信息。
- 交换机接收到数据报以后,在MAC地址转换表中,通过目的MAC查找到对应的端口,则目的主机为该端口相连接的主机。只需要将数据报转发到对应端口上即可。
- 以上是使用MAC地址转换表,通过目的MAC能找到对应端口的情况;如果找不到,交换机设置数据报目的MAC为广播地址FF:FF:FF:FF:FF:FF,发送到其他所有端口,目的主机返回响应后,交换机再记录该主机MAC与端口的映射信息。
路由器有两个作用:
(1)网关
路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网(不同网段)。
公网端口即WAN口,为单独的网卡,具有公网IP地址和公网MAC地址。
划分的多个子网,是由局域网端口即LAN口划分,每个端口都有单独的网卡,具有该网段IP地址和MAC地址。
路由器作为网关:
①划分局域网多个子网时,可以直接通过ARP寻址找到局域网任意主机。(这里的局域网就是路由器下的多个子网组成的局域网)。
②划分公网和局域网时,局域网内主机发送数据报到公网主机时,需要基于NAPT协议,将局域网主机的IP地址和端口号,转换为路由器公网IP和端口号(指路由器中运行的程序的端口)。
局域网IP+端口需要转换为公网IP+端口,原因是接收端返回的响应数据报,目的IP和目的端口无法使用局域网IP和端口。
(2)路由(路线规划)
所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;
网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。
使用集线器网络互联的情况下,发送端主机发送数据包时,需要先从上到下封装数据报。但封装时,目的MAC可能并不知道,需要先进行ARP寻址:
(1)发送端在本机ARP缓存表中,根据目的IP查找对应的MAC地址
(2)如果找到,则可以在数据链路层以太网帧头中,设置目的MAC并发送数据包
(3)如果没有找到,需要先发送ARP广播请求,让接收端,即目的主机告诉自己,目的MAC是多少
(4)发送端更新本机ARP缓存表:保存目的IP与目的MAC的映射
(5)有了目的MAC,就可以按照第(2)个步骤发送数据了。
以下为本机ARP缓存表能找到目的MAC的流程:涉及的知识:封装,集线器转发,ARP寻址
如果本机ARP缓存表中找不到目的MAC,则需要先发送广播请求:
涉及的知识:ARP寻址,ARP广播
涉及的知识:交换机MAC地址转换表
涉及的知识:子网掩码,网关
涉及的知识:DNS,NAPT,路由
(1)解析网址,生成 HTTP 请求信息。
浏览器会根据域名找到对应的IP地址(可以通过查自身缓存、hosts文件、DNS服务器/根服务器),浏览器会构造出一个HTTP请求,包含域名信息。(根据 DNS 服务器查询真实请求的 IP 地址,如果本地服务器有缓存则直接返回)
(2)得到了 IP 以后,浏览器调用 *** 作系统的API,Socket 会把HTTP请求交给TCP进行处理。
① 向服务器发送之前,构造TCP数据报,三次握手建立连接(SYN/ACK同样要经过网络层,数据链路层,物理层依次封装)
②网络层把TCP数据报封装成一个IP数据报
③数据链路层把数据封装为以太网数据帧(构造帧头时需要根据IP映射MAC地址,用到ARP协议)
④物理层把数据转换为光电信号,继续传输
(3)中间转发过程。电信号沿着网线,到达下一设备(路由器)在进行数据分用,路由器拿到网络层的IP数据报,取出其中的目的IP,查询路由表,查下一目标的MAC地址,重新进行封装。数据到达接收方(服务器)继续进行分用,层层解析。
①物理层把光电信号转换为以太网数据帧
②数据链路层解析出IP数据报,交给网络层(crc校验)
③IP协议解析出TCP数据报(组包过程/IP报头/16位标识/3标志位/13位片偏移)
④再根据TCP数据报中的端口号,找到对应的进程,放入对应Socket缓冲区中
(4)应用程序调用对应的Socket API,从TCP接收缓冲区中读取数据,按照HTTP协议解析,获取URL。
(5)服务器对路径进行配置,映射到一个具体的index.html文件,并将内容构造成HTTP响应数据发送。将响应再进行层层封装和分用。
(6)浏览器得到HTTP 响应报文并解析, 获取其中的html内容,根据HTML进行页面的 渲染并显示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)