网络概念

什么是网络
  是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

资源共享的功能

1、数据和应用程序
2、资源
3、网络存储
4、备份设备
网络管理

常见的网络组件

路由器、交换机、服务器、普通PC机、网卡、网线

网络管理

网络应用程序

1、web浏览器
  (Chrome、IE、Firefox等)
2、即时消息
  (QQ、微信、钉钉等)
3、电子邮件
  (Outlook、foxmail等)
4、协作
  (视频会议、VNC、Netmeeting、WebEx 等)
5、web网络服务
  (apache,nginx,IIS)
6、文件网络服务
  (ftp,nfs,samba)
7、数据库服务
  (MySQL,MariaDB, MongoDB)
8、中间件服务
  (Tomcat,JBoss等)
9、安全服务
  (Netfilter)

用户应用程序对网络的影响

批处理应用程序
  FTP、TFTP、库存更新
  无需直接人工交互
  带宽很重要,但并非关键性因素
交互式应用程序
  库存查询、数据库更新
  人机交互
  因为用户需等待响应,所以响应时间很重要,但并非关键性因素,除非要等待很长时间
实时应用程序
  VoIP、视频
  人与人的交互
  端到端的延时至关重要

网络的特性

1、速度
2、成本
3、安全性
4、可用性
5、可扩展性
6、可靠性
7、拓扑

物理拓扑分类

总线型拓扑
    所有的网络设备都是连接到公共的干道上
  特性:
    所有的网络设备串到干道上,其中一台机器在这个范围类传输数据,只要是在这个干道上的成员都能收到
  缺点
    每次只能走一路信号,如果有两台机器在其中传输数据时,务必会起冲突,数据造成破坏,双方都会造成通信失败,只能重新传输,连接的机器越多,性能越差,
星型拓扑
  通过中心点传输
  单一故障点
环形拓扑
  信号绕环传输
  单一故障点
双环拓扑
  有容错能力
  信号沿相反方向传输
  比单环的复原能力更强
  典型代表:FDDI、FDDI适合城市
全网状拓扑
  容错能力强
  实施成本高
  一般用于电信、移动、联通的骨干网

主机通信

旧模型
  专有产品、每个公司的设备不通用,只有自己公司的设备能相互连接使用、由一个厂商控制应用程序和嵌入的软件
基于标准的模型
   由国际标准组织定义的
   多厂商软件
   分层方法

网络模型分层

网络管理

降低复杂性
标准化接口
简化模块化设计
确保技术的互操作性
加快发展速度
简化教学

OSI模型的七层结构

7、应用层: 网络进程访问应用层
    为应用程序进程提供网络服务
    提供用户身份验证
6、表示层: 数据表示
     确保接受系统可以读出该数据
     格式化数据
     构建数据
     协商用于应用成的数据传输语法、提供加密
5、会话层:主机间通信
     建立、管理终止在应用程序之间的会话
4、传输层:传输问题
     确保数据传输的可靠性
     建立、维护和终止虚拟电路
     通过错误检测和恢复
     信息流控来保障可靠性
3、网络层:数据传输
     路由数据包
     选择传递数据的最佳路径
     支持逻辑寻址和路径选择
2、数据链路层: 访问介质
     定义如何格式化数据以便进行传输以及如何控制对网络的访问
     支持错误检测
1、物理层:二进制传输
     为启动、维护以及关闭物理链路定义了电气规范、机械规范、过程规范和功能规范
网络管理

数据封装、数据解封

网络管理
网络管理

PDU

1、PDU: Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位
2、物理层的PDU是数据位bit
3、数据链路层的PDU是数据帧frame
4、网络层的PDU是数据包packet
5、传输层的PDU是数据段segment
6、其他更高层次的PDU是消息message

三种通讯模式

1、单播
网络管理
2、广播
网络管理
3、组播
网络管理

LAN:局域网local area network

1、所谓的局域网不是指大小,也不是指单纯两台主机连接距离的问题,主要的是关注它采用什么样的技术,
2、局域网是基于广播方式进行通信
3、广域网是基于点对点方式进行通信
4、广域网和局域网是一对概念

LAN 标准
网络管理

以太网帧结构
网络管理

数据链接层
网络管理

MAC地址
网络管理
网络管理

冲突检测的载波侦听多路访问CSMA/CD

