图解TCP/IP

如题所述

第1个回答  2022-07-01

计算机使用模式的演变:
20世纪50年代 批处理时代
20世纪60年代 分时系统时代
20世纪70年代 计算机间通信时代
20世纪80年代 计算机网络时代
20世纪90年代 互联网普及时代
2000年 以互联网为中心的时代
2010年 无论何时何地地一切皆TCP/IP的网络时代

在计算机网络与信息通信领域,人们经常提及 “协议” 。简单来说。 协议 就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU以及不同的操作系统组成的计算机之间,只要遵循相同的协议就能实现通信。换句话说, 协议 就是计算机之间的通信语言,只有支持相同的协议,计算机之间才能相互通信。

计算机通信也会在每一个分组中附加上源主机地址和目标主机地址送给通信线路。这些发送端地址、接收端地址以及分组序号写入的部分称为 “报文首部”

TCP/IP协议并非ISO(国际标准化组织)所制定的某种国际标准,而是由IETF(Internet Engineering Task Force国际互联网工程任务组)所建议的、致力于推进器标准化作业的一种协议。

OSI参考模型
应用层 :针对特定应用的协议。以电子邮件为例,用户A在主机A上新建一封电子邮件,指定收件人为B,并输入邮件内容为“早上好”。应用层协议会在所要传递数据的前端附加一个首部(标签)信息,该首部标明了邮件内容为“早上好”和收件人为B。

表示层 :设备固有数据格式和网络标准数据格式的转换。用户A和用户B使用的邮件客户端一致,便能够顺利收取和阅读邮件,不一致时表示层就发挥作用了:将数据从“某个计算机特定的数据格式”转换为“网络通用的标准数据格式”后再发送出去,接收端也进行相应处理。表示层与表示层之间为了识别编码格式也会附加首部信息,从而将实际传输的数据转交给下一层处理。

会话层 :通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层以下的分层。假定用户A新建了5封电子邮件准备发送给用户B,是建立一次连接一起发送,还是分别建立5次连接各自发送,都是会话层决定的,会话层和表示层一样,也会在数据前段附加首部或标签信息再转发给下一层。而这些首部或标签中记录着数据传送顺序的信息。

传输层 :管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠传送到目标地址)。用主机A将“早上好”这一数据发送给主机B,期间可能因为某些原因导致数据损坏,主机B只收到“早上”,此时也会将这一事实告诉主机A,主机A得知情况会将后面的“好”重发给主机B。保证数据传输的可靠性是传输层的一个重要作用。为了确保可靠性,这一层所要传输的数据附加首部以识别这一分层的数据。然而,实际上将数据传输给对端的处理是由网络层来完成的。

网络层 :地址管理与路由选择。两端主机之间虽然有众多数据链路,但能够将数据从主机A送到主机B也都是网络层的功劳。相当于TCP/IP协议中的IP协议,网络层不能保证数据的可达性,所以需要传输层TCP协议确保可达性,所以TCP/IP协议实现了可靠传输。

数据链路层 :互连设备之间传送和识别数据帧。网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据。

物理层 :以“0”、“1”代表电压的高低、灯光的闪灭。界定连接器和网线的规格。将数据的0、1转换为电压和脉冲光传输给物理的传输介质。

计算机之间的网络连接通过 电缆 相互连接。任何一台计算机连接网络时,必须要使用 网卡 (网络适配器、NIC、LAN卡), 中继器 的作用是将电缆传过来的信号调整和放大再传给另一个电缆,可以完成不同媒介之间的连接工作。 网桥 是数据链路层面上连接两个网络的设备,提供的是传递数据帧的作用,并且还具备自学机制。 路由器 是在网络层面上(OSI七层模型网络层)连接两个网络、并对分组报文进行转发的设备。 网桥 是根据物理地址(MAC地址)进行处理,而路由器/3层交换机则是根据IP地址进行处理的。由此,TCP/IP中网络层的地址就成为了IP地址。对于并发访问量非常大的一个企业级Web站点,使用一台服务器不足以满足前端的访问需求,这时通常会架设多台服务器来分担。这些服务器的访问的入口地址通常只有一个,为了能通过同一个URL将前端访问分发到后台多个服务器上,可以将这些服务器的前端加一个负载均衡器。这种负载均衡器就是4-7层交换机的一种。 网关 是OSI参考模型中负责将从传输层到应用层的数据进行转换和转发的设备。在两个不能进行直接通信的协议之间进行翻译,最终实现两者的通信。非常典型的例子就是互联网邮件和手机邮件之间的转换服务。防火墙也是一款通过网关通信,针对不用应用提高安全性的产品。

