网络层
- 功能:将异构的网络通过路由器互联,在网络层面好像一个统一的网络。
- 数据报服务:互联网则是网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。(不建立连接、不提供质量保障),好处为造价降低、方式灵活、能适应多种应用。
虚电路:网络保证可靠通信,传输前先建立连接分配资源
- 硬件设备:路由器
- 功能:路由选择(路由选择协议)与分组转发(根据转发表,将用户IP数据报从合适端口转发,转发表由路由表获得)
- 协议传输单元:IP数据报
- IP网际协议:使用IP协议可以使性能各异的网络在网络层上看起来好像是一个统一的网络。
- IP地址:每一台主机的每一个接口分配的一个唯一标识符(V4 32位,V6 128位)网络号+主机号构成。
- 地址分类
特殊地址:
- 0,0,0,0:本网络
- 127,X,X,X:回环测试地址
- 主机号全为0(eg: 14,0,0,0,):本主机所在网络的地址
- 主机号全为1(eg:14,255,255,255,255):该网络上所有主机
- 128,0,0,0:不指派
- 192,0,0,0:不指派
MAC地址和ip地址:
IP地址 | MAC地址 | |
---|---|---|
使用层 | 网络层及以上 | 数据链路层 |
位置 | IP数据报头部 | 帧头部 |
不同网络之间ip网络号不同,不同接口之间MAC地址不同
数据分组中:MAC地址在数据分组转发中不断变化,IP地址始终不变
路由器有多个IP地址的同时,有多个MAC地址。
- IPv4
数据报格式
- 首部固定长度20字节,可变部分40字节
- 首部长度4字节,每+1表示首部长度+4字节,最大15(最小5),所以首部最大60字节
- 标识、标志、分片偏移(8字节为单位,不够需要补充)都用于数据分片
- 首部检验和:只检验首部,不含数据部分
- IPv6
数据报首部格式
- 地址空间更大(128位)
- 8字节对齐
- 灵活的首部格式(实际上首部改为了定长40字节,扩展部分放在有效载荷中,添加了有效载荷长度字段)
- 允许协议继续扩充、支持资源的预分配(流标号)、自动配置(不需要DHCP)
- 扩展首部中,除了逐跳选项外,路由器不处理,由主机处理。
- IPV4 向IPV6过渡
- 双协议栈(一部分主机or路由有两个协议栈,可以和4与6通信,但首部转换中会有一定损失)
- 隧道技术:v6进入v4时,将v6数据报封装为V4的数据报,作为V4的数据部分(V4首部协议字段设置为41)
- 相关协议:
ARP(地址解析协议):实现通过知道机器的ip地址,找出其对应的MAC地址。在ARP cache中放入IP地址到MAC地址的映射表。解决同一个局域网主机或路由器的ip和mac映射问题。
ICMP(网际控制报文协议):允许主机或路由器报告差错情况和提供有关异常情况的报告。报文封装在IP数据报中作为数据部分。
* icmp差错报文:终点不可达(向源点发送)、时间超过(向源点,重点也可能向源点)、参数问题、改变路由(让主机知道下次发给另外路由器)、源点抑制(让源点将数据发送放慢)
* icmp询问报文:回送请求和回答(询问状态)、时间戳请求和回答(询问时间)
应用举例:PING测试主机间的连通性、traceroute(跟踪一个分组源点到终点,利用时间超过报文)
- *IGMP(网际组管理协议):
-
子网划分:子网号字段,物理网络划分为若干个子网,从主机号借若干位为子网号字段。
子网掩码: 子网掩码与ip地址相与得到子网网络地址。好处是无论有无划分子网,网络号都可以通过这种方法得出,处理分组可以采用相同的算法。
子网号不能够全为0全为1(目前可以了,但是慎用),主机号不能全为0全为1,所以划分子网后会少很多主机号 -
CIDR与路由聚合
CIDR:无分类域间路由选择,消除传统ip分类以及划分子网,网络前缀相同的连续ip组合成CIDR地址块,可以通过里面的网络知道该网络最大的ip地址以及最小ip地址。
利用CIDR地址块查找目的网络,将地址的聚合称为路由聚合(构造超网),可以包含好多个传统分类的网络,更有效进行地址分配。 -
路由选择协议(重要!!)
- 理想算法要求:算法完整正确、算法在计算上简单、自适应性、稳定性、公平、最佳
- 层次路由:
RIP(路由信息协议):基于距离向量的路由选择协议,节点发送其拥有的所有路由信息,发送给其邻接点,定期交换。问题是好消息传得快,坏消息传的慢,需要较长时间才能发现网络的故障。实现简单、开销较少。
OSPF(开放最短路径优先):基于链路状态的路由算法,所有结点主动测试邻接节点的状态(开销等),定期将自己的链路状态传给所有其他结点。也就是传输的是邻接状态的内容,发送对象是自治系统中所有的结点。能够较快更新,收敛快。使用Dijkstra最短路径算法构造网络拓扑图。链路状态变化的时候路由表进行更新。
BGP(边界网关协议):是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。 只能力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非寻找一条最佳路由。路径向量路由选择协议,基于TCP。BGP发言人之间相互交换路由信息,BGP发言人寻找可实现的并比较好的路由。
- 网络层转发分组的流程:
有了划分子网的话,路由表必须包括:目的网络地址、子网掩码、下一跳地址。
- 获得目的地址D后,先判断是否直接交付(D与路由器直接相连的网络的子网掩码进行与操作,然后比较网络号是否一致)
- 判断路由表中有没有针对D的特定路由,有则交付
- 将D与路由器路由表中所有网络的子网掩码 进行与操作,比较网络号是否一致,如果一致则交付
- 传给默认路由
- 报告转发分组出错。
总结:先判断直接交付情况,然后特定路由情况查询,然后遍历路由表,然后默认路由,以上均不能转发,则报告转发分组出错。
运输层
1.功能:向应用层提供服务,是面向通信的最高层,面向用户的最底层。通信的真正端点是应用程序进程(端到端通信)。
2. 复用:不同应用程序进程使用同一个运输层传输协议
分用:接收方能把数据正确交付应用进程。
3. UDP用户数据报协议
- 首部8字节
- 面向数据报,将报文完整的交给ip层而不分割
- TCP传输控制协议
- TCP连接唯一地被通信两端的两个套接字所确定
- 首部[20,60],重要的标志位:URG\ACK\PSH\RST\SYN\FIN
TCP连接管理!!!!(非常重要)
- 三阶段:建立连接、数据传输、连接释放
- C/S方式
- 三报文握手
数据报 | 发送方 | 首部特点 | 序号特点 | 数据特点 | 状态变化 |
---|---|---|---|---|---|
TCP请求报文段 | 客户端 | SYN = 1;ACK = 0 | 假设序号为X,消耗一个序号 | 不携带数据 | 客户进程进入SYN-SENT |
确认报文1 | 服务器 | SYN = 1;ACK = 1;ack = x+1 | 假设序号为y,消耗一个序号 | 不携带数据 | 服务器进入SYN-RCVD |
确认报文段2 | 客户端 | ACK = 1;ack = y+1 | 序号为x+1 | 可以携带数据,携带数据才消耗序号 | 客户端进入已建立连接状态,服务器收到报文后也进入已建立连接状态 |
确认报文段2的作用:防止已经失效的连接请求报文突然传送到服务器,引发错误。
- 四报文握手释放连接
A客户端,B服务器
数据报 | 发送时间 | 发送方 | 首部特点 | 序号特点 | 数据特点 | 状态变化 | 备注 |
---|---|---|---|---|---|---|---|
连接释放报文段1 | 应用进程想要释放连接 | 客户端 | FIN = 1 | seq = u,必须消耗序号 | 可以携带 | A从连接建立变为FIN-WAIT-1 | |
确认报文段1 | 接收到连接释放报文段 | 服务器 | ACK = 1;ack = u+1 | seq = V | ? | B进入close-wait,A接收到后进入FIN-WAIT-2 | 此时A不能向B发送数据,但是B还可以向A发送数据 |
连接释放报文段2 | B向A数据发送完全 | 服务器 | FIN = 1;ACK = 1;ack = u+1 | seq = w | ? | B进入LAST-ACK | |
确认报文段2 | 接收到B的释放报文段 | 客户端 | ACK = 1;ack = w+1 | seq = u+1 | / | A进入TIME-WAIT,B接收数据报后进入Closed | A要等待2MSL才进入CLOSED状态 |
MSL:最长报文段寿命
等待理由:A最后的报文段能够到达B;本连接产生的所有报文段都从网络中消失,新连接中不会出现旧连接报文段而产生错误
- 比较
协议 | 特点 | 首部长度 | 应用 | 适用性 |
---|---|---|---|---|
UDP | 无连接传输、是尽最大努力交付的传输、面向报文的传输、可以提供一对一/多对一等传输、首部开销小、没有拥塞控制 | 8字节 | DNS、DHCP、TFTP、SNMP、RIP、IGMP | 实时网络应用要求主机以恒定速率发送数据,允许部分数据丢失的,不允许有太大时延的(实时视频会议) |
TCP | 面向连接的传输、提供可靠交付、只能一对一、提供全双工通信、面向字节流传输 | [20,60] | HTTP,SMTP,TELNET,FTP |
-
TCP可靠传输
- 停止等待协议:正常情况、超时重传、确认丢失(重复的数据,丢弃,确认重传)、确认迟到(重传的确认,丢弃)
- 连续ARQ:发送窗口、累积确认(按序到达最后一个分组发送确认)
- GO-BACK-N:退回来重传已发送的N个分组
-
TCP流量控制
- 流量控制:发送方发送速率不要太快,接收方来得及接收,对点对点的通信量的控制。
- 接收窗口:rwnd,滑动窗口实现流量控制。发送方的发送窗口不能超过接收方的接收窗口的大小
- 持续计时器,当接受到对方的0窗口通知就启动,防止因为报文丢失,一方长期等待浪费资源。
- Nagle算法:一种通过减少需要通过网络发送包的数量来提高TCP/IP传输的效率。
- 糊涂窗口综合征:接收端和发送端速率不匹配的状况下,TCP协议栈滑动窗口动态调整机制产生的一种问题 叫糊涂窗口综合征。发送方发送的数据,只要一个大大的头部,携带数据很少,效率很低。接收方等待一段时间(让接收缓存有一部分空间)发出确认报文并通知窗口大小,发送方设置不要发送数据量很小的报文。
-
TCP拥塞控制
- 拥塞:网络中对某一资源的需求超过了能够提供的可用部分,网络性能变坏。
- 拥塞控制:防止过多的数据注入网络中,可以使网络中的路由器或链路不至过载。
- 主动队列管理AQM:网络层和tcp之间协调的问题。当路由器队列达到一定数值时,主动放弃到达的分组,提前预警可能出现网络拥塞。方法:随机早期检测。
拥塞控制算法
- 慢开始、拥塞避免、快重传、快恢复
- 拥塞窗口:cwnd, 慢开始门限:ssthresh
- 慢开始:收到一个新的确认就会增加cwnd;每经过一个传输轮次,cwnd就加倍。
- 拥塞避免:经过一个RTT(传输轮次),cwnd就加1,线性增大。
- 快重传:立即发送确认,让发送方尽早知道个别报文的丢失。丢失后要发送的是重复确认。发送方一连收到3个重复确认时,要立刻重传数据。
- 快恢复:ssthresh = cwnd/2;cwnd = ssthresh。然后开始拥塞避免。
慢开始和拥塞避免关系
- 超时的时候,cwnd = 1; ssthresh 减半,从慢开始开始
- 3-ACK时,快重传,快恢复(ssthresh = cwnd/2;cwnd = ssthresh),拥塞避免。
- 拥塞控制和流量控制对比
不同 | 共通 | 其他 | |
---|---|---|---|
拥塞控制 | |||
流量控制 |
- 发送窗口的大小等于Min[拥塞窗口,接收窗口],是两种控制共同作用。
- cwnd:拥塞控制决定,rwnd:流量控制决定
- TCP有限状态机
应用层
- 功能:通过应用进程间的交互来完成特定网络应用。定义进程间通信和交互的规则。
- 数据单元:报文
DNS 域名系统(端口号:53)
-
功能:将主机名转换为ip地址。域名方便人们记忆。ip地址方便计算机处理。
-
服务器种类:本地域名服务器、根域名服务器(本地无法解析,首先求助)、顶级域名服务器、权限域名服务器(负责一个区)
-
过程:
- 应用进程调用解析程序,发送DNS请求报文给本地域名服务器。(递归查询)
- 如果本地域名服务器能够找到对应ip,则发送回应报文给应用进程。
- 如果本地域名服务器找不到,则向根域名服务器发送查询报文,根域名服务器给出ip或告诉下一步如何查询(迭代查询)
- 经过多次迭代查询后,本地域名服务器获得了ip地址,回复主机。
-
主机向本地域名服务器查询,使用递归查询,本地域名直到有答案了返回给主机,主机本身不会进行下一步查询。本地域名向根域名使用迭代查询,即从别的服务器获取到下一步的查询服务器,本地域名进行下一步操作。
-
为了提高效率,域名服务器广泛使用高速缓存,保存最近查询的信息。
www & HTTP(端口号:80,s:443)
-
www:万维网分布式超媒体系统,客户机服务器方式。
-
URL:统一资源定位符,万维网用于标记万维网文档。给资源的位置提供抽象的方法。
-
HTTP超文本传输协议:万维网中客户程序与服务器程序之间交互遵守的协议。是基于TCP的可靠传输。
-
从互联网请求一个url的到获取的过程:
- 浏览器要将url解析为ip(使用DNS协议,而DNS使用了UDP)
* 如果主机DNS缓存中有对应ip,则直接返回,如果没有,向本地域名服务器发送请求报文。 - 获得ip地址后,浏览器要和服务器建立http连接,进行文件传输(http协议,http使用了tcp协议)
* 首先建立tcp连接,需要三次握手
* http请求报文是第三报文的数据部分
* 服务器发送HTTP响应报文 - 在文件展示给用户的同时,4报文挥手释放TCP连接
- 更底层方面,传输需要ip协议,获得MAC地址需要ARP协议。
- 浏览器要将url解析为ip(使用DNS协议,而DNS使用了UDP)
-
http有非持续连接和持续连接(非流水线和流水线方式) ,持续连接使得在一个TCP链接内,有多次的http请求,TCP连接会保持一段时间。
-
cookie 和 session的区别
- Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
- cookie:如果服务器需要记录用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
- 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
SMTP (端口号:25)& POP3
- 邮件系统包括:用户代理、邮件服务,邮件发送协议(SMTP),邮件读取协议(POP3)
- 邮件发送协议:用于用户向邮件服务器发送邮件或服务器间发送邮件。
- 邮件读取协议:用户代理从服务器中读取文件。
- SMTP:简单邮件传输协议,使用TCP 可靠传输,TCP 在两个服务器间直接建立连接。
- POP3:只要用户读取了邮件,就删除。
- IMAP:网际报文存取协议
DHCP动态主机配置协议(UDP,端口68,67)
- 用于自动给主机配置ip地址
- 配置过程:
- 需要ip的主机向DHCP服务器广播发送发现报文
- DHCP将ip广播发送给主机,提供报文
- 主机向选择的DHCP服务器发送请求报文
- 被选择的DHCP发送确认报文,此时主机可以使用ip地址了
- IP是临时的,租用期
FTP文件传输协议(端口号:21,TCP)
- 减少或消除在不同操作系统下处理文件的不兼容性。
- 主进程:接收客户请求;从属进程:处理客户请求,二者并发。