分享

TCP/IP图解

 一起成长一起学 2019-07-12

1.网络基础知识

1.1 计算机的发展史

计算机发展大致经过这几个时代,一开始计算机只是用作大型运算,后来发展为普通民用的计算机。早期的计算很笨重,处理速度也慢,后来经过人们的改良有了以下几个阶段

  • 批处理
    就是将指令打包,一次性让计算机处理一批指令,而不是一条条的执行,大大地提高了效率。
  • 分时系统
    虽然批处理提高了效率,但是每次只有一个程序在运行,其他程序只能等待。因此出现了分时系统。它让每个程序都能在一段时间内执行,可以让多个程序同时执行。
  • 通信时代
    计算机再也不是单机版了。人与人可以互相交流通信,以互联网为中心。不同的计算机连接起来,也让分布式系统成为可能~

1.2 网络分层

  • 我们熟知的网络分层模式的七层模式OSI模型。分层是为了让每个层可以独立应用,即使某些层发声变化,也不会涉及到整个系统。在程序设计上有个专门的名词叫做解耦非常实用解释为啥要使用分层。
  • OSI模型:从上到下分为:应用层、表示层、会话层、传输层、网络层、数据链路层,物理层

1.3 电话交换与分组交换

网络通信的方式有两种:电话交换和分组交换

  • 电话交换。以一个交换机为中心,两台主机互相通信,这个时候有一个弊端。如果这个交换机被两个主机占用的话,那么其他主机就无法使用通信,只能一直等待,直到之前通信的两台主机通信完毕
  • 分组交换。将要发送的数据包分成多个数据包,按照一定的顺序之后分别发送,提高了发送效率。每一个数据包都有自己的数据,目标地址和源地址。因此不要担心包会找不到路~


    image.png

1.4 根据连接的类型分类

网络分为两类:

  • 面向连接的:需要建立连接通道
  • 不面向连接的:直接发出去就完事了

1.5 根据接受端数量分类

网络通信中,根据目标地址的个数及其后续的行为对通信进行分类。如广播,多播

  • 单播
    一对一
  • 广播
    一台主机发到所有主机
  • 多播
    一台主机发到指定的多个主机(典型例子:远程会议)
  • 任播
    指在特定的多台主机中选出一台作为接受端的一种通信方式。

1.6 地址

TCP/IP通信中使用MAC地址、IP地址、端口号等信息作为地址标识。地址具有以下特性

  • 唯一性
    指的是发送端和接受端的地址是唯一的。在上面的接收端广播类型中。我们可以举个例子:将广播的对象都当做1年1班的同学,发送端是老师。老师要找一年一班的学生(接收端地址),这就具有唯一性了
  • 地址的层次性
    在网络世界中如果想找到自己的目标地址还是很麻烦的,虽然有唯一性,但是一个个去找效率会很低。因此需要分层去找。比如说找A-b-1的门牌号。我们只需要到A座,然后找到B室,然后找到位置为1的那个就好了。
    网络通信上利用IP地址作为门牌号。IP地址有网络号,主机号组成。如果网络号相同,说明是同一个网段,然后再在那个网段中找就好了。

1.7 网络的构成要素

image.png

1.7.1 数据链路与通信媒介

计算机之间需要通过电缆互相连接。电缆可以根据数据链路的不同选择不同的对应的电缆。(像我们平时说的以太网,其实就是指一种数据链路。其通信媒介有同轴电缆、双绞线电缆、光纤电缆等等)
ps:

  • 在数据传输之中,两个设备之间数据流动的物理速度成为传输速率。(单位时间内传输的数据量有多少)
  • 传输效率又称为带宽,带宽越大,网络传输能力越强
  • 主机之间实际的传输速率被称作为吞吐量。其单位与带宽相同。

1.7.2 网卡

一个硬件设备,用来连接网络

1.7.3 中继器

