TCP/IP

  TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电子设备如何介入因特网,以及数据如何在它们之间传输的标准。
  TCP/IP不是一个协议,而是一个协议族的统称,里面包括了IP协议、ICMP协议、TCP协议、以及http、ftp、pop3协议等。网络中的计算机都采用这套协议族进行互联。
  网络协议栈架构
  提到网络协议栈结构,最著名的当属OSI七层模型,但是TCP/IP协议族的结构则稍有不同,它们之间的层次结构有如图对应关系:
  这里写图片描述
  可见TCP/IP被分为4层,每层承担的任务不一样,各层的协议的工作方式也不一样,每层封装上层数据的方式也不一样。
  (1)应用层:应用程序通过这一层访问网络,常见FTP、HTTP、DNS和TELNET协议;
  (2)传输层:TCP协议和UDP协议;
  (3)网络层:IP协议、ARP、RARP协议、ICMP协议等;
  (4)网络接口层:是TCP/IP协议的基层,负责数据帧的发送和接收。
  这里写图片描述
  IP地址
  网络上每一个节点都必须有一个独立的IP地址,通常使用的IP地址是一个32bit的数字,被分成4组,例如,255.255.255.255就是一个IP地址。有了IP地址,用户的计算机就可以发现并连接互联网中的另一台计算机。
  在Linux系统中,可以用这样一条命令查看自己的IP地址:ifconfig -a
  这里写图片描述
  域名
  用12位数字组成的IP地址很难记忆,在实际应用时,用户一般不需要记住IP地址,互联网给每个IP地址起了一个别名,习惯上称为域名。
  域名与计算机的IP地址相对应,并把这种对应关系存储在域名服务系统DNS(Domain Name System)中,这样用户只需要记住域名就可以与指定的计算机进行通信了。
  常见的域名包括com、net和org三种顶级域名后缀,除此之外每个国家还有自己国家专属的域名后缀(比如我国的域名后缀为cn)。目前经常使用的域名诸如百度(www.baidu.com)、Linux组织(www.lwn.net)等等。
  我们可以使用命令“nslookup”或者“ping”来查看域名相对应的IP地址,由于实验楼网络限制,我们可以使用ping.git.shiyanlou.com查看。
  这里写图片描述
  MAC地址
  MAC(Media Access Control)地址,或称为物理地址、硬件地址,用来定义互联网中设备的位置。
  在TCP/IP层次模型中,网络层管理IP地址,链路层则负责MAC地址。因此每个网络位置会有一个专属于它的IP地址,而每个主机会有一个专属于它的MAC地址。
  端口号
  IP地址是用来发现和查找网络中的地址的,但是不同程序如何互相通信呢,这就需要端口号来识别了。如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是端口采用16比特的端口号标识,一个IP地址的端口可以有65536(2^16)个之多。
  服务器的默认程序一般都是通过人们所熟识的端口号来识别的。例如,对于每个TCP/IP实现来说,SMTP(简单邮件传输协议)服务器的TCP端口号都是25,FTP(文件传输协议)服务器的TCP端口号都是21,TFTP(简单文件传输协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都是众所周知的1-1023之间的端口号。这些人们所熟知的端口号由Internet端口号分配机构来管理。
  封装和应用
  封装:当应用程序发送数据的时候,数据在协议层次当中从顶向下通过每一层,每一层都会对数据增加一些首部或尾部的信息,这样的信息称之为协议数据单元(Protocol Data Unit,缩写PDU),在分层协议系统里,在指定的协议层上传送的数据单元,包含了该层的协议控制信息和用户信息,如图
  *物理层(一层)PDU指数据位(Bit)
  *数据链路层(二层)PDU指数据帧(Frame)
  *网络层(三层)PDU指数据包(Packet)
  *传输层(四层)PDU指数据段(Segment)
  *第五层以上为数据(data)
  这里写图片描述
  分用:当主机收到一个数据帧时,数据就从协议层底向上升,通过每一层时,检查并去掉对应层次的报文首部或尾部,与封装过程正好相反。
  RFC
  RFC(Request for Comment)文档是所有以太网协议的正式标准,并在其官网上面公布,由IETF标准协会定制。大量的RFC并不是正式的标准,出版的目的只是为了提供信息。RFC的篇幅不一。从几页到几百页不等。每一种协议都用一个数字来表示。如RFC 3720是iSCSI协议的标准,数字越大说是RFC的内容越新或者对用协议(标准)出现的比较晚。
  所有的RFC文档都可以从网上找到,其官网为IETF。在网站上可以通过分类以及搜索快速找到目标协议的RFC文档。目前在IETF网站上面的RFC文档有数千个,但是我们不需要全部掌握,在工作或学习中如果遇到可以找到对应的解释,理论与实际结合会有更好的效果。单纯阅读RFC的效果一般。

链路层介绍
一.简介
  网络层协议的数据单元是IP数据报,而数据链路层的工作就是把网络层交下来的IP数据报封装成帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:
  1.将数据封装为帧,帧是数据链路层的传送单位。
  2.控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配。
  3.在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
  数据帧的结构是这样的:
  这里写图片描述
  二.控制帧的传输
  1.差错控制
  通信系统必须具备发现差错的能力,并采取措施纠正,使差错控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。
  反馈重发
  接收方通过对差错编发(奇偶校验或CRC码)的检查,可以判定一帧的传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。这就要求接受方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方据此作出是否需要重新发送的决定。发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重发直到正确为止。
  计时器
  如果某一帧发送出现问题,一直发送不成功,为了避免传输过程停滞不前,通常引入计时器来限定接收方发回反馈信息的时间间隔。当发送方发送一帧的同时也启动计时器,若在限定时间内未能收到接收方的反馈信息,即计时器超时,则可认为传出的帧已出错或丢失,就要重新发送。
  序号
  由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的情况。为了防止这种情况,可以采用发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是重发的帧,以此来确定要不要将接收到的帧递交给网络层。
  流量控制
  由于收发双方各自使用的设备工作速率和缓冲存储空间的差异,可能出现发送方的发送功能大于接收方接收能力的现象,此时若不对发送方的发送速率做适当的控制,前面来不及接收的帧将被后面不断发送来的帧“淹没”,从而造成帧的丢失而出错。
  
  三.以太网
  以太网(Ether-net)是指 DEC 公司、Intel 公司和 Xerox 公司在 1982 年联合公布的一个标准,这个标准里面使用了一种称作 CSMA/CD 的接入方法。而 IEEE802 提供的标准集 802.3(还有一部分定义到了 802.2 中)也提供了一个 CSMA/CD 的标准。
  这两个标准稍有不同,因此链路层数据帧的的封装格式也有所不同(数据帧中的地址为 MAC 地址):
这里写图片描述
四.PPP(点对点协议)
PPP(点到点协议)是为在同等单元之间传输数据设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据。设计目的主要是用来通过 拨号或专线 方式建立 点对点 连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。

点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP/IP 协议集中它是一种用来同步调制连接的数据链路层协议。
五.SLIP 与 PPP
1.SLIP 协议
  SLIP 的全称为 Serial Line IP(串行线路 IP)。它是一种对 IP 数据报进行封装的简单形式。 SLIP 协议规定的帧格式规则:
  IP 数据报以一个称作 END(0xc0)的特殊字符结束。同时为了防止数据报传输之前的线路噪音被误认为是数据报内容,在数据报开始处添加一个 END 字符;
  如果 IP 数据报中含有 END 字符,就连续传输 0xdb 和 0xdc 来取代它。0xdb 是 SLIP 的 ESC 字符,但它的值与 ASCⅡ码中的 ESC(0x1b)不同;

  如果 IP 数据报中含有 ESC 字符,就连续传输 0xdb 和 0xdd 来取代它。
  这里写图片描述
  
SLIP 的缺陷:
  每一端必须知道对端的 IP 地址,没有办法把本端 IP 地址传递给对端;
  数据帧中无类型字段,当一条串行线路使用 SLIP 时则不能使用其他协议;
  SLIP 数据帧中无 checksum,只能依靠上层协议来发现和纠正错误。

2.PPP 协议
  PPP 协议修改了 SLIP 协议中的缺陷,包括以下三个部分:

PPP 封装 IP 数据报既支持数据为 8 位和无奇偶校验的异步模式,又支持面向比特的同步链接;

通过 LCP(链路控制协议)允许双方进行协商;

通过 NCP(网络控制协议)允许双方在网络层上进行协商。

PPP 协议的字符规则与 SLIP 有所不同:

PPP 帧以标志字符 0x7e 开始和结束,紧接着是一个值为 0xff 的地址字节,然后是一个值为 0x03 的控制字节;

由于标志字符是 0x7e,当它出现在信息字段中时,需要连续传送 0x7d 和 0x5e 来替代它;

当在信息字段中遇到 0x7d 时,需要连续传送 0x7d 和 0x5d 来替代它。

默认情况下,如果字符的值小于 0x20,需要连续传送 0x7d 和 0x21 来替代它。

PPP 与 SLIP 相比具有下列优点:
PPP 支持在单根串行线路上运行多种网络层协议;
每一帧都有 CRC 校验;
通信双方可以用 NCP 进行 IP 地址的动态协商;
可以类似于 CSLIP 对 TCP 和 IP 首部进行压缩;
LCP 可以对多个数据链路选项进行设置。

六、MTU

原文地址:https://www.cnblogs.com/Mayny/p/9374185.html