TCPIP协议栈详细解释⼩⼩⽩都能看懂!(强烈推荐)
前戏
解析 URL,DNS 查询,获得服务器 IP 地址,向⽬标地址发送 HTTP 请求,服务器收到,响应,返回页⾯,浏览器接收,渲染,bingo!屏幕前的你露出得意笑容,不忘记嘲讽⼀下“就这?就这?”。
停!还没完呢。请问这位同学,你发送的请求是怎么到达⽬标服务器的,服务器的响应⼜是如何回来的?
你陷⼊沉默,说了⼀些 TCP 协议、OSI 模型、路由器之类的词。
此时问题⼜来了:浏览器⼜是如何将请求发送出去的?
这篇⽂章,我将以⽹络通信常⽤的 TCP/IP 模型为主,解释⽹络通信涉及的各个阶段,不管是常规的页⾯访问,还是我们业务中常见的HTTP 请求,都包含在这样的过程中,对开发者们很有益处,好了,安全带系好,开车了。
⽬录
1. TCP/IP 参考模型是什么
2. ⼀次完整的⽹络通信过程
3. 各个阶段的深⼊理解
⼀、TCP/IP参考模型是什么
在进⼊具体的解释之前,我们对 TCP/IP 协议的前世今⾝做⼀个简单回顾。
所谓⽆规矩不成⽅圆,⽹络诞⽣之初,为了保证⽹络通信的有序进⾏,相关组织开始着⼿制定各种通信协议,例如最早的⽹络控制协议(NCP),到后来⽿熟能详的 OSI 七层协议等,整个因特⽹在这些协议的制约下迅速发展。事物总是发展变化的,技术⾃然更新换代。到上⼀世纪 80 年代,美国国防部的 ARPA ⽹(也就是阿帕⽹,互联⽹的⿐祖)项⽬中,TCP、IP 协议最早被提出来得到应⽤,并且由于其优异性迅速成为互联⽹通信的主流通⽤协议。
这⼀协议最早得名是因为两个最重要最先被提出的协议 TCP 和 IP,后来,互联⽹通信的各类协议(HTTP、IP、DNS、TCP、ARP)整体都被纳⼊这⼀协议体系中,被统称为“TCP/IP 协议族”。
也就是说,TCP/IP 协议族最早的确只有 TCP 和 IP 两个协议,现在则是⼀系列与⽹络通信有关的各类协议的集合。对应这⼀协议族,同时发展出了TCP/IP 参考模型,这⼀模型是⼀个抽象出来的分层模型,TCP/IP 协议族中的所有协议被归类到这⼀模型的 4 个层次中,每⼀层相互独⽴,下⼀层为上⼀层提供服务,各个层次间互相协作,完成了互联⽹通信的主要⼯作。
这四个层分别是:⽹络访问层(⼜叫数据链路层或者⽹络接⼝层),⽹络层,传输层,应⽤层,⼤家通常将这四个层次与更为详细的OSI七层模型映射:
在 TCP/IP 参考模型中,各项通信协议各有归属,例如我们在浏览器中常⽤的:HTTP(超⽂本传输协议)、DNS(域名系统)、FTP(⽂件传输协议)、SMTP(简单邮件传输协议等)都是属于应⽤层协议,⽽ TCP、UDP 则属于传输层协议,IP 则属于⽹络层协议。更多的通信协议,⼤家可以搜索了解。我们这篇⽂章主要分析以 HTTP 为主的通信过程。
⼆、⼀次完整的⽹络通信过程
为了对 HTTP 请求的通信过程有⼀个更好的理解,我将从 TCP/IP 四个层次出发,对应各个层次的通信实体,或者媒介(例如浏览器,路由器以及⽹线等),看各个协议是如何在这些通信实体中发⽣作⽤,将⼀个请求发送到服务器,服务器的响应⼜是如何赶回来的。
整体来讲,⼀次完整的通信,很像快递邮递包裹,物品被加上包装,写上地址信息和联系⽅式,经过⼀个⼜⼀个的快递中转站,到达收货⼈的位置,在⽹络请求中,请求的数据就是需要快递的物品,IP 地址和 MAC 地址就是通信的地址,⽹线和路由器、交换机和集线器等就是运输道路和快递中转站,⽹络协议则可以看做快递员和快递政策,⽽和快递类似的是,⽹络通信也会出现丢包(包裹损坏)等情况。所以说,⼀个简单的 HTTP 请求,要完整地拿到请求信息,中间有若⼲操作系统组件、通信协议、通信实体参与,才能保证通信的顺利进⾏。
那么,这个快递过程,具体是怎么进⾏的呢?
其基本原则是,通过分层的顺序,发送端由上往下发送,接收端则由下向上接收。为了保证数据顺利发送到下⼀个层次,会在发送在其头部加上⼀些必要的信息,这些信息是为了保证数据的完整和符合需求的约束信息。发送 HTTP 请求时,经常会设置 Request Header,例如Content-Type:text/html 是向服务器说明,我需要的是 HTML 页⾯,你返回其他东西是不⾏滴。
这些头部信息还可能包含协议信息,请求路径、请求⽅法等,但这仅仅是发⽣在应⽤层,整个通信过
程,经过四个层次,会被依次加上HTTP 请求头,TCP 头部、IP 头部以及以太⽹头部。数据加上这些头部信息之后,才会被发往下⼀层,数据经过重重包装,从你的⽹卡出发,穿过若⼲路由器,⽹线,交换机,到达⽬标服务器所在的⼦⽹,服务器要做的则是相反的过程,它会根据前⾯加上的头部信息,层层解析,最后到达服务器被处理(处理就是服务端程序代码的责任),之后再将响应数据返回。整体过程如下图:
(图⽚来⾃谢希仁版《计算机⽹络》)
tcpip协议pdf数据在各个层次间依次传递,其传递的数据单位我们可以统⼀理解为数据包,数据包在不同的层次有不同的称呼,我们熟悉的是,其从应⽤层出发时,将之称为 HTTP 请求消息(message)或者报⽂,为其加上消息头之后,发送⾄传输层,加上 TCP 头部,叫它报⽂段(segment),到⽹络层,加上 IP 头部,成为 IP 数据包,到了最后的⽹络访问层,其已经套上层层包装,在这⾥在为其加上以太⽹⾸部的同时,还会加上⼀些尾部信息,摇⾝变为帧(framing),这个过程叫做封装过程。不管怎么叫,数据在各个层次间,是以数据包的形式传递,当数据量⼤时,还会出现分包传递的情况。
三、各阶段发⽣了什么
1. DNS 查询
URL 只是为了⼈类更友好识别⽹络程序⽽设置的互联⽹资源的定位标识,浏览器⾸先会对 URL 进⾏解析,获取到请求的协议(https),域名(google),路径(/),由于没有其他⼦域名,也就是查询 google 的默认主页。解析完毕后,DNS 出场。
DNS,也就是域名查询系统,负责 URL 对应的 IP 地址的查询,每个操作系统会内置 Socket 协议库,协议库中有解析器(resolver)专门负责这个过程,⼜是⼀个漫长的过程(当然我们等的时间不会很长),这⾥不再具体展开,感兴趣的同学可以看看我在⽂尾列出的参考资源 How DNS works,其⽤⽣动有趣的动画形式展⽰了这⼀过程,⼗分有趣。
经过 DNS 查询,浏览器拿到了请求资源的 IP 地址。IP 地址,⼜叫⽹际协议地址,是分配给⽹络上设备的数字标识,也就是说,只要联⽹的设备,例如我们的电脑⼿机以及路由器等都是有 IP 地址的。其是我们的请求数据识别服务器在⽹络中的位置的必须标识。
2. Mac 地址查询
IP 地址在⽹络层使⽤,但在实际的数据链路上传递数据时,在同⼀个链路中不同的计算机,其必须要使⽤另⼀个地址来识别—— Mac 地址,⼜叫做物理地址。
说到这⾥,岔开⼀句,在⽹络通信中,我们通常提到三个地址:IP 地址、Mac 地址以及端⼝号,三者分别代表的是:
IP地址:⽹络中互联的主机和路由器的标识。
Mac 地址:每个⽹卡硬件的物理地址。
端⼝号:识别同⼀个主机上不同的应⽤程序,也可以理解为程序地址。
所以,在⼀个⽹络通信中,我们需要⽤到五⼤识别符:源IP地址、⽬标IP地址、协议、源端⼝号和⽬标端⼝号。
⾔归正传,Mac 地址是每⼀个⽹卡被⽣产的时候就写死在其中的,所以其是不变且唯⼀的,那么如何得到服务器的 Mac 地址呢,⼜⼀个协议闪亮登场——ARP。

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