本文约9300字,建议阅读10+分钟。
让我们学习计算机网络学习的核心网络协议。
阅读目录
1.网络层次结构
2.OSI七层网络模型
3.国际电脑互联网地址
4.子网掩码和网络划分
5.ARP/RARP协议
6.路由关联
Tcp/IP协议
Udp协议。
9.域名系统协议
10.网络地址转换协议
11.DHCP协议
12.HTTP协议
13.一个例子
计算机网络学习的核心内容是网络协议的学习。网络协议是为计算机网络中的数据交换而建立的一套规则、标准或惯例。由于不同用户的数据终端可能采用不同的字符集,需要相互通信,必须按照一定的标准进行。生动的比喻是我们的语言。我们地大物博,人口众多,地方语言非常丰富,方言之间差异很大。
A区的方言可能是B区的人所不能接受的,所以我们应该建立一个全国范围内姓名交流的语言标准,这是我们普通话的功能。同样,放眼世界,我们与外国朋友交流的标准语言是英语,所以我们必须努力学习英语。
计算机网络协议和我们的语言一样多样。ARPA公司在1977年到1979年推出了一个名为ARPANET的网络协议,受到了广泛的欢迎,主要原因是推出了大家熟知的TCP/IP标准网络协议。目前,TCP/IP协议已经成为互联网中的“通用语言”。下图是不同计算机组之间使用TCP/IP进行通信的示意图。
7)甲、乙、丙类专用地址
私有地址也称为私有地址。它们不会在全球范围内使用,而仅具有本地含义。
a类私有地址:10.0.0.0/8,范围10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围为172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围为192.168.0.0~192.168.255.255
4.子网掩码和网络划分
随着互联网应用的不断扩大,原有IPv4的弊端逐渐暴露出来,即网络号占用过多,而主机号过少,因此它所能提供的主机地址越来越稀缺。目前,企业内部除了使用NAT分配预留地址之外,通常还会细分一个高级IP地址,为不同规模的用户形成多个子网。
这里的主要目的是在网络分段的情况下有效地使用IP地址。通过将主机号的上半部分作为子网号,子网掩码从通常的网络位限制扩展或压缩,用于创建特定类型地址的更多子网。但是,当创建更多子网时,每个子网中可用的主机地址数量将会减少。
什么是子网掩码?
子网掩码表示两个IP地址是否属于同一个子网,也是32位二进制地址。每一位对应一位,表示该位是网络位,0表示主机位。和IP地址一样,用点分十进制表示。如果两个IP地址通过计算子网掩码的位和得到相同的结果,这意味着它们属于同一个子网。
在计算子网掩码时,要注意IP地址中的预留地址,即“0”地址和广播地址,是指主机地址或网络地址全部为“0”或“1”时的IP地址,它们代表的是本地网络地址和广播地址,一般不能统计。
子网掩码的计算:
对于一个不需要细分子网的IP地址,它的子网掩码很简单,就是可以按照它的定义来写:如果一个B类IP地址是10.12.3.0,不需要细分子网,那么这个IP地址的子网掩码就是255.255.0.0。如果是C类地址,其子网掩码为255.255.255.0。其他的类比就不详细描述了。下面我们需要介绍的是一个IP地址,它的高阶主机位应该作为划分子网的网络号,剩下的就是每个子网的主机号,那么如何计算每个子网的掩码呢。
以下总结了关于子网掩码和网络划分的常见面试问题:
1)使用子网数量来计算
在找到子网掩码之前,您必须找出要划分的子网数量以及每个子网所需的主机数量。
将子网数量转换为二进制表示;
将B类IP地址168.195.0.0划分为27个子网:27=11011
获取二进制的位数,为n;
二进制是五位数,N = 5
获取IP地址的类子网掩码,将主机地址部分的前N位设置为1,即可获取对IP地址进行子网划分的子网掩码。
将B类地址的子网掩码255.255.0.0的主机地址的前5位设置为1,得到255.255.248.0
2)按主机数量计算
要将b类IP地址168.195.0.0划分为几个子网,每个子网中有700台主机:
将主机数量转换为二进制表示;
700=1010111100;
如果主机数量小于等于254,则主机的二进制位数为n,这肯定是N8,这意味着主机地址将占用8位以上;
二进制是十位数,n = 10
使用255.255.255.255将该类IP地址的所有主机地址位设置为1,然后从后向前将所有N位设置为0,这就是子网掩码值。
将B类地址的子网掩码255.255.0.0的所有主机地址设置为1,得到255.255.255.255,然后将最后10位从后往前设置为0,即1111111111 . 1111100 . 000000,即255。这是B类IP地址168.195.0.0的子网掩码,域中有700台主机。
3)还有一种问题类型,要求您根据每个网络中的主机数量来规划子网地址和计算子网掩码。这也可以根据上述原理计算。
例如,如果一个子网有10台主机,则该子网所需的IP地址为:
10+1+1+1=13
注意:添加的第一个是指该网络连接所需的网关地址,后面两个分别是指网络地址和广播地址。
因为13小于16,所以主机位是4位。而256-16 = 240,所以子网掩码是255.255.255.240。
如果一个子网中有14台主机,很多人往往会犯这样的错误:仍然分配16个地址空的子网,而忘记给网关分配地址。这是错误的,因为14+1+1+1 = 17,而17大于16,所以我们只能分配32个地址空的子网。此时,子网掩码为255.255.255.224。
5.ARP/RARP协议
地址解析协议,ARP,是一种根据IP地址获取物理地址的TCP/IP协议。当主机发送信息时,它向网络上的所有主机广播包含目标IP地址的ARP请求,并接收返回消息以确定目标的物理地址。收到返回消息后,将IP地址和物理地址存储在本地ARP缓存中并保存一定时间,下次请求时直接查询ARP缓存,节省资源。
地址解析协议基于网络中每台主机的相互信任。网络上的主机可以独立发送ARP回复消息。当其他主机收到回复消息时,它们不会检查消息的真实性,而是将其记录在自己机器的ARP缓存中。因此,攻击者可以向某台主机发送伪造的ARP回复消息,使攻击者发送的信息无法到达预期的主机或错误的主机,构成ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址与MAC地址的对应关系,添加或删除静态对应关系等。
ARP工作流程示例:
主机a的IP地址为192.168.1.1,MAC地址为0a-11-22-33-44-01。
主机b的IP地址为192.168.1.2,MAC地址为0a-11-22-33-44-02。
当主机A想要与主机B通信时,地址解析协议可以将主机B的IP地址解析为主机B的MAC地址,工作流程如下:
根据主机a上的路由表,IP确定访问主机b的转发IP地址为192.168.1.2。然后主机A在自己的本地ARP缓存中检查匹配的主机B的MAC地址。
如果主机A在ARP缓存中没有找到映射,它将会请求192.168.1.2的硬件地址,从而将ARP请求帧广播给本地网络上的所有主机。源主机a的IP地址和MAC地址包含在ARP请求中。本地网络上的每台主机都会收到ARP请求,并检查它是否与自己的IP地址匹配。如果主机发现请求的IP地址与其自己的IP地址不匹配,它将丢弃ARP请求。
主机B确定ARP请求中的IP地址与自己的IP地址匹配,然后将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
主机b将包含其MAC地址的ARP回复消息直接发送回主机a。
当主机A收到主机B的ARP回复消息时,会用主机B的IP和MAC地址映射来更新ARP缓存,原生缓存是有生命周期的,一旦生命周期结束,就会重复上述过程。一旦确定了主机B的MAC地址,主机A就可以向主机B发送IP通信。
反向地址解析协议,即RARP,其功能与ARP协议相反,ARP协议将局域网中某台主机的物理地址转换为IP地址。比如局域网中的主机只知道物理地址却不知道IP地址,可以通过RARP协议发送对自己IP地址的广播请求,然后由RARP服务器负责应答。
RARP协议的工作流程:
向主机发送本地RARP广播。在这个广播包中,声明你的MAC地址,并请求任何收到这个请求的RARP服务器分配一个IP地址;
本地网段上的RARP服务器收到该请求后,检查其RARP列表,查找MAC地址对应的IP地址;
如果存在,RARP服务器向源主机发送响应数据包,并将IP地址提供给其他主机使用。
如果不存在,RARP服务器不做任何响应;
当从RARP服务器接收到响应信息时,源主机使用获得的IP地址进行通信;如果没有收到来自RARP服务器的响应信息,初始化将失败。
6.路由协议
常见的路由协议包括RIP协议和OSPF协议。
RIP协议:底层是bellmanford算法,选择路由度量发送的数据包,发送到更高层——TCP或UDP层;相反,IP层还将从TCP或UDP层接收的数据包传输到下层。IP数据包不可靠,因为IP不做任何事情来确认数据包是按顺序发送的还是损坏的。IP数据包包含发送它的主机的地址和接收它的主机的地址。
TCP是一种面向连接的通信协议,它通过三次握手建立连接,并在通信完成时删除连接。TCP只能用于端到端通信,因为它是面向连接的。TCP提供可靠的数据流服务,采用“带重传的肯定应答”技术,实现传输的可靠性。TCP还使用一种称为“滑动窗口”的方式进行流量控制。所谓的窗口实际上代表了接收方限制发送方发送速度的能力。
TCP消息头格式:
TCP协议的三次握手和四波:
注:序号:“sequance”序号;Ack:“确认”确认号;SYN:“同步”请求同步标志;;确认:“确认”确认标志;FIN:“终于”结束标志。
TCP连接建立过程:首先客户端发送连接请求消息,服务器端接受连接后回复ACK消息,并为此连接分配资源。在接收到确认消息后,客户端也向服务器部分发送确认消息并分配资源,从而建立TCP连接。
TCP连接断开过程:假设客户端发起连接断开请求,即发送FIN消息。当服务器收到FIN消息时,表示“我在客户端没有数据要发送给你”,但如果你还有数据要发送,就不用急着关闭Socket,可以继续发送数据。所以你先发一个ACK,“告诉客户端我已经收到你的请求,但是我还没有准备好,请继续等待我的消息”。此时,客户端进入FIN_WAIT状态,并继续等待来自服务器的FIN消息。当服务端确定数据已经发送后,会向客户端发送FIN消息,“告诉客户端,好了,我发送数据后准备关闭连接”。客户端收到FIN消息后“知道可以关闭连接,但他还是不相信网络,怕服务端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果服务端没有收到ACK,可以重传。”当服务器收到确认时,“它将知道连接可以断开”。如果客户端在等待2MSL后没有收到回复,则证明服务器已经正常关闭。我的客户也可以关闭连接。好了,TCP连接就这样关闭了!
为什么要挥手三次?
在只有两次握手的情况下,假设客户端想要与服务器建立连接,但由于连接请求的数据报丢失,客户端不得不再次发送;此时,服务器只接收到一个连接请求,因此连接可以正常建立。然而,有时客户端重新发送请求并不是因为数据报丢失,而是因为由于大量的网络并发,数据传输过程在某个节点被阻塞。在这种情况下,服务器端将一个接一个地接收两个请求,并继续等待两个客户端请求向他发送数据...问题是客户端实际上只有一个请求,而服务器端有两个响应。极端情况下,客户端可能会多次重发请求的数据,导致服务器端最终建立n个以上的响应等待,造成极大的资源浪费!所以,“三次握手”是必须的!
为什么要挥手四次?
想象一下,如果您现在是一个客户端,并且想要断开与服务器的所有连接。第一步是停止向服务器发送数据,等待服务器的回复。但是事情还没有结束。虽然你自己没有给服务器发送数据,但是因为你之前已经建立了平等的连接,他此时也有主动给你发送数据;因此,服务器必须停止主动向您发送数据,并等待您的确认。其实说白了,就是保证双方之间的一个合同的完整执行!
TCP协议:FTP、Telnet、SMTP、POP3、HTTP等。
8.UDP协议
UDP用户数据报协议是一种无连接通信协议。UDP数据包括目的端口号和源端口号信息。因为通信不需要连接,所以可以实现广播传输。UDP通信不需要接收方确认,是不可靠的传输,可能会造成丢包。在实际应用中,需要程序员进行编程和验证。
UDP与TCP在同一层,但它不关心数据包的顺序、错误或重传。因此,UDP不适用于使用虚电路的面向连接的服务,而是主要用于面向查询响应的服务,例如NFS。与FTP或Telnet相比,这些服务需要交换的信息更少。
每个UDP报文都分为UDP头和UDP数据区。报头由四个16位字段组成,分别描述消息的源端口、目的端口、消息长度和校验值。UDP报头由4个字段组成,每个字段占用2个字节,如下所示:
源端口号;
目的端口号;
数据报长度;
检查值。
使用的UDP协议包括TFTP、SNMP、DNS、NFS和BOOTP。
TCP和UDP的区别:TCP是面向连接的、可靠的字节流服务;UDP是一种无连接且不可靠的数据报服务。
9.域名系统协议
DNS是域名系统的缩写,用于命名组织成域层次结构的计算机和网络服务。可以简单理解为将URL转换为IP地址。域名由一串用点分隔的单词或缩写组成。每个域名对应一个唯一的IP地址。互联网上的域名和IP地址是一一对应的。DNS是域名解析的服务器。在互联网等TCP/IP网络中,DNS命名用于通过用户友好的名称来查找计算机和服务。
10.网络地址转换协议
NAT网络地址转换属于接入广域网的技术,是将私有地址转换为合法IP地址的转换技术,广泛应用于各种类型的互联网接入方式和各种类型的网络。原因很简单。NAT不仅完美地解决了lP地址不足的问题,还有效地避免了来自网络外部的攻击,隐藏和保护了网络内部的计算机。
11.DHCP协议
DHCP动态主机设置协议是一种局域网协议,它使用UDP协议,主要有两个目的:自动为内部网络或网络服务提供商分配IP地址,并提供给用户或内部网络管理员,作为集中管理所有计算机的手段。
12.HTTP协议
超文本传输协议;
放:在给定的网址下存储文档;
删除:删除由给定网址标记的资源。
在HTTP中,POST和GET的区别在于:
Get是从服务器获取数据,Post是向服务器传输数据。
Get是将参数数据队列添加到提交表单的Action属性所指向的URL中,该值与表单中的每个字段一一对应,在URL中可以看到;
Get传输的数据量较小,不能大于2KB;Post传输的数据量大,默认一般是无限的;
根据HTTP规范,GET用于信息获取,应该是安全的和幂等的。
安全意味着该操作用于获取信息,而不是修改信息。换句话说,GET请求一般不应该有副作用。也就是说,它只获取资源信息,就像数据库查询一样,不会修改、增加数据,也不会影响资源的状态;
幂等意味着对同一个网址的多个请求应该返回相同的结果。
13、一个例子
客户端浏览器通过DNS解析www.baidu.com 220.181.27.48的IP地址,并通过该IP地址找到从客户端到服务器的路径。客户端浏览器向220.161.27.48发起一个HTTP会话,然后通过TCP封装数据包并将其输入网络层。
在客户端的传输层,HTTP会话请求被分成消息段,并添加了源端口和目的端口。比如服务器使用80端口监听客户端的请求,客户端随机选择5000等端口与服务器进行交换,服务器将相应的请求返回给客户端的5000端口。然后使用IP层的IP地址找到目的地。
客户端的网络层与应用层或传输层没有任何关系,主要是通过查找路由表来决定如何到达服务器,路由表可能会经过多台路由器。所有这些任务都是由路由器完成的,这里不再赘述,只是通过查找路由表来决定到达服务器的路径。
在客户端的链路层,数据包通过链路层发送到路由器,通过邻居协议搜索给定IP地址的MAC地址,然后发送ARP请求来查找目的地址。如果得到响应,可以使用ARP请求来应答交换的IP包,然后将IP包发送到服务器的地址。
投票记录
链接:
https://www.cnblogs.com/maybe2030/p/4781555.html