cq9电子·(中国)官方网站

cq9电子平台新闻
掌握資訊,了解cq9电子官方网站最新動態

全面解读TCP/IP 协议栈

時間:2020-06-12來源:本站原創

TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及數據如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是應用層、傳輸層、網絡層和鏈路層,每一層都呼叫它的下一層所提供的協議來完成自己的需求。由于我們大部分時間都工作在應用層,下層的事情不用我們操心;其次網絡協議體系本身就很複雜龐大,入門門檻高,因此很難搞清楚TCP/IP的工作原理,通俗一點講就是,一個主機的數據要經過哪些過程才能發送到對方的主機上。 接下来,我们就来探索一下这个过程。


0、物理介質

物理介質就是把電腦連接起來的物理手段,常見的有光纖、雙絞線,以及無線電波,它決定了電信號(0和1)的傳輸方式,物理介質的不同決定了電信號的傳輸帶寬、速率、傳輸距離以及抗幹擾性等等。

TCP/IP協議棧分爲四層,每一層都由特定的協議與對方進行通信,而协议之间的通信最终都要转化为 0 和 1 的电信号,通过物理介质进行传输才能到达对方的电脑,因此物理介質是網絡通信的基石。

下面我們通過一張圖先來大概了解一下TCP/IP協議的基本框架:


当通过http发起一个请求时,應用層、傳輸層、網絡層和鏈路層的相关协议依次对该请求进行包装并携带对应的首部,最終在鏈路層生成以太網數據包,以太網數據包通过物理介质传输给对方主机,对方接收到數據包以后,然后再一层一层采用对应的协议进行拆包,最后把應用層數據交给应用程序处理。

網絡通信就好比送快遞,商品外面的一層層包裹就是各種協議,協議包含了商品信息、收貨地址、收件人、聯系方式等,然後還需要配送車、配送站、快遞員,商品才能最終到達用戶手中。

一般情況下,快遞是不能直達的,需要先轉發到對應的配送站,然後由配送站再進行派件。

配送车就是物理介质,配送站就是網關, 快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址。 

快遞員負責把包裹轉發到各個配送站,配送站根據收獲地址裏的省市區,確認是否需要繼續轉發到其他配送站,當包裹到達了目標配送站以後,配送站再根據聯系方式找到收件人進行派件。  

有了整體概念以後,下面我們詳細了解一下各層的分工。

1、鏈路層

网络通信就是把有特定意义的數據通过物理介质传送给对方,单纯的发送 0 和 1 是没有意义的,要传输有意义的數據,就需要以字节为单位对 0 和 1 进行分组,并且要标识好每一组电信号的信息特征,然后按照分组的顺序依次发送。以太网规定一组电信号就是一个數據包,一个數據包被称为一幀, 制定這個規則的協議就是以太網協議。一个完整的以太網數據包如下图所示:


整個數據幀由首部、數據尾部三部分组成,首部固定为14个字节,包含了目標MAC地址、源MAC地址和类型;數據最短为46个字节,最长为1500个字节,如果需要传输的數據很长,就必须分割成多个帧进行发送;尾部固定为4个字节,表示數據帧校验序列,用于确定數據包在传输过程中是否损坏。因此,以太網協議通过对电信号进行分组并形成數據。缓笸ü锢斫橹拾褦祿》⑺透邮辗。那么以太网如何来识接收方的身份呢?

以太網規協議定,接入網絡的設備都必須安裝網絡適配器,即網卡, 數據包必须是从一块网卡传送到另一块网卡。而網卡地址就是數據包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每塊網卡的身份標識,就如同我們身份證上的身份證號碼,具有全球唯一性。MAC地址采用十六進制標識,共6個字節, 前三個字節是廠商編號,後三個字節是網卡流水號,例如 4C-0F-6E-12-D2-19

有了MAC地址以後,以太網采用廣播形式,把數據包发给该子網內所有主机,子網內每台主机在接收到这个包以后,都会读取首部里的目標MAC地址,然後和自己的MAC地址進行對比,如果相同就做下一步處理,如果不同,就丟棄這個包。