美国军方利用分组交换技术组件的ARPANET网络是互联网的鼻祖。而BSD UNIX操作系统实现了TCP/IP协议,随着UNIX系统的普及,TCP/IP协议开始盛行。TCP/IP可以单纯的指这两种协议,然而在很多情况下,它指的是包含HTTP、SMTP、FTP、TCP、UDP、IP、ARP等很多协议的 网际协议族

发送数据包的过程,和上节OSI参考模型中介绍的差不多。数据链路层是由网络接口(以太网驱动)来处理的,它会改数据附加上 以太网首部 以太网首部 中包含接收端的MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。

在以太网普及之初,一般多台终端使用同一根同轴电缆的 共享介质型 连接方式,访问控制一般以半双工通信为前提采用CSMA/CD方式。随着ATM交换技术的进步和CAT5 UTP电缆的普及很快发生了变化,逐渐采用像 非共享介质网络 那样直接与交换机连接的方式。

网络层与数据链路层的关系
某人要去一个很远的地方旅行,并计划先后乘坐飞机、火车、公交车到达目的地。旅行社不仅帮他预订好了飞机票和火车票,甚至还为他指定了一个详细的行程表,详细到几点几分需要乘坐飞机或火车都一目了然。机票和火车票只能够在某一限定区间内移动,此处的“区间内”就如同通信网络上的数据链路。这个区间内的出发地点和目的地点就如同某一个数据链路的源地址和目标地址等首部信息。整个行程表的作用就相当于网络层。

DNS :将域名和IP地址相匹配。
ARP :以目标IP地址为线索,用来定位下一个应该接受数据分包的网络设备对应的MAC地址。ARP只适用于IPv4,IPv6可以用ICMPv6替代ARP发送邻居探索消息。
ICMP :在IP通信中如果某个IP包因为某种原因未能送达目标地址,那么这个具体的原因将由ICMP负责通知。
DHCP :使用移动设备时,每移动到一个新地方,都要重新设置IP地址,为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP协议。
NAT :是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。
IP隧道 :IPv4和IPv6之间进行通信的技术就是IP隧道。

TCP用于低速可靠传输
UDP用于高速不可靠传输
端口号就是用来识别同一台计算机中进行通信的不同应用程序,也被称为程序地址。
TCP传输利用 窗口控制 提高速度,无需等到每次应答来进行下一次发送,而是有个窗口进行缓冲,来提高吞吐量。
TCP拥塞控制,利用拥塞窗口来调节发送的数据量,拥塞时减小窗口,流畅是增大窗口来控制吞吐量。

我们日常网络访问的 http 用的是 tcp ,那还是看一下这个过程吧
tcp 可以提供全双工的数据流传输服务,全双工说白了,就是同一时间 A 可以发信息给 B , B 也可以发消息给 A ,俩人同时都可以给对方发消息;半双工就是某个时间段 A 可以发给 B ,但 B 不能给 A ,换个时间段,就反过来了。

这个过程理解起来,就像两人在喊话:
A:喂,有人吗,我想建立连接
B:有哇,你建立吧,等你吆
A:好哒,我来啦
然后俩人就建立连接了...

一定要三次握手么,两次行不行?
这么一个场景:
A->B: 洞幺洞幺,我是洞拐,收到请回复。
B->A: 洞拐洞拐,洞幺收到。

请问根据以上对话判断:
1、B是否能收到A的信息? (答案是肯定的)
2、A是否能收到B的信息? (你猜?)

