网络协议和体系结构
一. 网络协议 和 体系结构概述
1. 网络协议的概念
协议(规程)
通信双方必须遵守的规则和约定
协议的三要素
语法:确定数据格式等(就像想和外国人交流就得使用英语一样)语义:确定协议元素的类型时序:通信状态的变化
2. 分层的思想
核心思想
上一层的功能必须建立在下一层功能的基础上并且在每一层内要遵守一定的通信规则
分层的好处
各层次之间相互独立
高层不需要了解低层的工作机制,技术细节等只需要知道通过接口提供哪些服务即可
较强的灵活性
想要一开始就考虑的天衣无缝是极难的进行层次划分之后,当某个层次的技术发生变化,不会影响其他层次
有利于标准化
对每一层的功能和服务目标明确
3. 网络体系结构
层次 和 协议 的集合构成了网络的体系结构
层次是指分几层,比如说 OSI 分为 7 层,TCP/IP 4层协议是指每层都遵守的规则
体系结构研究的是网络系统各部分的组成及其相互关系
为了解决不同厂家之间的通信障碍,制定了全世界统一的网络体系结构标准
典型的层次化体系结构有
OSI 参考模型TCP/IP 参考模型
二. OSI 参考模型
1. OSI 的起源
1984年,国家标准组织 ISO吸取了 IBM公司的SNA以及其他厂商的网络体系结构,提出了 开放系统互联 参考模型 ,简称 OSI模型开放
是指只要各个厂商遵守了 OSI 这套标准,生产的设备网络都可以 互联互通
2. OSI 参考模型各层的功能
OSI 参考模型采用分层结构化技术,将整个网络的通信功能分为 7 层
主机包含这七层
主机实现的是资源子网的功能
主机的网卡实现
物理层,数据链路层
主机的操作系统实现
网络层 传输层 会话层 表示层 应用层
在通信子网里边,结点是路由器
通信子网由路由器连接
路由器实现
物理层,数据链路层,网络层
OSI 模型的传递过程
各层数据不是直接从一端的第N层直接送到另一段的对应层,自上而下逐层传递第N层 接收 第 N+1层的协议数据单元(PDU),按第 N层协议封装,构成 第N层PDU再通过层间接口传递给 第N-1层…最后数据链路层(数据帧)传递给最底层的物理层实通信
在物理层的两个断点进行物理通信
结点到结点层
物理层 数据链路层 网络层
端到端层
传输层 会话层 表示层 应用层
举个例子
比如说 使用谷歌浏览器要浏览一个网页,谷歌是一个进程浏览网页使用的是应用层的数据,将向主机B发送请求的信息用一个HTTP封装封装好之后经过表示层,会话层到了传输层之后,可以使用TCP协议封装成报文段格式到网络层将TCP的报文封装到 IP分组IP分组在数据链路层在网卡位置 封装成帧物理层通过网卡经过比特流的传输到达 主机B的物理层主机B的 数据链路层 将帧的首部尾部找出来去掉,得到IP分组提交给网络层逐次向上传递,最终达到应用层,主机B返回响应的信息
物理层
实现比特流传输,实现信号编码功能规定 数据终端设备DTE 与 数据通信设备DCE 的接口特性
比如我们使用计算机上网DTE为计算机DCE为调制解调器
包括四个方面
机械(什么形状多大尺寸)电气(用多大的电压表示)功能(物理接口的用途)规程(全过程的合法顺序)
数据链路层
以 帧 为单位的数据块进行传递可以进行差错控制,连接管理
网络层
数据转发和路由流量控制,寻址(IP地址)
传输层
端到端通信(进程-进程)
我用qq和你聊天,这其实是两个进程之间的通信
复用和解复用
会话层
用户与用户的连接,在两台计算机之间建立 管理和终止通信完成对话已被应用层覆盖
表示层
处理应用实体之间的语法,解决格式和数据表示的差异为应用层提供一个一致的数据格式也被应用层覆盖了
应用层
提供给用户网络服务接口(各种应用软件等)
3. OSI 参考模型有关的术语
OSI 参考模型每一层真正的功能其实是为上一层提供服务
例如 N层的实体为(N+1)层的实体提供服务N层的服务则需要使用(N-1)层及更低层提供的功能服务
1. 数据单元
数据单元
在层的实体之间传送的比特组
协议数据单元PDU
在对等层之间传送数据单元是按照本层协议进行的物理层:比特流数据链路层:帧网络层:分组,包传输层:报文段应用层:报文
PDU 是协议数据单元,SDU是服务数据单元PCI是协议控制信息 通常作为PDU的首部(N+1)PDU在越过N+1和N的边界之后变换为 N-SDU(N层把(N+1)-PDU看成为 N-SDU)N层在 N-SDU上加上 N-PCI,则成为 N-PDU(N+1)-PDU 与 N-PDU 之间并非一 一对应的关系如果N层觉得有必要,可以把 (N+1)-PDU拆成几个单位,加上PCI之后称为多个N-PDU或者把多个(N+1)-PDU连接起来,形成一个N-PDU到达目的站的N-PDU,在送往(N+1)层之前要把N-PCI去掉在层间通信中PCI相当于报头,即首部在源点逐层增加新的PCI,到达目的地之后则逐层去掉使得信息原来的结构得以恢复
2. 服务访问点
相邻层间的服务是通过其接口面上的 服务访问点 SAP 进行的N层SAP就是(N+1)层可以访问N层的地方,每个SAP都有唯一的一个地址
3. 服务原语
第N层向 N+1层提供服务,或者第 (N+1)层请求N层提供服务,都是使用一组原语
OSI 参考模型的原语有4类
Request 请求
用户实体请求服务做某种工作
Indication 指示
用户实体被告知某件事发生
Response 响应
用户实体表示对某件事的响应
Confirm 确认
用户实体收到关于它的请求的答复
系统A中 N+1层用户 发出请求原语,调用本系统 N服务提供者的一些程序于是N服务提供者 向系统B N+1用户 发送一个 N-PDU当系统B的 N服务提供者 收到这 N-PDU之后,向本系统 N+1用户 发出指示原语说明本系统的 N+1用户需要调用一些程序,系统B的 N+1用户发出一个响应原语N层协议产生一个PDU,传送到系统A的N层系统A的 N服务提供者发出正式原语,表示在服务端已经完成了由请求原语调用的程序
4. 面向连接和无连接
面向连接服务
具有3个过程
请求建立连接
双方同意之后,它们之间的通信链路就建立了起来
传输数据
以分组为单位按序传送,不标明地址
拆除链路
传送结束之后,拆除链路
面向连接的服务又称为 虚电路如果接收方收到数据之后予以确认,就是可靠传输,反之为不可靠传输方式
如果A发了个数据包,经过了往返时间还没收到B的确认(可靠传输),A就认为在传输过程中出错了,会重发不要求确认为不可靠传输
典型的电话系统,TCP
无连接服务
没有建立和拆除链路的过程也称为数据报服务特点
每个分组独立选择路径无序,要求携带地址接收方需要重组分组
UDP
三. TCP/IP 的产生
1. TCP/IP的产生
1970年,网络控制协议 NCP 产生1974年,传输控制协议 TCP 详细说明正式发表1978年,TCP正式变为 TCP/IP
TCP 负责可靠传输IP 负责寻址转发
1983年,NCP停用,TCP/IP作为互联网标准协议
2. TCP/IP参考模型及功能介绍
TCP/IP 参考模型一共分为4层,通常每一层的数据包采用不同的名称
应用层
常见的应用大多在这一层,用户通过应用层来使用Internet提供的各种服务TCP/IP 应用层基本的协议主要是以下几种
远程登陆协议 (TELNET)文件传输协议(FTP)简单邮件传输协议(SMTP)POP3协议(读取邮件)域名服务(DNS)将域名转换为IP地址超文本传输协议(HTTP)简单网络管理协议(SNMP)动态主机配置协议(DHCP)
传输层
负责会话进程之间 建立和维护 端到端(进程到进程)连接,实现网络环境中分布式进程通信
进程与进程之间的连接通过端口号,比如qq与qq聊天而qq不能和迅雷聊天
当应用层的程序照特定协议封装好之后,接下来由传输层的协议负责将这些数据传输到接收方主机对等的应用层程序中,只负责应用层与网络层之间传递信息传输层为运行在不同主机上的进程提供了一种逻辑通信机制
利用此机制不用考虑两者之间的物理连接方式实现收发信息
主要包括两种协议
面向连接(TCP)
提供可靠数据流 传输控制协议(TCP)TCP协议提供比较完善的流量控制与拥塞控制功能
无连接(UDP)
不提供可靠数据流传输 的用户数据报协议(UDP)
网络互联层
网络互联层是整个TCP/IP参考模型的核心
主要解决把数据分组发往目的网络或者主机的问题要为分组的传输选择相应的路径(路由选择)完成分组的转发,提供网络层寻址—IP地址除了完成路由功能,也可以完成不同类型的网络(异构网)互联的任务
本层的协议数据单元是 IP分组,设备是路由器,路由转发,IP分组寻址
IP协议
网络互联层的核心协议,负责定义分组格式和传输不可靠无连接的数据传送服务协议
还包括其他几个协议
互联网控制报文协议(ICMP)互联网多播组管理协议(IGMP)路由协议 BGP,RIP,OSPF等ARP协议(地址转换协议)由IP地址转换为MAC地址RARP协议(方向地址解析协议)由MAC地址转换为IP地址
网络接口层
这一层未被定义,所以其具体方法随着网络类型的不同而不同允许使用广域网,局域网,城域网的各种协议,只要遵循网络互联层的IP协议即可这一层对应OSI参考模型中的数据链路层和物理层
3. TCP/IP 的传输过程
路由器的网卡实现的是物理层和数据链路层的功能把网络接口层的帧首部去掉得到网络层的数据查网络层的IP分组的目的IP地址根据目的IP地址计算出目的网络号查路由表转发转发的时候又重新封装成一个新的帧这两个帧的首部是不一样的
4. TCP/IP 与 OSI 的区别
相似之处
按照分层的思想进行模块化设计自上而下的协议栈
区别
层次划分不同
OSI 七层,TCP/IP 四层TCP/IP 没有表示层和会话层,将物理层和数据链路层的功能合并为网络接口层
面向连接和面向无连接的通信不同
OSI 在 网络层支持 面向连接和无连接,传输层仅支持面向连接TCP/IP 在网络层仅支持面向无连接,传输层支持两种方式
与具体协议的配合程度
OSI 产生在具体协议发明之前,具有很好的通用性,但没有实际的协议设计经验TCP/IP 是先有TCP,IP这些具体协议的基础之上建立的,对协议配合度很高
四. TCP 和 UDP
1. TCP/IP参考模型中的传输层
传输层的主要功能
为应用进程提供端到端的通信对收到的报文进行差错检测对应用层实现复用与解复用
TCP/IP规定了两种不同的传输层协议
面向连接的传输控制协议(TCP)无连接的用户数据报协议(UDP)
传输层使用协议端口号
简称端口
为了支持运行在不同主机,不同操作系统上的应用进程之间能够互相通信,必须用统一的寻址方法对TCP/IP 体系的应用进程进行标识
TCP/IP中,通过 IP地址+端口号来标识端点
IP地址用于标识网络中的主机端口号标识主机中的哪一个服务或者应用进程
端口号是一个 16位的二进制整数,根据端口号大小可分为
熟知端口
0~1023FTP 21端口SMTP 25端口HTTP 80端口
注册端口
1024~49151必须在LANA登记,防止重复
客户端口
49152~65535留给客户进程选择暂时使用
无连接与面向连接
无连接(UDP)
指数据传输之前不用进行信息交换(握手)直接构造数据分组,发送出去
面向连接(TCP)
在数据传输之前,交换一些控制信息建立连接,然后再传输数据,数据传输结束之后,还需要拆除连接
2. UDP
UDP是一种无连接的传输层协议
数据报格式
UDP首部
一共8个字节,开销小,
源端口号:2个字节,16个比特
目的端口号:2个字节,16个比特
长度:包括首部和数据部分在内的总字节数
校验和:UDP通过这个检测数据是否安全
发送方通过源端口发送出去
接收方通过目的端口接收
UDP分别使用两个字节存放源端口号和目的端口号
有效范围是 0~65535
给网络层向下传递,UDP是传输层的作为数据部分,加上IP首部形成IP分组
接着往数据链路层传递,IP分组作为数据部分,加上帧首部和尾部形成帧
往物理层传递形成比特流传输出去
UDP的工作机制
UDP是一个无连接协议,传输数据之前不建立连接一台服务机可以同时向多台客户机传输相同的信息UDP数据报首部很短,只有8个字节,效率高没有拥塞控制算法UDP使用最大能力交付,不保证可靠交付UDP是面向报文的,对报文不拆分,不合并适用于实时性要求高的场合
3. TCP
传输控制协议 TCP
是一种面向连接的,可靠的,基于字节流的传输层通信协议TCP 位于网络互连层之上,应用层之下由于 IP 不提供可靠的通信服务,因此主机之间要实现可靠的数据传输,需要使用TCP的传输控制
传输过程
应用层向传输层发送数据流然后 TCP 把数据流分成适当大小的报文段(长度受数据链路层的最大传输单元MTU限制)之后,TCP把结果数据报传给网络互联层的IP,由它传送给接收端的TCPTCP为了保证数据报不丢失,会给每一个数据报一个序号同时序号也保证接收端的按序接收接收端对成功收到的数据发回一个确认(ACK)如果发送端在返还时间(RTT)内没有收到确认,则会认为已丢失,会被重传
TCP数据报首部的结构
源端口和目的端口
各占2个字节(16个比特)
端口是传输层和应用层的服务接口
传输层的复用和分用功能都要通过端口才能实现
序号和确认序号字段
序号
4个字节(32个比特)
TCP连接中传送的数据流中的每一个字节对编上一个序号
序号字段的值是指本报文段所发送数据段的第一个字节的序号
此数据段中的序号为 10
确认序号
4个字节(32个比特)
是期望收到对方下一个报文段的数据的第一个字节的序号
如上数据段中的确认序号是 89
首部长度字段
占4个比特指出TCP段的首部长度数据偏移以4个字节为单位
URG 紧急比特
当URG为1时,表明紧急指针字段有效
它告诉系统此报文段有紧急数据,需要尽快传送
占1个比特
ACK 确认比特
只有当ACK=1时,确认序号字段才有效占1个比特
PSH 推送比特
TCP收到PSH=1时,尽快交付接收应用程序不再等待缓存填满再向上交付
RST 复位比特
当RST=1的时候,表示TCP连接中出现严重差错必须释放连接,然后重新建立传送连接
SYN 同步比特
SYN=1,表明这是一个连接请求或者接受请求(三次握手中使用)一个连接建立的过程
FIN 终止比特
用来释放一个连接当FIN=1时,说明此报文段发送端的数据已经发送完毕,请求释放传输连接在Internet中,是一个全双工的通信如果A没有数据发送给B了,A请求释放连接但是可能B还有数据发送给A,此时A只接收,不发送的状态反之,B处于只接收,不发送的状态这是一个往返的过程四次握手
窗口字段
占16个比特用来控制对方发送的数据量,单位为字节实现流量控制,防止拥塞发生
检验和字段
占16个比特
检验首部和数据这两部分
紧急指针字段
16个比特
紧急数据放在数据部分的开始
紧急指针指出本报文段中紧急数据有多少个字段
选项字段
占24个比特
规定了最大报文段长度MSS
告诉对方TCP:我的缓存所能接收的报文段的数据字段最大长度为MSS个字节
不包含TCP首部
填充字段
一行必须是4的整数倍如果不够用0填充凑足4个字节
4. 建立连接与拆除连接
TCP三次握手过程
李白的TCP向李信发出 连接请求报文段,其首部中的同步位 SYN=1(建立连接请求),并初始 序号seq=x,表明传送数据的第一个字节的序号是x。(第一次握手)李信的TCP收到连接请求报文段后,如果同意,则发回确认,李信在 确认报文段中应该使SYN=1(同意连接请求),ACK=1(确认序号字段有效),确认序号ack-seq=x+1(它已经收到x了,希望收到下一个数据段x+1),自己选择的初始序号seq=y(第二次握手)李白收到此 确认报文段后给李信发出确认,其中ACK=1(确认序号字段有效),SYN=0(一个往返已经建立起连接了所以为0),序号seq=x+1(因为李信希望收到这个值),确认序号ack_seq=y+1(李白希望收到下一次数据段为y+1)(第三次握手)
TCP四次挥手过程
假设拆除连接由李白发起,则李白向李信发送 释放连接控制报文段,并停止发送数据,终止位FIN=1(此报文段数据发送完毕,请求释放连接),初始化序号seq=u李信收到李白发送的 报文段之后,立即向李白发送 确认报文段,确认位ACK=1(确认序号字段有效),确认序号ack_seq=u+1(已经收到u了,希望收到下一个数据段为u+1),序号seq=v,此刻李白那条链路已经拆除如果李信已经没有要向李白发送的数据,则李信向李白发送 释放连接控制报文段,终止位FIN=1(请求释放连接),seq=w,ack_seq=u+1(确认序号仍然是u+1)李白收到李信的 释放连接控制报文段后,向李信发送确认报文段,ACK=1(确认序号有效),序号seq=u+1(收到了这个字段),确认序号ack-seq=w+1(希望收到下一个数据段为w+1)此时如果李信收到确认报文段之后立刻释放连接
5. 流量与拥塞控制
流量控制
流量控制的目的是使发送端的数据发送速率不要太快确保接收端来得及接收,即接收端的数据缓存不会溢出通过 窗口机制 进行流量控制接收端在给发送端发送数据段(ACK=1)或单纯确认段时通告剩余接收缓存空间作为接收窗口发送端发送数据时(TCP是全双工的),不超过最近一次接收端通告的接收窗口大小确保接收端不会缓存溢出
拥塞控制
TCP的拥塞控制机制也是从端到端的角度推测 网络是否发生拥塞如果推断发生了拥塞,立即将数据发送速率降下来,缓解网络拥塞通过 窗口机制 进行
通过调节窗口的大小实现对数据发送速率的调整
拥塞窗口cwnd
单位为字节cwnd的大小取决于网络的拥塞程度只要网络没有出现拥塞,就可以增大拥塞窗口,以便更多数据发送出去相当于提高发送速率一旦发生拥塞,把cwnd减小一些,缓解网络的拥塞
发送端判断发生拥塞的依据
发送端设置一个重传计时器RTO,对于一个发送出去的数据报文段如果在RTO重传计时器到期后,还没有收到来自接收端的确认,则视为发生了拥塞
拥塞控制算法
慢启动拥塞避免快速重传快速恢复
慢启动
作用在TCP数据传输的开始阶段,避免引起网络拥塞TCP逐渐增大拥塞窗口,通常在发送数据报文段时先将拥塞窗口cwnd设置为一个TCP最大段长度MSS的值每收到一个数据报文段的确认后,拥塞窗口cwnd就增加一个MSS的数值逐渐增大发送端的拥塞窗口使数据注入网络的速率比较合理加性增加
定义一个往返时间RTT,在慢启动阶段,每经过一个RTT往返时间,拥塞窗口cwnd的值就加倍为了防止拥塞窗口增长过快引起拥塞,TCP需要设置一个慢启动阈值ssthresh当拥塞窗口的值增加到阈值ssthresh时,减缓拥塞窗口的增长速度每经过一个往返时间,拥塞窗口的值就加1(单位MSS)
拥塞避免算法
通常拥塞窗口的初值被设置为1,慢启动阈值的初值被设置为16当判断发生了拥塞时,发送端首先将 慢启动阈值 变为发生超时时拥塞窗口值的一半同时将拥塞窗口的值设置为1,重新执行慢启动算法乘性减小
当网络频繁出现拥塞时,慢启动阈值下降的很快大大减少注入网络中的数据报文段TCP中的加性增加和乘性减小算法合起来称为AIMD算法
快速重传算法
基本思想
接收端每收到一个失序的数据报文段就立即发出重复确认以便于及时通知发送端有丢包的情况发生
例子
接收端依次收到发送端发出的1号和2号数据报文段,并对这两个报文段发送确认没有按序收到3号的数据报文段,而是收到了4号此时立即向发送端发送一个2号数据报文段的确认,称为重复确认同理如果继续收到了5号,6号的报文段,接收端仍然向发送端发送2号报文段的重复确认此时发送端收到多个2号报文段的确认,则认为3号报文段丢失了立即重传一个3号报文段,不需要等待重传计时器
规定
如果收到某个数据报文段的3个重复确认,则立即重传下一个数据报文段
快速恢复
配合快速重传使用
基本思想
当发送端连续收到3个重复确认时,就将慢启动阈值减半,预防网络拥塞的发送并将拥塞窗口的值置为减半后的慢启动阈值,然后开始执行拥塞避免算法使拥塞窗口缓慢的加性增大
同时将拥塞窗口的值设置为1,重新执行慢启动算法
乘性减小
当网络频繁出现拥塞时,慢启动阈值下降的很快大大减少注入网络中的数据报文段TCP中的加性增加和乘性减小算法合起来称为AIMD算法
快速重传算法
基本思想
接收端每收到一个失序的数据报文段就立即发出重复确认以便于及时通知发送端有丢包的情况发生
例子
接收端依次收到发送端发出的1号和2号数据报文段,并对这两个报文段发送确认没有按序收到3号的数据报文段,而是收到了4号此时立即向发送端发送一个2号数据报文段的确认,称为重复确认同理如果继续收到了5号,6号的报文段,接收端仍然向发送端发送2号报文段的重复确认此时发送端收到多个2号报文段的确认,则认为3号报文段丢失了立即重传一个3号报文段,不需要等待重传计时器
规定
如果收到某个数据报文段的3个重复确认,则立即重传下一个数据报文段
快速恢复
配合快速重传使用
基本思想
当发送端连续收到3个重复确认时,就将慢启动阈值减半,预防网络拥塞的发生并将拥塞窗口的值置为减半后的慢启动阈值,然后开始执行拥塞避免算法使拥塞窗口缓慢的加性增大