TCPIP协议简述
TCPIP协议简述
TCP/IP 协议栈是⼀系列⽹络协议的总和,是构成⽹络通信的核⼼⾻架,它定义了电⼦设备如何连⼊因特⽹,以及数据如何在它们之间进⾏传输。TCP/IP 协议采⽤4层结构,分别是应⽤层、传输层、⽹络层和链路层,每⼀层都呼叫它的下⼀层所提供的协议来完成⾃⼰的需求。由于我们⼤部分时间都⼯作在应⽤层,下层的事情不⽤我们操⼼;其次⽹络协议体系本⾝就很复杂庞⼤,⼊门门槛⾼,因此很难搞清楚TCP/IP的⼯作原理,通俗⼀点讲就是,⼀个主机的数据要经过哪些过程才能发送到对⽅的主机上。 接下来,我们就来探索⼀下这个过程。
物理介质:
物理介质就是把电脑连接起来的物理⼿段,常见的有光纤、双绞线,以及⽆线电波,它决定了电信号(0和1)的传输⽅式,物理介质的不同决定了电信号的传输带宽、速率、传输距离以及抗⼲扰性等等。
TCP/IP协议栈分为四层,每⼀层都由特定的协议与对⽅进⾏通信,⽽协议之间的通信最终都要转化为 0 和 1 的电信号,通过物理介质进⾏传输才能到达对⽅的电脑,因此物理介质是⽹络通信的基⽯。
下⾯我们通过⼀张图先来⼤概了解⼀下TCP/IP协议的基本框架:
当通过http发起⼀个请求时,应⽤层、传输层、⽹络层和链路层的相关协议依次对该请求进⾏包装并携带对应的⾸部,最终在链路层⽣成以太⽹数据包,以太⽹数据包通过物理介质传输给对⽅主机,对⽅接收到数据包以后,然后再⼀层⼀层采⽤对应的协议进⾏拆包,最后把应⽤层数据交给应⽤程序处理。
咏春拳基本功
⽹络通信就好⽐送快递,商品外⾯的⼀层层包裹就是各种协议,协议包含了商品信息、收货地址、收件⼈、联系⽅式等,然后还需要配送车、配送站、快递员,商品才能最终到达⽤户⼿中。
⼀般情况下,快递是不能直达的,需要先转发到对应的配送站,然后由配送站再进⾏派件。
配送车就是物理介质,配送站就是⽹关, 快递员就是路由器,收货地址就是IP地址,联系⽅式就是MAC地址。
快递员负责把包裹转发到各个配送站,配送站根据收获地址⾥的省市区,确认是否需要继续转发到其他配送站,当包裹到达了⽬标配送站以后,配送站再根据联系⽅式到收件⼈进⾏派件。
有了整体概念以后,下⾯我们详细了解⼀下各层的分⼯。
链路层:
⽹络通信就是把有特定意义的数据通过物理介质传送给对⽅,单纯的发送 0 和 1 是没有意义的,要传输有意义的数据,就需要以字节为单位对 0 和 1 进⾏分组,并且要标识好每⼀组电信号的信息特征,然后按照分组的顺序依次发送。以太⽹规定⼀组电信号就是⼀个数据包,⼀个数据包被称为⼀帧, 制定这个规则的协议就是以太⽹协议。⼀个完整的以太⽹数据包如下图所⽰:
整个数据帧由⾸部、数据和尾部三部分组成,⾸部固定为14个字节,包含了⽬标MAC地址、源MAC地址和类型;数据最短为46个字节,最长为1500个字节,如果需要传输的数据很长,就必须分割成多个帧进⾏发送;尾部固定为4个字节,表⽰数据帧校验序列,⽤于确定数据包在传输过程中是否损坏。因此,以太⽹协议通过对电信号进⾏分组并形成数据帧,然后通过物理介质把数据帧发送给接收⽅。那么以太⽹如何来识接收⽅的⾝份呢?
以太⽹规协议定,接⼊⽹络的设备都必须安装⽹络适配器,即⽹卡, 数据包必须是从⼀块⽹卡传送到另⼀块⽹卡。⽽⽹卡地址就是数据包的发送地址和接收地址,也就是帧⾸部所包含的MAC地址,MAC地址是每块⽹卡的⾝份标识,就如同我们⾝份证上的⾝份证号码,具有全球唯⼀性。MAC地址采⽤⼗六进制标识,共6个字节, 前三个字节是⼚商编号,后三个字节是⽹卡流⽔号,例如 4C-0F-6E-12-D2-19
有了MAC地址以后,以太⽹采⽤⼴播形式,把数据包发给该⼦⽹内所有主机,⼦⽹内每台主机在接收到这个包以后,都会读取⾸部⾥的⽬标MAC地址,然后和⾃⼰的MAC地址进⾏对⽐,如果相同就做下⼀步处理,如果不同,就丢弃这个包。
所以链路层的主要⼯作就是对电信号进⾏分组并形成具有特定意义的数据帧,然后以⼴播的形式通过
女方提出离婚物理介质发送给接收⽅。
⽹络层
启程水木年华歌词对于上⾯的过程,有⼏个细节问题值得我们思考:
发送者如何知道接收者的MAC地址?
发送者如何知道接收者和⾃⼰同属⼀个⼦⽹?
如果接收者和⾃⼰不在同⼀个⼦⽹,数据包如何发给对⽅?
为了解决这些问题,⽹络层引⼊了三个协议,分别是IP协议、ARP协议、路由协议。
【1】IP协议
通过前⾯的介绍我们知道,MAC地址只与⼚商有关,与所处的⽹络⽆关,所以⽆法通过MAC地址来判断两台主机是否属于同⼀个⼦⽹。
因此,⽹络层引⼊了IP协议,制定了⼀套新地址,使得我们能够区分两台主机是否同属⼀个⽹络,这套地址就是⽹络地址,也就是所谓的IP 地址。
IP地址⽬前有两个版本,分别是IPv4和IPv6,IPv4是⼀个32位的地址,常采⽤4个⼗进制数字表⽰。IP协议将这个32位的地址分为两部分,前⾯部分代表⽹络地址,后⾯部分表⽰该主机在局域⽹中的地址。由于各类地址的分法不尽相同,以C类地址192.168.24.1为例,其中前24位就是⽹络地址,后8位就是主机地址。因此, 如果两个IP地址在同⼀个⼦⽹内,则⽹络地址⼀定相同。为了判断IP地址中的⽹络地址,IP协议还引⼊了⼦⽹掩码, IP地址和⼦⽹掩码通过按位与运算后就可以得到⽹络地址。
由于发送者和接收者的IP地址是已知的(应⽤层的协议会传⼊), 因此我们只要通过⼦⽹掩码对两个IP地址进⾏AND运算后就能够判断双⽅是否在同⼀个⼦⽹了。
【2】ARP协议
即地址解析协议,是根据IP地址获取MAC地址的⼀个⽹络层协议。其⼯作原理如下:
ARP⾸先会发起⼀个请求数据包,数据包的⾸部包含了⽬标主机的IP地址,然后这个数据包会在链路层进⾏再次包装,⽣成以太⽹数据包,最终由以太⽹⼴播给⼦⽹内的所有主机,每⼀台主机都会接收到这个数据包,并取出标头⾥的IP地址,然后和⾃⼰的IP地址进⾏⽐较,如果相同就返回⾃⼰的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定⽬标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存⼊本机ARP缓存中并保留⼀定时间,下次请求时直接查询ARP缓存以节约资源。cmd输⼊ arp -a 就可以查询本机缓存的ARP数据。
【3】路由协议
通过ARP协议的⼯作原理可以发现,ARP的MAC寻址还是局限在同⼀个⼦⽹中,因此⽹络层引⼊了路由协议,⾸先通过IP协议来判断两台主机是否在同⼀个⼦⽹中,如果在同⼀个⼦⽹,就通过ARP协议查询对应的MAC地址,然后以⼴播的形式向该⼦⽹内的主机发送数据包;如果不在同⼀个⼦⽹,以太⽹会将该数据包转发给本⼦⽹的⽹关进⾏路由。⽹关是互联⽹上⼦⽹与⼦⽹之间的桥梁,所以⽹关会进⾏多次转发,最终将该数据包转发到⽬标IP所在的⼦⽹中,然后再通过ARP获取⽬标机MAC,最终也是通过⼴播形式将数据包发送给接收⽅。
⽽完成这个路由协议的物理设备就是路由器,在错综复杂的⽹络世界⾥,路由器扮演者交通枢纽的⾓⾊,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。
【4】IP数据包
在⽹络层被包装的数据包就叫IP数据包,IPv4数据包的结构如下图所⽰:
无法获取ip地址
IP数据包由⾸部和数据两部分组成,⾸部长度为20个字节,主要包含了⽬标IP地址和源IP地址,⽬标I
P地址是⽹关路由的线索和依据;数据部分的最⼤长度为65515字节,理论上⼀个IP数据包的总长度可以达到65535个字节,⽽以太⽹数据包的最⼤长度是1500个字符,如果超过这个⼤⼩,就需要对IP数据包进⾏分割,分成多帧发送。
所以,⽹络层的主要⼯作是定义⽹络地址,区分⽹段,⼦⽹内MAC寻址,对于不同⼦⽹的数据包进⾏路由。
传输层中华高手在异界
链路层定义了主机的⾝份,即MAC地址, ⽽⽹络层定义了IP地址,明确了主机所在的⽹段,有了这两个地址,数据包就从可以从⼀个主机发送到另⼀台主机。但实际上数据包是从⼀个主机的某个应⽤程序发出,然后由对⽅主机的应⽤程序接收。⽽每台电脑都有可能同时运⾏着很多个应⽤程序,所以当数据包被发送到主机上以后,是⽆法确定哪个应⽤程序要接收这个包。
因此传输层引⼊了UDP协议来解决这个问题,为了给每个应⽤程序标识⾝份,UDP协议定义了端⼝,同⼀个主机上的每个应⽤程序都需要指定唯⼀的端⼝号,并且规定⽹络中传输的数据包必须加上端⼝信息。 这样,当数据包到达主机以后,就可以根据端⼝号到对应的应⽤程序了。UDP定义的数据包就叫做UDP数据包,结构如下所⽰:
UDP数据包由⾸部和数据两部分组成,⾸部长度为8个字节,主要包括源端⼝和⽬标端⼝;数据最⼤为65527个字节,整个数据包的长度最⼤可达到65535个字节。
UDP协议⽐较简单,实现容易,但它没有确认机制, 数据包⼀旦发出,⽆法知道对⽅是否收到,因此可靠性较差,为了解决这个问题,提⾼⽹络可靠性,TCP协议就诞⽣了,TCP即传输控制协议,是⼀种⾯向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出⼀个数据包都要求确认,如果有⼀个数据包丢失,就收不到确认,发送⽅就必须重发这个数据包。
为了保证传输的可靠性,TCP 协议在 UDP 基础之上建⽴了三次对话的确认机制,也就是说,在正式收发数据前,必须和对⽅建⽴可靠的连接。由于建⽴过程较为复杂,我们在这⾥做⼀个形象的描述:
主机A:我想发数据给你,可以么?
主机B:可以,你什么时候发?
主机A:我马上发,你接着!
经过三次对话之后,主机A才会向主机B发送正式数据,⽽UDP是⾯向⾮连接的协议,它不与对⽅建⽴连接,⽽是直接就把数据包发过去了。所以 TCP 能够保证数据包在传输过程中不被丢失,但美好的事物必然是要付出代价的,相⽐ UDP,TCP 实现过程复杂,消耗连接资源多,传输速度慢。
TCP 数据包和 UDP ⼀样,都是由⾸部和数据两部分组成,唯⼀不同的是,TCP 数据包没有长度限制,理论上可以⽆限长,但是为了保证⽹络的效率,通常 TCP 数据包的长度不会超过IP数据包的长度,以确保单个 TCP 数据包不必再分割。
总结⼀下,传输层的主要⼯作是定义端⼝,标识应⽤程序⾝份,实现端⼝到端⼝的通信,TCP协议可以保证数据传输的可靠性。
应⽤层
理论上讲,有了以上三层协议的⽀持,数据已经可以从⼀个主机上的应⽤程序传输到另⼀台主机的应⽤程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差。因此,应⽤层定义了各种各样的协议来规范数据格式,常见的有 HTTP、FTP、SMTP 等,HTTP 是⼀种⽐较常⽤的应⽤层协议,主要⽤于B/S架构之间的数据通信,其报⽂格式如下:
在 Resquest Headers 中,Accept 表⽰客户端期望接收的数据格式,⽽ ContentType 则表⽰客户端发送的数据格式;在 Response Headers 中,ContentType 表⽰服务端响应的数据格式,这⾥定义的格式,⼀般是和  Resquest Headers 中 Accept 定义的格式是⼀致的。
有了这个规范以后,服务端收到请求以后,就能正确的解析客户端发来的数据,当请求处理完以后,再按照客户端要求的格式返回,客户端收到结果后,按照服务端返回的格式进⾏解析。
所以应⽤层的主要⼯作就是定义数据格式并按照对应的格式解读数据。
全流程
⾸先我们梳理⼀下每层模型的职责:
链路层:对0和1进⾏分组,定义数据帧,确认主机的物理地址,传输数据;
⽹络层:定义IP地址,确认主机所在的⽹络位置,并通过IP进⾏MAC寻址,对外⽹数据包进⾏路由转发;
传输层:定义端⼝,确认主机上应⽤程序的⾝份,并将数据包交给对应的应⽤程序;华山位于哪个省
应⽤层:定义数据格式,并按照对应的格式解读数据。
然后再把每层模型的职责串联起来,⽤⼀句通俗易懂的话讲就是:
当你输⼊⼀个⽹址并按下回车键的时候,⾸先,应⽤层协议对该请求包做了格式定义;紧接着传输层协议加上了双⽅的端⼝号,确认了双⽅通信的应⽤程序;然后⽹络协议加上了双⽅的IP地址,确认了双⽅的⽹络位置;最后链路层协议加上了双⽅的MAC地址,确认了双⽅的物理位置,同时将数据进⾏分组,形成数据帧,采⽤⼴播⽅式,通过传输介质发送给对⽅主机。⽽对于不同⽹段,该数据包⾸先会转发给⽹关路由器,经过多次转发后,最终被发送到⽬标主机。⽬标机接收到数据包后,采⽤对应的协议,对帧数据进⾏组装,然后再通过⼀层⼀层的协议进⾏解析,最终被应⽤层的协议解析并交给服务器处理。
总结
以上内容是对TCP/IP四层模型做了简单的介绍,⽽实际上每⼀层模型都有很多协议,每个协议要做的事情也很多,但我们⾸先得有⼀个清晰的脉络结构,掌握每⼀层模型最基本的作⽤,然后再去丰富细枝末节的东西,也许会更容易理解。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。