TCP/IP网络协议基础

时间:2021-08-12 10:32:46

2017年的春天来了,看到大部分公司在春季招聘都偏爱计算机网络,来复习一波做一个小总结!

目录就在上面,请点击阅读!


一、TCP/IP 简介

1.1、背景介绍

TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。 简单的说TCP/IP就是一种在各个计算机间进行链接的手段,但是【注】TCP/IP 不是一个协议,而是一个协议族的统称,里面包括了 IP 协议、ICMP 协议、TCP 协议、以及 http、ftp、pop3 协议等。网络中的计算机都采用这套协议族进行互联。

1.2、网络协议栈架构

祖传osi七层模型和tcp/ip4层模型对性图

TCP/IP网络协议基础

TCP/IP 被分为 4 层,每层承担的任务不一样,各层的协议的工作方式也不一样,每层封装上层数据的方式也不一样:

  • (1)应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议;

  • (2)传输层:TCP 协议和 UDP 协议;

  • (3)网络层:IP 协议,ARP、RARP 协议,ICMP 协议等;

  • (4)网络接口层:是 TCP/IP 协议的基层,负责数据帧的发送和接收。


1.3、封装和分用

封装当应用程序发送数据的时候,数据在协议层次当中从顶向下通过每一层,每一层都会对数据增加一些首部或尾部信息,这样的信息称之为协议数据单元(Protocol Data Unit,缩写为PDU),在分层协议系统里,在指定的协议层上传送的数据单元,包含了该层的协议控制信息和用户信息。如下图所示:

TCP/IP网络协议基础

分用:当主机收到一个数据帧时,数据就从协议层底向上升,通过每一层时,检查并去掉对应层次的报文首部或尾部,与封装过程正好相反。

1.4、RFC

RFC(Request for Comment)文档是所有以太网协议的正式标准,并在其官网上面公布,由 IETF 标准协会制定。大量的 RFC 并不是正式的标准,出版的目的只是为了提供信息。RFC 的篇幅不一,从几页到几百页不等。每一种协议都用一个数字来标识,如 RFC 3720 是 iSCSI 协议的标准,数字越大说是 RFC 的内容越新或者是对应的协议(标准)出现的比较晚。


二、链路层介绍

2.1、简介

TCP/IP网络协议基础

网络层的数据单元是IP数据报,而数据链路层的主要工作就是将IP数据报封装成帧,这一过程就要求数据链路层具有一下几个功能要求

·        将数据封装为帧(frame),帧是数据链路层的传送单位;

·        控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配;

·        在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。

2.2、制帧的传输

2.2.1差错控制

反馈重发

接收方通过对差错编码(奇偶校验码或 CRC)的检查,可以判定一帧在传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。这就要求接受方收完一帧后,向发送方反馈一个接收是否正确的信息,使发送方据此做出是否需要重新发送的决定。发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重发直至正确为止。

计时器

如果某一帧发送出现问题,一直不能发送成功,为了避免传输过程停滞不前,通常引入 计时器 (Timer)来限定接收方发回反馈消息的时间间隔。当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反馈信息,即计时器超时(Timeout),则可认为传出的帧以出错或丢失,就要重新发送。

序号

由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的情况。为了防止这种情况,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是重发的帧,以此来确定要不要将接收到的帧递交给网络层。

2.2.1流量控制

由于收发双方各自使用的设备工作速率和缓冲存储空间的差异,可能出现发送方的发送能力大于接收方接收能力的现象,此时若不对发送方的发送速率做适当的限制,前面来不及接收的帧将被后面不断发送来的帧淹没,从而造成帧的丢失而出错。

由此可见,流量控制实际上是对发送方数据流量的控制,使其发送速率不超过接收方的速率。所以需要一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后再继续发送。这就是流量控制。

2.3、PPP协议

传说中的3P协议:

PPP(点到点协议)是为在同等单元之间传输数据设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据。设计目的主要是用来通过 拨号或专线 方式建立 点对点 连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。

点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP最初设计是为两个对等节点之间的 IP流量传输提供一种封装协议。在 TCP/IP协议集中它是一种用来同步调制连接的数据链路层协议。

 

