有道云笔记
前边的话
一、网络分层的概述
1.2 层与协议
二、物理层(传输0,1电信号)
三、数据链路层(确定0,1分组方式,内网广播)
3.1 定义
3.2 以太网协议
3.3 MAC地址(6个字节)
3.4 广播(同一子网内)
四、网络层(分配IP地址,区分不同计算机是否是同一个子网络)
4.1 网络层的由来
4.2 IP协议(规定网络地址的协议,确定是否同一子网络)
4.3 ICMP 协议(ping 指令基于该协议)
4.4 ARP协议(子网内: 根据 IP 广播查询内网中的Mac 地址)
五、传输层 (建立端口到端口的通信)
5.1 传输层的由来
5.2 UDP协议
5.3 TCP协议
六、应用层
前边的话
本文摘抄自阮一峰老师的系列博客,为方便自己学习与记录,对部分内容进行了调整。
一、网络分层的概述
1.1 网络模型分层(OSI七层,TCP/IP概念层模型为5层)
OSI 网络模型(7层)
|
作用
|
各层协议
|
TCP/IP概念层模型5层
|
应用层
|
固定消息头,消息体格式 确定进程间通信的方法
|
http,DNS、FTP、Telnet、SMTP、WWW、NFS
|
应用层 网关
|
表示层
|
不同系统的数据格式化 加密解密
|
JPEG、MPEG、ASII
|
|
会话层
|
访问验证,会话管理 用户登陆验证
|
NFS、SQL、NETBIOS、RPC
|
|
传输层
|
端口到端口(不同主机的进程间通信) 可靠不可靠 流量控制
|
TCP、UDP、SPX
|
传输层 网关
|
网络层
|
IP,选择路径 数据从源到目的的传输
|
IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
|
网络层
|
数据链路层
|
封装数据帧 MAC地址访问媒介 错误检测,修正
|
PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
|
链路层
|
物理层
|
比特流传输 物理接口
|
RJ45、CLOCK、IEEE802.3 (中继器,集线器)
|
物理层
|
1.2 层与协议
每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。
大家都遵守的规则,就叫做"协议"(protocol)。
互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite)。它们是互联网的核心,下面介绍每一层的功能,主要就是介绍每一层的主要协议。
二、物理层(传输0,1电信号)
我们从最底下的一层开始。
电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。
这就叫做"实体层",它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
三、数据链路层(确定0,1分组方式,内网广播)
3.1 定义
单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?
这就是"链路层"的功能,它在"物理层"的上方,确定了0和1的分组方式。
3.2 以太网协议
以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成三个部分:标头(Head)和数据(Data),尾校验(End)。
"头"和"尾"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。
不知道MAC地址时: 填写广播的形式:FF-FF-FF-FF-FF-FF
整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
下一条协议:
类型字段的值为0x0800时,表示上层使用的是IP数据报。
类型字段的值为0x0806时,表示上层为ARP数据报
3.3 MAC地址(6个字节)
上面提到,以太网数据包的"标头",包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?
以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。
每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。
前3个十六进制数是厂商编号,后3个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。
3.4 广播(同一子网内)
一块网卡怎么会知道另一块网卡的MAC地址?
以太网数据包必须知道接收方的MAC地址,然后才能发送。
其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?
回答是以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。
上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。
有了数据包的定义、网卡的MAC地址、广播的发送方式,"链路层"就可以在多台计算机之间传送数据了。
MTU最大传输单元: 64~1500 字节,
四、网络层(分配IP地址,区分不同计算机是否是同一个子网络)
4.1 网络层的由来
以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,上海的网卡就可以找到洛杉矶的网卡了,技术上是可以实现的。
但是,这样做有一个重大的缺点。以太网采用广播方式发送数据包,所有成员人手一"包",不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难。
互联网是无数子网络共同组成的一个巨型网络,很像想象上海和洛杉矶的电脑会在同一个子网络,这几乎是不可能的。
因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。("路由"的意思,就是指如何向不同的子网络分发数据包,这是一个很大的主题,本文不涉及。)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。
这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。
于是,"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。
网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。
4.2 IP协议(规定网络地址的协议,确定是否同一子网络)
规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。
目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。
这个地址分成两个部分,前一部分代表网络,后一部分代表主机。
怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?
"子网掩码"(subnet mask)网络部分全部为1,主机部分全部为0
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
4.2.1 IP数据包
把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。
具体来说,IP数据包也分为"标头"和"数据"两个部分。
参数解释:
版本:IP协议的版本,IPV4为4,IPV6为6。
首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分(最长40字节)的长度之和(20~60字节)。共占4位,最大为1111。
服务类型:Type Of Service。
总长度(65535):IP报文的总长度。报头的长度和数据部分的长度之和。
标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
标志:分片情况。共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。
片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)
TTL生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃,并发送ICMP 报文通知源主机。TTL 字段是由发送端初始设置一个 8 bit字段,发送 ICMP 回显应答时经常把 TTL 设为最大值 255。TTL作用: 防止数据无休止的在网络上中流动。
协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
首部校验和:计算IP头部的校验和,检查IP报头的完整性。
它放进以太网数据包后,以太网数据包就变成了下面这样。
IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。
如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。
4.2.2 IP协议的特点
不可靠: 不保证数据传输成功,发生错误时,路由丢弃包,并发送ICMP 给源主机。
无连接:可以不按顺序发送和接收。
正因为IP 协议不能知道是否丢包,丢包的原因,所以用到 ICMP 协议来实现。
IP路由选择的过程:
根据最长匹配原则,找到条目,发送到指定的路由器。如果不能找到,返回一个“主机不可
达”或“网络不可达”的错误。
IP 地址的分类:
1. A 类地址:首位为 0, 1.0.0.1~~126.255.255.254;主机号 24 位
2. B 类地址:首位为 10, 128.0.0.1~~191.255.255.254;主机号 16 位
3. C 类地址:首位为 110, 192.0.0.1~~223.255.255.254;主机号 8 位
4. D 类地址(多播地址,也叫做组播地址):首位为 1110, 224.0.0.1~~239.255.255.254
5. E 类地址:此类地址是保留地址,首位为 11110, 240.0.0.1~~254.255.255.254
4.2.3 分片与重组(源主机和路由器中发生)
IP数据报的大小超过了MTU时,IP层就需要对数据进行分片。传输层的首部只会出现在第一个分片中。
避免IP分片:
UDP包,我们需要在应用层去限制每个包的大小,一般不要超过1472字节
TCP包不需要我们考虑
4.3 ICMP 协议(ping 指令基于该协议)
正因为IP 协议不能知道是否丢包,丢包的原因,所以用到 ICMP 协议来实现。
该协议的作用:
1. 确认IP包是否成功到达目标地址
2. 通知在发送过程中IP包被丢弃的原因
ICMP报文类型:
主机发出的ICMP包——主动查询
ping 指令:
一台主机使用ping向一个节点发送一个类型字段值为8的ICMP报文,如果途中没有异常(如果没有被路由丢弃,目标不回应ICMP或者传输失败),则目标返回类型字段值为0的ICMP报文,说明这台主机存在。
- A 电脑( 192.168.2.135)发起 ping请求, ping192.168.2.179
- A 电脑广播发起 ARP请求,查询 192.168.2.179的 MAC地址。
- B 电脑应答 ARP请求,向 A电脑发起单向应答,告诉 A电脑自己的 MAC地址为 90:A4:DE:C2:DF:FE
- 知道了 MAC地址后,开始进行真正的 ping请求,由于 B电脑可以根据A电脑发送的请求知道 源 MAC地址,所以就可以根据源 MAC地址进行响应了。
路由器发出的ICMP包
目的地无法到达: 路由器找到目标主机,但是目标主机关机啦
超时:TTL=0时,路由器判定超时
重定向:路由器对照其routing table,发现自己不应该收到该IP包,发送ICMP提示 主机重定向
4.4 ARP协议(子网内: 根据 IP 广播查询内网中的Mac 地址)
因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的(后文会解释),但是我们不知道它的MAC地址。所以,我们需要一种机制,能够从IP地址得到MAC地址。
由 IP 地址 得到 Mac 地址
第一种情况: 如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理,需要知道默认网关的 MAC 地址。
第二种情况:两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。
先查询主机的 ARP高速缓存,如果不存在:
ARP协议需要广播的方式查找某个IP 主机对应的MAC地址。也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。
总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。
免费ARP的作用: 主机A 发送ARP 查询自己的IP 地址。
1. 确定是否有其他主机设置相同IP
2. 本机修改了MAC地址时,通知其他主机更新ARP 缓存
主机ARP高速缓存的生存时间是一般为5-10分钟
五、传输层 (建立端口到端口的通信)
5.1 传输层的由来
有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。
这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。
5.2 UDP协议
5.3 TCP协议
六、应用层
"应用层"的作用,就是规定应用程序的数据格式。
重点掌握 Http, DNS, FTP
更多内容在我的github
赞 (0)