将电缆传过来的电信号或者光信号经由中继器的波形调整和放大传给另一个电缆。作用在OSI模型的第一层,物理层面上延长网络的设备。
有多个端口的叫做集线器。每一个端口都是中继器

1.7.4 网桥/2层交换机

网桥是在OSI模型上的第二层-数据链路层上连接两个网络的设备。将识别数据链路层中的数据帧,并将这些数据帧临时存储于内存,再重新生成信号作为一个全新的帧发给相连的一个网段
有些网桥能够判断是否将数据包转发给相邻的网段,这种网桥称为自学式网桥。
以太网等网络中经常使用的交换集线器(Hub),现在基本也属于网桥的一种。交换集线器中连接电缆的每个端口都能提供类似网桥的功能

1.7.5 路由器/3层交换机

路由器作用于OSI的第3层模型。网络层面上连接两个网络,并对分组报文进行转发。根据IP地址转发

1.7.6 4~7层交换机

4-7层交换机负责处理OSI模型中的从传输层至应用层的数据。用TCP/IP分层模型来表述。4~7层交换机就是以TCP等协议的传输层及其上面的应用为基础,分析手法数据,并对其进行特殊处理(可以在这些层中做负载均衡)。
此外,在网络比较拥堵的时候,优先处理像语音这种实时性比较高的时候的需求,放缓处理像邮件等稍有延迟也并无大碍的通信请求。这种处理称为带宽控制

1.7.7 网关

网关是负责将传输层到应用层的数据进行转换和转发的设备。不仅转发数据还负责对数据进行转换,它通常会使用一个表示层或者应用层网关。在两个不能进行直接通信的协议之间进行翻译,最终实现两者之间的通信。
举例:
手机邮件和互联网邮件互相转发。通过邮件网关翻译成双方熟悉的语法语言(协议)
图解

image.png

1.8 现代网络实态

  • 网络的构成:网络的构成由核心网络和边缘网络构成。网络中相应于高速公路入口的部分称作“边缘网络”。常用的设备有路由器和3层交换机
  • 边缘网络:称为“接入层”、“汇聚层”;常用的设备是2层交换机或者3层交换机
  • 我们平时在家庭或者公司用的是边缘网络(即接入层),通过接入层进入边缘网络(由通信公司控制),然后进入核心网络,和全国各各地不同的人互相进行网络通信
  • 从信息发布者的角度看网络:以前我们发信息是通过自己部署到服务器,然后将信息发布。现在利用数据中心。数据中心由大型服务器,存储和计算机网络构成。
  • 虚拟化和云:我们知道数据中心的物理设备的配置是固定的。要是对每一个站点都分配同样的资源,这样是显然不合理。因此有了虚拟化技术,利用虚拟化技术,根据使用者的情况动态调整必要资源的机制被人称为“云”。而且,将虚拟化的系统根据需要自动地进行动态管理的部分称作“智能协调层”、

2.TCP/IP基础知识

学一个东西要知道东西怎么来的,解决什么问题的。TCP/IP的出现,是为了实现一个容灾性强,分布式的网络。
TCP/IP也有自己的模型。我们熟悉的四层模型;物理层、网络层(IP、ICMP、ARP)、传输层(TCP、UDP)、应用层(http、stamp、ftp,SSH、TELNET);

3.数据链路层相关技术

3.1 MAC地址

MAC地址用于识别数据链路中互连的节点。具有唯一性

3.2 共享介质网络

共享介质网络指的是由多个设备共享一个通信介质的一种网络。采用半双工通信,并有必要对介质进行访问控制。有两种方式:

  • 争用方式:就是抢占式的获取传输数据的能力
  • 令牌传递方式:会定义一中叫做令牌的特殊报文。只有获得报文的才能发送数据

3.3 非共享介质网络

网络中的每个站通过交换机直连,由交换机负责转发数据帧。这种方式会使计算机与交换机端口之间形成一对一的链接,即可实现全双工通信。

3.4 全双工、半双工

