引入
五层模型
1.概述
- 每一层都有自己的功能
- 每一层都靠下一层支持
- 越下面的层,越靠近硬件
- 越上面的层,越靠近用户
2.图解
3.层与协议
- 为了完成功能,每层都遵守共同的规则,该规则叫协议(protocol)
- 协议总称互联网协议(Internet Protocol
Suite)
实体层
- 实体层:将电脑连接起来的物理手段
- 可以用光缆、电缆、双绞线、无线电波等方式
- 主要规定网络的电气特性
- 负责传送0和1的电信号
链接层
1.概述
- 链接层:确定0和1电信号的分组方式
2.以太网数据包
- 以太网协议规定
一个数据包 = 一组电信号 = 帧(Frame)
一帧 = 标头(Head) + 数据(Data)
- 标头
包含以太网数据包的说明项,比如发送者、接受者、数据类型等等
长度:固定为18字节
- 数据
以太网数据包的具体内容
长度:最短为46字节,最长为1500字节
- 帧最短为64字节,最长为1518字节
- 如果数据过长就必须分成多个帧进行发送
- 以太网数据包必须知道接收方的MAC地址才能发送
3.MAC地址
MAC地址 = 网卡地址 = 数据包的发送地址 + 接收地址
4.网卡
- 以太网协议规定
连入网络的所有设备都必须有"网卡"接口
数据包只能在网卡间传输
- 每块网卡出厂的时都有全世界独一无二的MAC地址
- 长度是48个二进制位,常用12个十六进制数表示
前6个十六进制数是厂商编号
后6个十六进制数是该厂商的网卡流水号
5.广播
- 知道接收方MAC地址,系统怎样才能把数据包准确送到接收方?
以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断是否为接收方
下图中,1号计算机向2号计算机发送数据包,同一子网络的3号、4号、5号计算机都会收到这个包,每台计算机读取该包的"标头"中接收方的MAC地址,与自身MAC地址相比较,若两者相同接受这个包,做进一步处理,否则就丢弃这个包
- 广播(broadcasting):本网络中所有计算机都接收该数据包,每个计算机读取数据包标题中接收方的MAC地址,与自己的MAC地址比较,若相同接收该包,做进一步处理,否则丢弃
- 广播风暴:信息量大就会阻塞
6.数据包+MAC地址+广播使链路层可以在多台计算机之间传送数据
网络层
1.由来
- 以太网采用广播发送数据包,不仅效率低,而且局限在发送者所在的子网络,如果两台计算机不在同一个子网络数据包无法传递
- 互联网是无数子网络共同组成的一个巨型网络
- 因此要区分哪些MAC地址在同一子网络,哪些不在
- 如果是同一个子网络采用广播方式发送,否则采用"路由"方式发送
1向4发送数据包,先判断与4是否在同一个子网络(IP地址+子网掩码),结果发现不是,于是就把这个数据包发到网关A。网关A通过路由协议,发现4位于子网络B,又把数据包发给网关B,网关B再转发到4
- 遗憾的是,MAC地址本身无法辨别是否在同一网络
- 此时网络层就诞生
2.概述
- 网络层:区分不同的计算机是否属于同一子网络
3.网络地址(网址)
- 网络层引入的一套新地址
- 每台计算机有了两种地址:MAC地址+网络地址
- MAC地址与网络地址没有任何联系,随机组合在一起
MAC地址绑定在网卡上,确定数据包的发送地址与接收地址
网络地址由管理员分配,确定计算机所在的子网络
- 必定是先处理网络地址,然后再处理MAC地址
4.IP协议
- 规定网络地址的协议
- 广泛采用的IPv4协议规定,网络地址由32个二进制位组成,常用4个十进制数表示IP地址,范围0.0.0.0~255.255.255.255
5.IP地址
- 互联网上的每一台计算机都会分配到IP地址
- 前部分表示网络,后部分表示主机
比如IP地址172.16.254.1,假定网络部分是前24位(172.16.254),则主机部分是后8位(1)
- 处于同一子网络的计算机IP地址网络部分相同
6.子网掩码
- 确定网络部分由前几位表示
- 由32个二进制位组成,形同IP地址
- 网络部分用1表示,主机部分用0表示
比如IP地址172.16.254.1,且已知网络部分是前24位,主机部分是后8位,则子网掩码是11111111.11111111.11111111.00000000,十进制表示255.255.255.0
7.判断两台计算机是否在同一子网络
- IP地址+子网掩码
- 方法
两个IP地址分别与子网掩码进行与(AND 有0则0)运算,比较运算结果,相同则在同一子网络,否则就不是
比如已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?
两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络
8.IP数据包
- IP数据包:根据IP协议发送的数据(必定包含IP地址)
- 以太网数据包只包含MAC地址,将IP数据包放入数据部分,不用修改以太网规格
- 互联网分层结构的好处:上层的变动完全不涉及下层的结构
- 结构:标头+数据
- 标头
包含版本、长度、IP地址等信息
长度:20~60字节
- 数据
IP数据包的具体内容
长度:最大65515字节
- 整个IP数据包总长度最大为65,535字节
- 以太网数据包数据部分最长为1500字节,IP数据包存于以太网数据包数据部分,所以IP数据包超过1500字节就需要分割成几个以太网数据包分开发送
9.ARP协议
- 发送数据时需同时知道接收方的MAC地址与IP地址
- 通常IP地址是已知的,但是不知道MAC地址
- 两种情况
1.两台主机不在同一子网络
实际没办法得到对方的MAC地址,只能将数据包传给连接两个子网络的网关处理
2.两台主机在同一子网络
用ARP协议得到对方的MAC地址
- ARP协议:得到接收方的MAC地址
取以太网数据包中的一个数据包,该数据包MAC地址栏填写FF:FF:FF:FF:FF:FF,表示这是广播地址
将该数据包发送到子网络的每一台主机,主机从中取出IP地址与自己的IP地址比较,若相同则向对方报告自己的MAC地址,否则丢弃
传输层
1.端口
- MAC地址和IP地址在互联网任意两台主机上建立通信
- 同一台主机上有许多程序都需要用到网络,当数据包从互联网发来时如何知道表示的是哪个程序?
- 端口(port):标识数据包供哪个程序(进程)使用,实际是使用该网卡程序的编号
- 0~65535中的整数,由16个二进制位组成
0~1023被系统占用,用户只能选大于1023的端口
2.传输层
- 建立端口与端口间的联系
相比之下,网络层的功能是建立主机与主机间的通信
- 确定主机与端口号,可以实现程序之间的交流
- 套接字 = 主机 + 端口
3.UDP协议
- 在数据包中加入端口信息的最简单协议
- 格式几乎就是在数据前面加上端口号
- 将UDP数据包放入IP数据包的数据部分
- UDP数据包结构:标头+数据
- 标头
定义发出端口和接收端口
长度:8字节
- 数据
UDP数据包的具体内容
- UDP数据包总长度不超过65,535字节,正好放进一个IP数据包
- 优点:简单,容易实现
- 缺点:数据包一旦发出,无法知道接收方是否接收
4.TCP协议
- TCP协议提高网络可靠性,确保数据不会遗失,但过程复杂、实现困难、消耗较多资源
- 每发出一个数据包都要求确认,如果数据包遗失就收不到确认信息,发出方有必要重发该数据包
- TCP数据包内嵌在IP数据包的数据部分
- TCP数据包没有长度限制,理论上可以无限长,但通常TCP数据包的长度不超过IP数据包的长度,以确保单个TCP数据包不必再分割,保证网络的效率
- TCP协议栈
5.TCP传输过程
- 原理图
- 建立连接的三次握手分析
1.客户端发出段1:SYN位表示连接请求,序号1000在网络通讯中用作临时地址,每发一个数据字节序号加1(接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况),另外规定SYN位和FIN位也要占一个序号,这次虽然没发数据,但是发了SYN位,因此下次再发送应该用序号1001。mss表示最大段尺寸,如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP 层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度
2.服务器发出段2:带有SYN位,同时置ACK位表示确认,确认序号是1001,表示“我接收到序号1000 及其以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求,同时声明最大尺寸为1024
3.客户端发出段3:对服务器的连接请求进行应答,确认序号是8001
客户端和服务器分别给对方发连接请求,同时应答对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为三方握手(three-way-handshake)
在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等
- 数据传输过程分析
1.客户端发出段4:从序号1001开始的20个字节数据
2.服务器发出段5:确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发送序号1021开始的数据,服务器在应答的同时也向客户端发送从序号8001开始的10个字节数据
3.客户端发出段6:对服务器发来的序号为8001-8010的数据表示确认收到,请求发送序号8011开始的数据
应用程序交给TCP协议发送的数据会暂存在TCP层的发送缓冲区中,发出数据包给对方之后,只有收到对方应答的ACK段才知道该数据包确实发到了对方,可以从发送缓冲区中释放掉了,如果因为网络故障丢失了数据包或者丢失了对方发回的ACK段,经过等待超时后TCP协议自动将发送缓冲区中的数据包重发
- 关闭连接的四次挥手
1.客户端发出段7:FIN位表示关闭连接的请求
2.服务器发出段8:应答客户端的关闭连接请求
3.服务器发出段9:包含FIN位,向客户端发送关闭连接请求
4.客户端发出段10:应答服务器的关闭连接请求
服务器的应答和关闭连接请求通常不合并在一个段中,因为有连接半关闭的情况,这种情况下客户端关闭连接之后就不能再发送数据给服务器了,但是服务器还可以发送数据给客户端,直到服务器也关闭连接为止
应用层
- 应用程序接收传输层的数据
- 应用层规定应用程序的数据格式
- 数据放在TCP数据包的数据部分
小结
1.数据包结构
2.数据包目标地址
- 发送包必须知道目标地址+IP地址
用户的上网设置
1.静态IP地址
- 新电脑需设置四个参数才能上网,缺一不可
本机的IP地址
子网掩码
网关的IP地址
DNS的IP地址
- 四个参数是给定的,每次开机都不会变
- 缺点:不灵活
2.动态IP地址
- 每次开机会自动分配到一个IP地址,不用人为设定
- 使用的协议叫做DHCP协议
3.DHCP协议
- 应用层协议,建立在UDP协议之上
- DHCP数据包
- DHCP服务器
每个子网络中有台计算机负责管理本网络的所有IP地址
- 新计算机加入该子网络,必须向DHCP服务器发送DHCP请求数据包,申请IP地址和相关网络参数
- 新加入的计算机不知道MAC地址与IP地址如何发送DHCP数据包?
- DHCP请求数据包
1.以太网标头:设置发出方(本机)与接收方(DHCP服务器)MAC地址
发出方:本机网卡MAC地址
接收方:FF-FF-FF-FF-FF-FF(不知道)
2.IP标头:设置发出方(本机)与接收方(DHCP服务器)IP地址
发出方:0.0.0.0(不知道)
接收方:255.255.255.255(不知道)
3.UDP标头:设置发出方(本机)与接收方(DHCP服务器)端口
发出方:68端口(规定)
接收方:67端口(规定)
- 以上数据包构造完毕,可以发出
- 广播发送,同一个子网络每台计算机都收到该包
- 接收方MAC地址不知道,则根据ARP协议通过IP地址确定
- 接收方IP地址是255.255.255.255,发送方IP地址是0.0.0.0
- 此时确定该包是发给DHCP服务器的,其他计算机可以丢弃该包
- 接下来
- DHCP服务器读该包的数据内容,分配IP地址,发送DHCP响应数据包(结构类似)
- DHCP响应数据包
1.以太网标头:设置发出方(DHCP服务器)与接收方(本机)MAC地址
发出方:网卡MAC地址
接收方:网卡MAC地址
2.IP标头:设置发出方(DHCP服务器)与接收方(本机)IP地址
发出方:DHCP服务器的IP地址
接收方:255.255.255.255
3.UDP标头:设置发出方(本机)与接收方(DHCP服务器)端口
发出方:67端口(规定)
接收方:68端口(规定)
- 申请IP地址和相关网络参数包含在Data部分
- 新加入的计算机收到DHCP响应包,就知道自己的IP地址、子网掩码、网关地址、DNS服务器等等参数