2.4、SLIP协议和PPP协议

 

2.5、MTU

为了提供足够快的响应时间,以太网和 IEEE802.3对数据帧长度都有限制,其最大值分别为 1500字节和 1492字节,链路层的这个特性称作 MTU ,即 最大传输单元 

为了提供足够快的响应时间,以太网和 IEEE802.3对数据帧长度都有限制,其最大值分别为 1500字节和 1492 字节,链路层的这个特性称作 MTU ,即 最大传输单元 

当网络层传下来一个 IP数据报,并且其长度比链路层的 MTU大,那么网络层就需要对数据报进行分片,使每一片都小于 MTU

MTU 分为接口 MTU和路径MTU:接口 MTU是所指定的接口所允许发送的最大数据长度;路径 MTU指两台通信主机路径中最小的 MTU值。路径 MTU 是不对称的,它在两个方向上不一定一致。

用命令 netstat -in 可以查看网络接口的 MTU:


三、IP网际协议

IP 协议位于网络层,它是 TCP/IP协议族中最为核心的协议,所有的 TCPUDPICMP IGMP 数据都以 IP数据报格式传输。IP协议提供的是 不可靠  无连接 的数据报传送服务。

不可靠unreliable):IP协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP协议会丢弃该数据报。传输的可靠性全由上层协议来提供。

无连接connectionless):IP协议对每个数据报的处理是相互独立的。这也说明, IP数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B可能在 A 到达之前先到达。

3.1、P数据报

TCP/IP网络协议基础

版本号 4位,用于标明 IP版本号,0100表示 IPv40110表示 IPv6。目前常见的是 IPv4

首部长度 4位,表示 IP 报头长度,包括选项字段。

服务类型(TOS) :分别有:最小时延、最大吞吐量、最高可靠性、最小花费 4种服务,如下图所示。4个标识位只能有一个被置为 1

总长度 16位,报头长度加上数据部分长度,便是数据报的总长度。IP数据报最长可达 65535字节。

标识 16位,接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加 1

标志 3位,用于标识数据报是否分片。其中的第 2位是不分段(DF)位。当 DF位被设置为 1时,则不对数据包进行分段处理;第 3位是分段(MF)位,除了最后一个分段的 MF位被设置为 0外,其他的分段的 MF位均设置为 1

偏移 13位,在接收方进行数据报重组时用来标识分片的顺序。

生存时间(TTL) 8位,用于设置数据报可以经过的最多的路由器个数。TTL的初始值由源主机设置(通常为 32 64),每经过一个处理它的路由器,TTL值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。

协议 8位,用来标识是哪个协议向 IP传送数据。ICMP 1IGMP 2TCP 6UDP 17GRE 47ESP 50

首部校验和 :根据 IP首部计算的校验和码。

IP和目的 IP :数据报头还会包含该数据报的发送方 IP和接收方 IP

选项 :是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。

3.2、IP地址划分

A IP地址范围:1.0.0.0---127.255.255.255

B IP地址范围:128.0.0.0---191.255.255.255

C IP地址范围:192.0.0.0---223.255.255.255

3.3、子网划分

TCP/IP网络协议基础

3.4、IP路由选择

如果发送方与接收方直接相连(点对点)或都在一个共享网络上(以太网),那么 IP数据报就能直接送达。而大多数情况则是发送方与接收方通过若干个路由器(router)连接,那么数据报就需要经过若干个路由器的转发才能送达,它是怎么选择一个合适的路径来"送货"的呢?

IP 层在内存中有一个路由表(输入命令 route-n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:

  • 1、搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
  • 2、搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将 IP 该数据报发向该路由器;
  • 3、搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
  • 4、如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
  • 6、如果都失败了,就丢掉这个包;
  • 7、接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
  • 8、如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。

3.5、NAT技术

当你用 ifconfig查看 IP地址时,有时你会发现自己的 IP地址是这样的———192.186.X.X 172.16.X.X
这是 C类网和 B类网的私有地址,这就是俗称的内网 IP。这是因为你的路由器采用了 NAT技术。

NATNetwork Address Translation,网络地址转换)是 1994年提出的。当在专用网内部的一些主机本来已经分配到了内网 IP地址,但现在又想和因特网上的主机通信时,NAT技术将其内网 IP地址转换成全球 IP地址,然后与因特网连接,也就是说,内网的数台主机使用了同一个全球 IP地址在上网。