全双工的意思是既可以接受数据也可以发送数据,而半双工就是同一时间只能接受数据或者发送数据(类似无线电收发器,若两端同时说话,是听不见对方说话的。)

4.IP协议

4.1 IP与数据链路层的关系

数据链路层提供直连两个设备之间的功能。网络层的IP则负责在没有直连的两个网络之间进行通信传输。IP协议相当于给网络提供了行程表;而数据链路则提供了车票,飞机票等等。

4.2 IP基础知识

  • IP地址属于网络层地址
  • 源IP地址到达目标IP地址需要经过路由控制
  • IP属于面向无连接型

4.3 IP地址的定义

IPV4地址由32位正整数组成。由网络号,主机号组成。网络号表示该网络处在哪一个网段;主机号则表示是哪台机子。

  • IP地址分为4类。A、B、C、D类
  • 主机地址全部设为1,就成为了广播地址。分为本地广播、直接广播。本地广播就是在本网段就行广播,直接广播则会跨网段。
  • IP多播;IP多播用于将包发送给特定组内的所有主机。多使用D类地址,因此如果从首位开始到第四位是“1110”,就可以认为是多播地址。
  • 子网掩码:子网掩码是一种识别码,通过这种识别码可以识别细分出比A、B、C类地址更小粒度的网路。实际上是将这三类地址的主机地址部分用作子网地址,将原网络分为多个物理地址网络的一种机制。(网络地址部分全部为1,对应IP地址的主机号标识的部分全部为0)

4.4 路由控制

实现IP通信的主机和路由器都必须持有一张路由控制表,它指明了目标地址要经过的哪些路由,哪些主机。

4.5 IP报文的分片和重组

  • 有时候由于数据量大,需要将数据进行分片发送,分片由路由器执行,重组则交给了目标主机。(因为就算路由器进行了重组,可能下次发送的时候又要分片,这样做只会增加负担,因此规定重组需要目标主机去做了)
  • 路径MTU(数据链路的最大传输单元)发现:指从发送端主机到接收端主机之间不需要分片时最大MTU大小。即最小MTU!有大小限制,如果大小超过MTU,则让发送端进行分片传输,每次分片的最大MTU就是路径MTU;由ICMP来通知下一次MTU的大小

4.6 IPV6

IPV6由128位组成。是为了根本解决IPV4地址耗尽的问题而被标准化的网际协议。

5. IP协议相关技术

5.1 DNS

DNS可以将我们输入的地址转化为IP地址。由于IP地址并不好记。因此TCP/IP世界从一开始就已经有了一个叫做主机码的东西。当我们进行网络通信的时候,系统自动将主机名转换成具体的IP地址。为了实现这个功能,通常会利用一个叫做host的数据文件。DNS可以说是一个维护了域名和IP地址映射关系的一个数据库

5.2 域名的构成

DNS的域名每一个域名都有自己服务器,他们呈树形结构。其中根服务器拥有所有的域名,我们访问的时候首先会去根服务器记性查询,根域名服务器会将想查询的地址返回,让你去对应的域名服务器找到对应的域名然后转成IP地址。(如果找不到就会递归到上层服务器然后遍历)

5.3 ARP

ARP是一种解决地址问题的协议。用来映射IP地址和MAC地址之间的关系。它的工作原理是:发送一个ARP一个请求,然后会广播同一个链路层的所有主机。如果是目标IP地址与其中的一个主机相同,那么这个主机就会返回一个ARP响应,同时带上自己的MAC地址给ARP请求。(为了避免发送多次请求,一般会将这种映射关系缓存起来,可以放在接收主机端。)

5.4 为什么同时需要IP地址和MAC地址

  • 只有MAC地址的话。比如A向B发请求,A知道B的MAC地址,但是如果中间隔着一个C。还是无法访问到B
  • 仅仅靠MAC地址,无法获得机器对应的位置。
  • IP地址就像门牌号,MAC地址就是你想找到的人

5.5 RARP