所以鏈路層的主要工作就是对电信号进行分组并形成具有特定意义的數據。缓笠詮V播的形式通过物理介质发送给接收方。

2、網絡層

對于上面的過程,有幾個細節問題值得我們思考:

發送者如何知道接收者的MAC地址?

發送者如何知道接收者和自己同屬一個子網?

如果接收者和自己不在同一个子网,數據包如何发给对方?

爲了解決這些問題,網絡層引入了三個協議,分別是IP協議ARP協議、路由協議。

【1】IP協議

通過前面的介紹我們知道,MAC地址只與廠商有關,與所處的網絡無關,所以無法通過MAC地址來判斷兩台主機是否屬于同一個子網。

因此,網絡層引入了IP協議,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的IP地址。

IP地址目前有兩個版本,分別是IPv4IPv6,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數據包由首部和數據两部分组成,首部长度为20个字节,主要包含了目标IP地址和源IP地址,目标IP地址是網關路由的线索和依据;數據部分的最大长度为65515字节,理论上一个IP數據包的总长度可以达到65535个字节,而以太網數據包的最大长度是1500个字符,如果超过这个大。托枰訧P數據包进行分割,分成多帧发送。

所以,網絡層的主要工作是定义网络地址,区分网段,子網內MAC寻址,对于不同子网的數據包进行路由。

3、傳輸層

鏈路層定义了主机的身份,即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協議可以保证數據传输的可靠性。

4、應用層

理论上讲,有了以上三层协议的支持,數據已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的數據是字节流,不能很好的被程序识别,操作性差。因此,應用層定义了各种各样的协议来规范數據格式,常见的有 HTTP、FTP、SMTP 等,HTTP 是一种比较常用的應用層协议,主要用于B/S架构之间的數據通信。


在 Resquest Headers 中,Accept 表示客户端期望接收的數據格式,而 ContentType 则表示客户端发送的數據格式;在 Response Headers 中,ContentType 表示服务端响应的數據格式,这里定义的格式,一般是和  Resquest Headers 中 Accept 定义的格式是一致的。

有了这个规范以后,服务端收到请求以后,就能正确的解析客户端发来的數據,当请求处理完以后,再按照客户端要求的格式返回,客户端收到结果后,按照服务端返回的格式进行解析。

所以應用層的主要工作就是定义數據格式并按照对应的格式解读數據。

5、全流程

首先我們梳理一下每層模型的職責:

  • 鏈路層:对0和1进行分组,定义數據。啡现骰奈锢淼刂罚鋽祿
  • 網絡層:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网數據包进行路由转发;
  • 傳輸層:定义端口,确认主机上应用程序的身份,并将數據包交给对应的应用程序;
  • 應用層:定义數據格式,并按照对应的格式解读數據。

然後再把每層模型的職責串聯起來,用一句通俗易懂的話講就是:

当你输入一个网址并按下回车键的时候,首先,應用層协议对该请求包做了格式定义;紧接着傳輸層协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后鏈路層协议加上了双方的MAC地址,确认了双方的物理位置,同时将數據进行分组,形成數據。捎脧V播方式,通过传输介质发送给对方主机。而对于不同网段,该數據包首先会转发给網關路由器,经过多次转发后,最终被发送到目标主机。目标机接收到數據包后,采用对应的协议,对帧數據进行组装,然后再通过一层一层的协议进行解析,最终被應用層的协议解析并交给服务器处理。

6、總結

以上內容是對TCP/IP四層模型做了簡單的介紹,而實際上每一層模型都有很多協議,每個協議要做的事情也很多,但我們首先得有一個清晰的脈絡結構,掌握每一層模型最基本的作用,然後再去豐富細枝末節的東西,也許會更容易理解。

计讯物联——物联网産品与行业解决方案提供商。
All Rights Reserved 廈門cq9电子官方网站物聯科技有限公司版權所有 閩ICP備15001895號 闽公网安备 35021102001331号
【网站地图】【sitemap】