NAT 技术实现了宽带共享,而且有助于缓解 IP地址空间枯竭的问题。



四、网络层其他协议

网络层同样也存在其他协议,这里给出标题,百度都可以搜索得到所以不再一一阐述

4.4、 ARP地址解析协议

当主机通过数据链路发送数据的时候, IP数据报 会先被封装为一个 数据帧 ,而 MAC地址 会被添加到数据帧的 报头 (链路层介绍时已讲过)。 ARP 便是在这个过程中通过目标主机的 IP地址,查询目标主机的 MAC地址。

4.2、RARP逆向地址解析协议


4.3、ICMP控制报文协议

通信过程中的发生各种问题时,ICMP将问题反馈,通过这些信息,管理者可以对所发生的问题作出诊断,然后采取适当的措施去解决它。

Ping+ip实际就是利用ICMP回显请求和回显应答报文

4.4、IGMP控制报文协议

IGMP是用于管理多播组成员的一种协议,它的作用在于,让其他所有需要知道自己处于哪个多播组的主机和路由器知道自己的状态。只要某一个多播组还有一台主机,多播路由器就会把数据传输出去,这样,接受方就会通过网卡过滤功能来得到自己想要的数据。为了知道多播组的信息,多播路由器需要定时的发送 IGMP 查询,各个多播组里面的主机要根据查询来回复自己的状态。路由器来决定有几个多播组,自己要对某一个多播组发送什么样的数据。


五、传输层:UDP协议

TCP/IP网络协议基础

UDP(User Datagram Protocol)用户数据报协议,它只在 IP数据报服务之上增加了很少一点功能,它的主要特点有:

  • (1).UDP 是无连接的,发送数据之前不需要建立连接(而 TCP 需要),减少了开销和时延。
  • (2).UDP尽最大努力交付,不保证交付可靠性。
  • (3).UDP 是面向报文的,对于从网络层交付下来的 IP 数据报,只做很简单的封装(8 字节 UDP 报头),首部开销小。
  • (4).UDP 没有拥塞控制,出现网络拥塞时发送方也不会降低发送速率。这种特性对某些实时应用是很重要的,比如 IP 电话,视频会议等,它们允许拥塞时丢失一些数据,因为如果不抛弃这些数据,极可能造成时延的累积。
  • (5).UDP 支持一对一、一对多、多对一和多对多的交互通信。
  • TCP/IP网络协议基础

六、传输层:TCP协议

6.1、 概述

TCP 和 UDP 处在同一层——运输层,但是它们有很多的不同。TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点:

  • (1) TCP 提供 可靠的 数据传输服务,TCP 是 面向连接的 。应用程序在使用 TCP 通信之前,先要建立连接,这是一个类似“打电话”的过程,通信结束后还要“挂电话”。

  • (2) TCP 连接是 点对点 的,一条 TCP 连接只能连接两个端点。

  • (3) TCP 提供可靠传输,无差错、不丢失、不重复、按顺序。

  • (4) TCP 提供 全双工 通信,允许通信双方任何时候都能发送数据,因为 TCP 连接的两端都设有发送缓存和接收缓存。

  • (5) TCP 面向 字节流 。TCP 并不知道所传输的数据的含义,仅把数据看作一连串的字节序列,它也不保证接收方收到的数据块和发送方发出的数据块具有大小对应关系。

6.2 、报文结构

6.3、  连接的建立与释放(3握手4挥手)