RARP将MAC地址定位IP地址的一种协议。例如将打印机服务等小型嵌入式设备接入到网络就会经常用到。

5.6 ICMP

ICMP是一种诊断网络是否正常工作,以及遇到异常的时候进行问题诊断的协议。

5.7 DHCP

动态地为每一台主机设置IP地址。我们会先准备一个DHCP服务器,当有新的物理机连进来的时候,就会动态地为这台电脑进行IP分配。生活中,我们的DHCP是路由器,因为一个家庭的话主机数不会太多。但是如果是大型网络的话,就不可以用路由器了。一般采用DHCP中继代理

5.8NAT

NAT(NetWork Address Translator),从单词的翻译来说就是网络地址的翻译者。就是将本地网络中使用私有地址,在连接互联网的时候转而使用全局IP地址的技术。由此可以实现,一个全局IP地址和多个主机通信。
它的工作机制是。访问外网的时候,私网会将自己的IP地址替换成全局IP地址(源地址),目标地址不变

5.9 NAT-PT(NAPT-PT)

NAT-PT技术是将IPV6的首部转换成IPV4的首部的一种技术,用于兼容IPV4和IPV6

5.10 IP隧道

IP隧道是一种兼容IPV4和IPV6之间通信的一种管道。假设A(6),B(4),C(6)。中间有一个4,A,C想要通信的话,就需要一个隧道,在通讯的时候加上IPV6的首部。

6.传输层

传输层有两大协议:TCP、UDP。一般通信的模式是客户端-服务端模式,以端口的形式区别应用。

  • TCP:面向连接的,可靠的流协议。(流,可以想象中排水道中的水)。有“顺序控制”或者“重发机制”,此外还具有“流量控制”(发多发少的控制)、“拥塞控制”、提供网络利用率
  • UPD:不可靠。不保证消息一定达到
  • socket:应用在使用TCP或UDP的时候,会用到操作系统的提供的类库。套接字的API是操作系统层面实现网络编程的一种方式。可以设置对端的IP地址、端口号、并实现数据发送和接收。这个一般不用我们写,一般操作系统内核已经帮我们实现了。

6.1 UDP

  • 特点:不可靠,面向无连接
  • 目的:包总量较少的通信、视频,音频等多媒体通信、限定于LAN等特定网络中的应用通信、广播通信

6.2 TCP

如果想要实现可靠的连接,就要设想在恶劣环境下的一系列问题;比如说:数据的破坏、丢包、重复、以及分片顺序混乱等问题。
TCP通过校验和、序列号、确认应答、重发控制、连接管理、以及窗口控制解决等实现可靠性传输。

6.2.1 通过序列号和确认与应答提高可靠性

A->B:此时B会发一个ACK消息告诉A,收到请求了。这样就能确保A的数据已经发送到B了,TCP利用确认应答机制实现了可靠的数据传输;如果一段时间没有收到ACK,那么A就会尝试重发。。

  • 带来的问题:
    源主机如果某些原因没有收到目标主机的ACK。那么就会重发,但是由于发的是重复的包,目标主机为了对应用层提供的可靠的传输,就会将整个重复的包丢弃。
  • 解决思路:
    引入一种机制,识别是否已经接收数据,又能够判断是否需要接收。
  • 序列号实现:
    序列号可以解决确认应答处理,重复控制以及重复控制等功能。序列号的工作机制:为每一个字节都标上号码。接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步要接收的序号作为确认应答返送回去。这样就算有重复的包,但是它们的序号是不同的,接收端也不会将包丢掉。

6.2.2 重发超时如何计算

TCP要求不论处在何种网络环境下都要提供高性能通信,并且网络如何拥堵,都要保持可靠连接这个特性。为此,每次发包时都会计算返回时间以及其偏差。将往返时间 +偏差。重发超时就是比这个要稍大一点的值。
重发以后如果还没有收到应答,就会继续发送。此时等待应答的时候会以2倍,4倍的指数函数延长。达到一定次数以后,如果没有任何确认应答返回,就会判断为网络或者对端主机异常。