CSMA/CD:冲突检测的载波侦听多路访问
  所有设备连接到公共的干道上,如果一台机器要发送数据,先听一听网络中有没有人当前在发送数据,当没人传时,刚要传,另外一个也发现目前网络中也没人传输,它也开始传输,然后当它两一起传的时候这个时候就发生冲突了,后退算法,时间双倍,
网络管理

Hub集线器

1、Hub:多端口中继器
2、Hub并不记忆该信息包是由哪个MAC地址发出,哪个MAC地址在Hub的哪个端口
3、Hub的特点:
   共享带宽
   半双工
4、工作层次:
   物理层

以太网桥

交换式以太网的优势
   扩展了网络带宽
   分割了网络冲突域,使网络冲突被限制在最小的范围内
   交换机作为更加智能的交换设备,能够提供更多用户所要求的功能:优先级、虚拟网、远程检测……

网桥的工作原理

1、以太网桥监听数据帧中源MAC地址,学习MAC,建立MAC表
2、对于未知MAC地址,网桥将转发到除接收该帧的端口之外的所有端口
3、当网桥接到一个数据帧时,如果该帧的目的位于接收端口所在网段上,它就过滤掉该数据帧;如果目的MAC地址在位于另外一个端口,网桥就将该帧转发到该端口
4、当网桥接到广播帧时候,它立即转发到除接收端口之外的所有其他端口
5、工作层次:数据链路层
网络管理
网络管理
网络管理
网络管理
网络管理

Hub和网桥

1、集线器属于OSI的第一层物理层设备,而网桥属于OSI的第二层数据链路层设备
2、从工作方式来看,集线器是一种广播模式,所有端口在一个冲突域里面。网桥的可以通过端口隔离冲突
3、Hub是所有共享总线和共享带宽。网桥每个端口占一个带宽
网络管理

路由器

1、为了实现路由,路由器需要做下列事情
2、分隔广播域
3、选择路由表中到达目标最好的路径
4、维护和检查路由信息
5、连接广域网
路由器靠什么来选择最佳路径的呢
   把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。路由的实现依靠路由器中的路由表来完成
路由表:
   目标网络
   接口:本路由器的出口
   网关:下一个路由邻近本路由器接口IP
   metric:值越小,优先级越高

VLAN:虚拟局域网

在一个交换机上,把不同的接口,逻辑上拆分成不同的组成部分
分隔广播域、安全、灵活管理
VLAN = 广播域= 逻辑网络(Subnet)

TCP/IP协议栈

Transmission Control Protocol
  /Internet Protocol
  传输控制协议/因特网互联协议
最早发源于美国国防部(缩写为DoD)的因特网的前身ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
共定义了四层、和ISO参考模型的分层有对应关系
网络管理
网络管理

可靠性vs.高效性
网络管理

TCP特性

   工作在传输层
   面向连接协议
   全双工协议
   半关闭
   错误检查
   将数据打包成段,排序
   确认机制
   数据恢复,重传
   流量控制,滑动窗口
   拥塞控制,慢启动和拥塞避免算法

TCP包头
网络管理

   源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个
   序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0 开始
   确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号
   数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出TCP 报文段的数据起始处距离TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
   URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
   ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
   PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
   RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
   SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
   FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
   窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量
   校验和:提供额外的可靠性
   紧急指针:标记紧急数据在数据字段中的位置
   选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
   常见选项:
     最大报文段长度:MaxiumSegment Size,MSS
      窗口扩大:Windows Scaling
      时间戳:Timestamps

TCP包头选项

1、最大报文段长度MSS(Maximum Segment Size)
  指明自己期望对方发送TCP报文段时那个数据字段的长度。比如:1460字节。数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,网络的利用率就不会超过1/41。若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。因此MSS应尽可能大,只要在IP层传输时不需要再分片就行。在连接建立过程中,双方都把自己能够支持的MSS写入这一字段。MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中
   MTU和MSS值的关系:MTU=MSS+IP Header+TCPHeader
   通信双方最终的MSS值=较小MTU-IP Header-TCP Header
2、窗口扩大
  为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项
3、时间戳
  可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文

TCP协议PORT

传输层通过port号,确定应用层协议
Port number:
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
   0-65535
udp:User Datagram Protocol,无连接的协议
   0-65535
IANA:互联网数字分配机构(负责域名,数字资源,协议分配)
   0-1023:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
   1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,1433/tcp(SqlServer),1521/tcp(oracle),