刚才说过,TCP 是面向连接的,在传输 TCP 报文段之前先要创建连接,发起连接的一方被称为客户端,而响应连接请求的一方被称为服务端,而这个创建连接的过程被称为 三次握手 :
下图就是祖传三握手图片:TCP/IP网络协议基础
  • (1) 客户端发出请求连接报文段,其中报头控制位 SYN=1,初始序号 seq=x。客户端进入 SYN-SENT(同步已发送)状态。

  • (2) 服务端收到请求报文段后,向客户端发送确认报文段。确认报文段的首部中 SYN=1,ACK=1,确认号是 ack=x+1,同时为自己选择一个初始序号 seq=y。服务端进入 SYN-RCVD(同步收到)状态。

  • (3) 客户端收到服务端的确认报文段后,还要给服务端发送一个确认报文段。这个报文段中 ACK=1,确认号 ack=y+1,而自己的序号 seq=x+1。这个报文段已经可以携带数据,如果不携带数据则不消耗序号,则下一个报文段序号仍为 seq=x+1

至此 TCP 连接已经建立,客户端进入 ESTABLISHED(已建立连接)状态,当服务端收到确认后,也进入 ESTABLISHED 状态,它们之间便可以正式传输数据了。

当传输数据结束后,通信双方都可以释放连接,这个释放连接过程被称为 释放连接 :

TCP/IP网络协议基础

  • (1) 此时 TCP 连接两端都还处于 ESTABLISHED 状态,客户端停止发送数据,并发出一个 FIN 报文段。首部 FIN=1,序号 seq=u(u 等于客户端传输数据最后一字节的序号加 1)。客户端进入 FIN-WAIT-1(终止等待 1)状态。

  • (2) 服务端回复确认报文段,确认号 ack=u+1,序号 seq=v(v 等于服务端传输数据最后一字节的序号加 1),服务端进入 CLOSE-WAIT(关闭等待)状态。现在 TCP 连接处于半开半闭状态,服务端如果继续发送数据,客户端依然接收。

  • (3) 客户端收到确认报文,进入 FIN-WAIT-2 状态,服务端发送完数据后,发出 FIN 报文段,FIN=1,确认号 ack=u+1,然后进入 LAST-ACK(最后确认)状态。

  • (4) 客户端回复确认确认报文段,ACK=1,确认号 ack=w+1(w 为半开半闭状态时,收到的最后一个字节数据的编号) ,序号 seq=u+1,然后进入 TIME-WAIT(时间等待)状态。

注意此时连接还没有释放,需要时间等待状态结束后(4 分钟) 连接两端才会 CLOSED。设置时间等待是因为,有可能最后一个确认报文丢失而需要重传。

6.4、可靠传输的实现

  • (1) TCP 报文段的长度可变,根据收发双方的缓存状态、网络状态而调整。

  • (2) 当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。

  • (3) 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。这就是稍后介绍的超时重传

  • (4) TCP 将保持它首部和数据的检验和。如果通过检验和发现报文段有差错,这个报文段将被丢弃,等待超时重传。

  • (5) TCP 将数据按字节排序,报文段中有序号,以确保顺序的正确性。

  • (6) TCP 还能提供流量控制。TCP 连接的每一方都有收发缓存。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。

可见超时重发机制是 TCP 可靠性的关键,只要没有得到确认报文段,就重新发送数据报,直到收到对方的确认为止。

6.5、超时重传

为了实现超时间重传,需要注意:

  • 1.发送者发送一个报文段后,暂时保存该报文段的副本,为发生超时重传时使用,收到确认报文后删除该报文段。

  • 2.确认报文段也需要序号,才能明确是发出去的那个数据报得到了确认。

  • 3.超时计时器比传输往返时间略长,但具体值是不确定的,根据网络情况而变。

6.6、连续ARQ协议

也许你也发现了,按上面的介绍,超时重传机制很费时间,每发送一个数据报都要等待确认。

在实际应用中的确不是这样的,真实情况是,采用了流水线传输:发送方可以连续发送多个报文段(连续发送的数据长度叫做窗口),而不必每发完一段就停下来等待确认。

实际应用中,接收方也不必对收到的每个报文都做回复,而是采用累积确认方式:接收者收到多个连续的报文段后,只回复确认最后一个报文段,表示在这之前的数据都已收到。

TCP/IP网络协议基础

这样,传输效率得到了很大的提升。