6.2.3 连接管理

TCP建立数据通信之前会发一个SYN包作为建立连接的请求等待确认认答;在通信结束的时候会进行断开连接的处理(FIN包)

6.2.4 TCP以段为单位发送数据

在TCP建立连接的时候,建立的过程中会确认发送数据包的最大消息长度(MSS);两端的主机在建立请求的时候,会在TCP首部中写入MSS选项,告诉对方自己的接口所容纳的MSS大小,然后取两者较小的值投入使用

6.2.5 利用窗口控制提高速度

TCP以一个段为单位,每发一个段进行一次确认应答的处理。这样的传输方式有一个缺点,那就是包的往返时间越长,通信性能越低(因为需要对方的应答,才可以继续发送。)
为了解决这个问题,引入了窗口的概念。窗口是指可以发送一段序号的数据。比如说(1~4000)。窗口大小指的无需等待确认应答而可以继续发送数据的最大值。这个机制使用了大量的缓冲区(缓存),将没有确认应答的全部放进缓存区里。
窗口控制与重发控制
如果在传输过程中出现段丢失

  • 确认应答没有返回:数据已经到发出去了,无需进行重发。比如确认号为1001丢失,但是2001返回来了。默认就是发送成功了。
  • 重发机制的触发条件:在窗口比较大,又出现报文段丢失的情况下,同一个序号的确认应答将会被重复不断地返回。而发送端主机如果连续3次收到同一个确认应答,就将会重发这一段数据。这种机制被称为高速重发控制”。
  • 发送端报文丢失:发送端报文丢失。接收端如果收到一个自己应该接收的序号以外的数据时,会针对当前为止收到的数据返回确认应答。(比如说接收端的报文段应该是1001-2000,但是由于报文丢失,发送了3000-4000的报文段。然后ACK了这一段报文,这样默认就会ACK2001。这样不同的发送端,就会由两个相同的ACK报文段进行应答)。

6.2.6 流控制

发送端会根据自己的实际情况发送数据。但是,接收端可能收到的是一个毫无关系的数据包,又可能会在处理其他问题上花费一定的时间。甚至在高负荷情况下无法接收本应该接收的数据。这样又会触发重发机制。从而导致网络流量浪费。
因此TCP提供了一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量。这就是流控制
接收端会告诉发送端自己的可以接收的数据量大小。为了防止无法通信的问题出现,发送端主机会时不时的发送一个叫做窗口探测的数据段,来获取最新的窗口大小信息

6.2.7 拥塞控制

TCP为了防止网络瘫痪,在通信一开始的时候会通过一个叫做慢启动的算法得出数值,对发送数据量进行控制。其工作机制如下:

  • 定义一个拥塞控制窗口,在慢启动的时候设置这个窗口的值为1.之前每接收到一次ACK,这个窗口会+1
  • 在发送数据包的时候,将这个值和接收端主机通知的窗口大小做比较,然后取最小的那个值,发送比其还要小的数据量。
  • 随着包的发送,包会以1、2、4等指数函数的增长,拥塞状况激增也会导致网络拥塞的发生。因此引入慢启动阀值。(数值计算为:1个数据段的字节数/拥塞控制窗口(字节) * 1个数据段的字节数;拥塞窗口的小会呈直线上升的趋势。)

6.2.8 提高网络利用率的规范

其实可以从两个方面去想:

  • 发送端:少发点(Nagle算法)
  • 接收端:别那么快应答,这样也会一定程度上减少发送端的发送速度。(延迟确认)
  • 捎带应答:指在同一个TCP包中既发送数据又发送确认应答的一种机制。(例如电子邮件中协议的SMTP或者POP)

7.应用层

和我们开发Web项目比较相关联的知识点有以下。

7.1 WWW

WWW定义了三个重要的概念,分贝时访问手段与位置(URI)、信息的表现形式(Html)、以及信息转发(Http)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多