3306/tcp(mysql),11211/tcp/udp(memcached)
  49152-65535:动态端口或私有端口,客户端程序随机使用的端口
   其范围的定义:/proc/sys/net/ipv4/ip_local_port_range

[root@centos7 ~]# cat /proc/sys/net/ipv4/ip_local_port_range              
32768   60999

TCP三次握手、TCP四次挥手

网络管理
网络管理

有限状态机

客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时等待接收服务端的报文,该报文会有三种可能:
   只有服务端的ACK
   只有服务端的FIN
   基于服务端的ACK,又有FIN
1、只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间, RFC 1122标准的建议值是2min).客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失
2、只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服务端的ACK时,进入TIME_WAIT状态
3、同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态
网络管理

客户端的典型状态转移

 客户端通过connect系统调用主动与服务器建立连接connect系统调用首先给服务器发送一个同步报文段,使连接转移到SYN_SENT状态。
 此后connect系统调用可能因为如下两个原因失败返回:
   1、如果connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME_WAIT状态的连接所占用(见后文),则服务器将给客户端发送一个复位报文段,connect调用失败。
   2、如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect调用失败。
connect调用失败将使连接立即返回到初始的CLOSED状态。如果客户端成功收到服务器的同步报文段和确认,则connect调用成功返回,连接转移至ESTABLISHED状态。
 当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1状态。若此时客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭连接(发送结束报文段),则客户端将给予确认并进入TIME_WAIT状态
 客户端从FIN_WAIT_1状态可能直接进入TIME_WAIT状态(不经过FIN_WAIT_2状态),前提是处于FIN_WAIT_1状态的服务器直接收到带确认信息的结束报文段(而不是先收到确认报文段,再收到结束报文段)
 处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态。如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在FIN_WAIT_2状态并无益处。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿进程类似)
 Linux为了防止孤儿连接长时间存留在内核中,定义了两个内核参数:
  /proc/sys/net/ipv4/tcp_max_orphans 指定内核能接管的孤儿连接数目
  /proc/sys/net/ipv4/tcp_fin_timeout指定孤儿连接在内核中生存的时间

#指定内核能接管的孤儿连接默认数目
[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_max_orphans 
8192
#指定孤儿连接在内核中生存的默认时间
[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
60

TCP超时重传

1、异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
2、TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略
3、与TCP超时重传相关的两个内核参数:
   /proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3

[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_retries1
3

   /proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)

[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_retries2
15

拥塞控制

  网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。这种情况就叫做拥塞
  TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
   TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
   当前所使用的拥塞控制算法
   /proc/sys/net/ipv4/tcp_congestion_control

[root@centos7 ~]# cat /proc/sys/net/ipv4/tcp_congestion_control
cubic

UDP特性

  1、工作在传输层
  2、提供不可靠的网络访问
  3、非面向连接协议
  4、有限的错误检查
  5、传输性能高
  6、无数据恢复特性
UDP包头
网络管理

Internet 协议特征

  运行于OSI 网络层
  面向无连接的协议
  独立处理数据包
  分层编址
  尽力而为传输
  无数据恢复功能

IP PDU报头
网络管理

1 、版本:占4位,指IP 协议的版本目前的IP协议版本号为4
2 、首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60字节
3、区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用
4、总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535 字节.总长度必须不超过最大传送单元MTU
5、标识:占16位,它是一个计数器,通常,每发送一个报文,该值会加1,也用于数据包分片,在同一个包的若干分片中,该值是相同的
标志(flag):占3位,目前只有后两位有意义:
   DF:Don‘t Fragment,中间的一位,只有当DF=0 时才允许分片
   MF:More Fragment,最高位,MF=1表示后面还有分片。MF=0 表示最后一个分片
6、片偏移:占12位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位
7、生存时间:占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个8 bit字段.推荐的初始值由分配数字RFC 指定,当前值为64.发送ICMP 回显应答时经常把TTL 设为最大值255
8、协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为ICMP 协议, 2表示为IGMP 协议, 6表示为TCP 协议, 17表示为UDP 协议
9、首部检验和:占16位,只检验数据报的首部不检验数据部分.这里不采用CRC 检验码而采用简单的计算方法
10、源地址和目的地址:都各占4字节,分别记录源地址和目的地址


IP PDU报头示例
   片偏移以8个字节为偏移单位,假定MTU=1500
   三个包标识ID都相同,三个包DF都为0,前两个MF=1,最后一个MF=0
网络管理