tcp的核心思想是保证数据可靠传输,如果 2 次,显然不行,但 3 次就一定行么?未必,可能第三次的时候网络中断了,然后 A 就认为 B 收到了,然后一通发消息,其实 B 没收到,但这是无法完全保证的。无论握手多少次都不能满足传输的绝对可靠,为了效率跟相对可靠而看, 3 次刚刚好,所以就 3 次了(正好 AB 相互确认了一次)。

举个栗子:把客户端比作男孩,服务器比作女孩。通过他们的分手来说明“四次挥手”过程:

"第一次挥手" :日久见人心,男孩发现女孩变成了自己讨厌的样子,忍无可忍,于是决定分手,随即写了一封信告诉女孩。
“第二次挥手” :女孩收到信之后,知道了男孩要和自己分手,怒火中烧,心中暗骂:你算什么东西,当初你可不是这个样子的!于是立马给男孩写了一封回信:分手就分手,给我点时间,我要把你的东西整理好,全部还给你!男孩收到女孩的第一封信之后,明白了女孩知道自己要和她分手。随后等待女孩把自己的东西收拾好。
“第三次挥手” :过了几天,女孩把男孩送的东西都整理好了,于是再次写信给男孩:你的东西我整理好了,快把它们拿走,从此你我恩断义绝!
“第四次挥手” :男孩收到女孩第二封信之后,知道了女孩收拾好东西了,可以正式分手了,于是再次写信告诉女孩:我知道了,这就去拿回来!

为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当 Server端 收到 Client端 的 SYN 连接请求报文后,可以直接发送 SYN+ACK报文 。其中 ACK报文 是用来应答的, SYN报文 是用来同步的。但是关闭连接时,当 Server端 收到 FIN报文 时,很可能并不会立即 关闭SOCKET ,所以只能先回复一个 ACK报文 ,告诉 Client端 ,"你发的 FIN报文 我收到了"。只有等到我 Server端 所有的报文都发送完了,我才能发送 FIN报文 ,因此不能一起发送。故需要四步握手。

静态路由 是指事先设置好路由器和主机中并将路由信息固定的一种方法。缺点是某个路由器发生故障,基本上无法自动绕过发生故障的节点,只有在管理员手工设置以后才能恢复正常。
动态路由 是管理员先设置好路由协议,其设定过程的复杂程度与具体要设置路由协议的类型有直接关系。在路由器个数较多的网络,采用动态路由显然能够减轻管理员负担。网络发生故障,只要有一个可绕的其他路径,数据包会自动选择这个路径,但路由器需要定期相互交换必要的路由控制信息,会增加一定程度的负荷。

根据路由控制范围分为 IGP (内部网关协议)和 EGP (外部网关协议)

路由算法分为 距离向量算法 链路状态算法
距离向量算法 :通过距离与方向确定通往目标网络的路径
链路状态算法 :链路状态中路由器知道网络的连接状态,并根据链路信息确定通往目标网络的路径。

IGP包含RIP、RIP2、OSPF
EGP包含EGP、BGP

RIP是距离向量型的一种路由协议,广泛应用于LAN
RIP2是RIP的第二版。新增以下特点:使用多播、支持子网掩码、路由选择域、外部路由标志、身份验证密钥
OSPF是一种链路状态型路由协议。

在RIP和OSPF中利用IP的网络地址部分进行着路由控制,然而BGP则需要放眼整个互联网进行路由控制。BGP的最终路由控制表有网络地址和下一站的路由器组来表示,不过它会根据所要经过的AS个数进行路由控制。有了AS编号的域,就相当于有了自己一个独立的“国家”。AS的代表可以决定AS内部的网络运营和相关政策。与其他AS相连的时候,可以像一位“外交官”一样签署合约再进行连接。正是有了这些不同地区的AS通过签约的相互连接,才有了今天全球范围内的互联网。

转发IP数据包的过程中除了使用路由技术外,还在使用标记交换技术。最有代表性的就是多协议标记交换技术(MPLS)。
MPLS的标记不像MAC地址直接对应到硬件设备。因此,MPLS不需要具备以外网或ATM等数据链路层协议的作用,而只需要关注它与下面一层IP层之间的功能和协议即可。
MPLS优点:
1.转发速度快
2.利用标记生成虚拟路径,并在它的上面实现IP等数据包的通信。