乐趣区

关于计算机网络:计算机网络通信原理

文章目录
一、网络的由来?
二、网络协议介绍
三、五层模型解说
3.1、物理层
3.2 数据链路层
3.2.1 Ethernet 以太网
3.2.1.1 以太网协定
3.2.1.2 数据帧传输
3.2.1.3 mac 地址
3.2.1.4 单播
3.2.1.5 播送
3.2.1.6 组播
3.2.1.7 总结
3.2.2 MTU
3.2.2.1 门路 MTU
3.2.2.2 门路 MTU 的发现办法
3.2.2.3 TraceRoute
3.3、网络层
3.3.1 IP 协定:
3.3.2 子网掩码
3.3.3 ip 数据包
3.3.3.1 IP 数据包组成
3.3.3.2 IP 分片原理
3.3.3.3 把握 ip 选路
3.3.4 ARP 协定
3.3.4.1 arp 报文格式
3.3.4.2 arp 查问原理
3.3.4.3 arp 缓存
3.3.5 ICMP 协定
3.4、传输层
3.4.1 udp 协定
3.4.2 tcp 协定
3.4.2.1 tcp 报文
3.4.2.2 tcp 连贯管制
3.4.2.3 TCP 流量管制机制(四个机制 = 4 个算法)
3.4.2.4 超时重传机制
3.4.3 为什么 UDP 和 TCP 要有伪首部
3.5、应用层
3.5.1 DNS 协定
3.5.2 FTP 协定
3.5.3 http 协定
3.5.3 https 协定
3.6、Socket
三、网络通信实现
3、1 每台主机实现网络通信的根本四因素
3.2 获取这四因素分两种形式
3.2.1 动态获取
3.2.3 动静获取
四、例举主机拜访网站的网络通信过程
4.1 整个过程根本分做上面几个局部
4.2 上面别离进行具体阐明
4.2.1 域名解析成 IP 地址
4.2.2 与目标主机进行 TCP 连贯(三次握手)
4.2.3 发送与收取数据
4.2.4 与目标主机断开 TCP 连贯(四次挥手)
4.2.5 总结一下

一、网络的由来?
互联网的实质就是一系列的网络协议。

一台硬设有了操作系统,而后装上软件你就能够失常应用了,每个人都领有一台本人的机器,然而彼此孤立。

如何能让大家一起游玩,就有了初步的网络,其实两台计算机之间通信与两个人打电话之间通信的原理是一样的,普通话属于中国国内人与人之间通信的规范,那如果是两个国家的人交换呢?问题是,你不可能要求一个人/计算机把握全世界的语言/规范,于是有了世界对立的通信规范:英语

论断:英语成为世界上所有人通信的统一标准,如果把计算机看成散布于世界各地的人,那么连贯两台计算机之间的 internet 实际上就是一系列对立的规范,这些规范称之为互联网协议,互联网的实质就是一系列的协定,总称为’互联网协议’(Internet Protocol Suite).

互联网协议的性能:定义计算机如何接入 internet,以及接入 internet 的计算机通信的规范。

二、网络协议介绍
互联网协议依照性能不同分为 osi 七层或 tcp/ip 五层

分层模型 -TCP/IP

TCP/IP 模型同样采纳了分层构造,层与层绝对独立然而相互之间也具备十分亲密的协作关系。

TCP/IP 模型将网络分为四层。TCP/IP 模型不关注底层物理介质,次要关注终端之间的逻辑数据流转发。TCP/IP 模型的外围是网络层和传输层:网络层解决网络之间的逻辑转发问题,传输层保障源端到目标端之间的牢靠传输。最上层的应用层通过各种协定向终端用户提供业务利用。

每层运行常见物理设施

数据封装

利用数据须要通过 TCP/IP 每一层解决之后能力通过网络传输到目标端,每一层上都应用该层的协定数据单元 PDU(ProtocolDataUnit)彼此替换信息。

Segment(数据段):如下层数据在传输层增加 TCP 报头后失去的 PDU;
Packet(数据包):数据段被传递给网络层,网络层增加 IP 报头失去的 PDU;
Frame(数据帧):数据包被传递到数据链路层,封装数据链路层报头失去的 PDU;
最初,帧被转换为比特,通过网络介质传输。这种协定栈逐层向下传递数据,并增加报头和报尾的过程称为封装。

三、五层模型解说
咱们将应用层,表示层,会话层并作应用层,从 tcp/ip 五层协定的角度来论述每层的由来与性能,搞清楚了每层的次要协定,就了解了整个互联网通信的原理。

首先,用户感知到的只是最下面一层应用层,自上而下每层都依赖于下一层,所以咱们从最下一层开始切入,比拟好了解每层都运行特定的协定,越往上越凑近用户,越往下越凑近硬件

3.1、物理层
下面提到,孤立的计算机之间要想一起玩,就必须接入 internet,话中有话就是计算机之间必须实现组网

物理层性能:次要是基于电器个性发送高下电压(电信号),高电压对应数字 1,低电压对应数字 0

3.2 数据链路层
单纯的电信号 0 和 1 没有任何意义,必须规定电信号多少位一组,每组什么意思

数据链路层的性能:定义了电信号的分组形式

3.2.1 Ethernet 以太网
Ethernet 帧格局的倒退

1980 DEC,Intel,Xerox 制订了 Ethernet I 的规范
1982 DEC,Intel,Xerox 又制订了 Ehternet II 的规范
1982 IEEE 开始钻研 Ethernet 的国际标准 802.3
1983 急不可待的 Novell 基于 IEEE 的 802.3 的原始版开发了专用的 Ethernet 帧格局
1985 IEEE 推出 IEEE 802.3 标准, 起初为解决 EthernetII 与 802.3 帧格局的兼容问题,
推出折衷的 Ethernet SNAP 格局

(其中晚期的 Ethernet I 曾经齐全被其余帧格局取代了 , 所以当初 Ethernet 只能见到前面几种 Ethernet 的帧格局,
当初大部分的网络设备都反对这几种 Ethernet 的帧格局,
如:cisco 的路由器再设定 Ethernet 接口时能够指定不同的以太网的帧格局:arpa,sap,snap,novell-ether)

3.2.1.1 以太网协定
数据包在以太网物理介质上流传之前必须封装头部和尾部信息。封装后的数据包称为称为数据帧,数据帧中封装的信息决定了数据如何传输。以太网上传输的数据帧有两种格局,抉择哪种格局由 TCP/IP 协定簇中的网络层决定。

晚期的时候各个公司都有本人的分组形式,起初造成了对立的规范,即以太网协定 ethernet

ethernet 规定:一组电信号形成一个数据包,叫做’帧’,每一数据帧分成:报头 head 和数据 data 两局部

Ethernet_II 帧格局:

Ethernet_II 的帧中各字段阐明如下:

head 蕴含:(固定 14 个字节)
发送者/源地址,6 个字节
接收者/指标地址,6 个字节
数据类型 2 个字节,类型字段(Type)用于标识数据字段中蕴含的高层协定。类型字段取值为 0x0800 的帧代表 IP 协定帧;类型字段取值为 0806 的帧代表 ARP 协定帧。
data 蕴含:(最短 46 字节,最长 1500 字节)
数据包的具体内容:head 长度+data 长度=最短 64 字节,最长 1518 字节,超过最大限度就分片发送
FCS 循环冗余校验字段提供了一种谬误检测机制。该字段长度为 4 个字节。
3.2.1.2 数据帧传输

数据链路层基于 MAC 地址进行帧的传输。
以太网在二层链路上通过 MAC 地址来惟一标识网络设备,并且实现局域网上网络设备之间的通信。MAC 地址也叫物理地址,大多数网卡厂商把 MAC 地址烧入了网卡的 ROM 中。发送端应用接收端的 MAC 地址作为目标地址。以太帧封装实现后会通过物理层转换成比特流在物理介质上传输。

3.2.1.3 mac 地址
head 中蕴含的源和指标地址由来:ethernet 规定接入 internet 的设施都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即 mac 地址。

mac 地址:每块网卡出厂时都被烧制上一个世界惟一的 mac 地址,长度为 48 位 2 进制,通常由 12 位 16 进制数示意(前六位是厂商编号,后六位是流水线号)

例如,华为的网络产品的 MAC 地址前 24 比特是 0x00e0fc。后 24 位序列号是厂商调配给每个产品的惟一数值,由各个厂商自行调配(这里所说的产品能够是网卡或者其余须要 MAC 地址的设施)。

3.2.1.4 单播

局域网上的帧能够通过三种形式发送。第一种是单播,指从繁多的源端发送到繁多的目标端。每个主机接口由一个 MAC 地址惟一标识,MAC 地址的 OUI 中,第一字节第 8 个比特示意地址类型。对于主机 MAC 地址,这个比特固定为 0,示意目标 MAC 地址为此 MAC 地址的帧都是发送到某个惟一的目标端。在抵触域中,所有主机都能收到源主机发送的单播帧,然而其余主机发现目标地址与本地 MAC 地址不统一后会抛弃收到的帧,只有真正的目标主机才会接管并解决收到的帧。

3.2.1.5 播送
有了 mac 地址,同一网络内的两台主机就能够通信了(一台主机通过 arp 协定获取另外一台主机的 mac 地址)ethernet 采纳最原始的形式,播送的形式进行通信,即计算机通信根本靠吼

第二种发送形式是播送,示意帧从繁多的源发送到共享以太网上的所有主机。播送帧的目标 MAC 地址为十六进制的 FF:FF:FF:FF:FF:FF,所有收到该播送帧的主机都要接管并解决这个帧。

播送形式会产生大量流量,导致带宽利用率升高,进而影响整个网络的性能。

当须要网络中的所有主机都能接管到雷同的信息并进行解决的状况下,通常会应用播送形式。

3.2.1.6 组播
第三种发送形式为组播,组播比播送更加高效。组播转发能够了解为选择性的播送,主机侦听特定组播地址,接管并解决目标 MAC 地址为该组播 MAC 地址的帧。

组播 MAC 地址和单播 MAC 地址是通过第一字节中的第 8 个比特辨别的。组播 MAC 地址的第 8 个比特为 1,而单播 MAC 地址的第 8 个比特为 0。

当须要网络上的一组主机(而不是全副主机)接管雷同信息,并且其余主机不受影响的状况下通常会应用组播形式。

3.2.1.7 总结
网络设备如何确定以太网数据帧的下层协定?

以太网帧中蕴含一个 Type 字段,示意帧中的数据应该发送到下层哪个协定解决。比方,IP 协定对应的 Type 值为 0x0800,ARP 协定对应的 Type 值为 0x0806。

终端设备接管到数据帧时,会如何解决?

主机查看帧头中的目标 MAC 地址,如果目标 MAC 地址不是本机 MAC 地址,也不是本机侦听的组播或播送 MAC 地址,则主机会抛弃收到的帧。如果目标 MAC 地址是本机 MAC 地址,则接管该帧,查看帧校验序列(FCS)字段,并与本机计算的值比照来确定帧在传输过程中是否放弃了完整性。如果查看通过,就会剥离帧头和帧尾,而后依据帧头中的 Type 字段来决定把数据发送到哪个下层协定进行后续解决。

Ethernet II 比 IEEE802.3 SAP 和 SNAP 更适宜于传输大量的数据,但 Ethernet II 不足对数据链路层的管制,不利于传输须要严格传输管制的数据。理论中,大多数应用程序的以太网数据包都是 Ethernet II 帧的(HTTP/Telnet/FTP/SMTP/PO P3 等利用),而交换机之间的 BPDU 是采纳 IEEE802.3 SAP 帧,VLAN Trunk 协定 802.1Q 和 Cisco CDP 都是采纳 IEEE802.3 SNAP 帧。

3.2.2 MTU
MTU 即 Maximum Transmission Unit 最大传输单元。它是指一种通信协议的某一层下面所能通过的最大数据包大小(以字节为单位)。

3.2.2.1 门路 MTU
门路 MTU 是指一条因特网传输门路中,从源地址到目标地址所通过的“门路”上的所有 IP 跳的最大传输单元的最小值。
或者从另外一个角度来看,就是无需进行分片解决就能穿过这条“门路”的最大传输单元的最大值。

3.2.2.2 门路 MTU 的发现办法
这是确定两个 IP 主机之间门路最大传输单元的技术,其目标就是为了防止 IP 分片。
首先源地址将数据报的 DF 地位位,在逐步增大发送的数据报的大小——门路上任何须要将分组进行分片的设施都会将这种数据报抛弃并返回“数据报过大“的 ICMP 响应
到源地址——这样源主机就”学习“到了无需分片就能通过这条门路的最大的最大传输单元。

3.2.2.3 TraceRoute
Traceroute 是用来侦测主机到目标主机之间所经路由状况的重要工具。
它的原理如下:它受到目标主机的 IP 后,首先给目标主机发送一个 TTL= 1 的 UDP 数据包(每次送出的为 3 个 40 字节的包,包含源地址,目标地址和包收回的工夫标签),
而通过的第一个路由器收到这个数据包当前,就主动把 TTL 减 1,而 TTL 变为 0 当前,路由器就把这个包给摈弃了,并同时产生 一个主机不可达的 ICMP 数据报给主机。
主机收到这个数据报当前再发一个 TTL= 2 的 UDP 数据报给目标主机,而后刺激第二个路由器给主机发 ICMP 数据报。如此往返直到达到目标主机。这样,traceroute 就拿到了所有的路由器 ip。

Traceroute 提取发送 ICMP TTL 到期音讯设施的 IP 地址并作域名解析。每次,Traceroute 都打印出一系列数据, 包含所通过的路由设施的域名及 IP 地址, 三个包每次来回所花工夫。

3.3、网络层
有了 ethernet、mac 地址、播送的发送形式,世界上的计算机就能够彼此通信了,问题是世界范畴的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采纳以太网的播送形式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种劫难

上图论断:必须找出一种办法来辨别哪些计算机属于同一播送域,哪些不是,如果是就采纳播送的形式发送,如果不是,就采纳路由的形式(向不同播送域/子网散发数据包),mac 地址是无奈辨别的,它只跟厂商无关。

网络层性能:引入一套新的地址用来辨别不同的播送域/子网,这套地址即网络地址

3.3.1 IP 协定:
规定网络地址的协定叫 ip 协定,它定义的地址称之为 ip 地址,宽泛采纳的 v4 版本即 ipv4,它规定网络地址由 32 位 2 进制示意,范畴 0.0.0.0-255.255.255.255,一个 ip 地址通常写成四段十进制数,例:172.16.10.1

ip 地址分成两局部:

网络局部:标识子网
主机局部:标识主机
留神:单纯的 ip 地址段只是标识了 ip 地址的品种,从网络局部或主机局部都无奈辨识一个 ip 所处的子网

例:172.16.10.1 与 172.16.10.2 并不能确定二者处于同一子网

3.3.2 子网掩码
所谓 ” 子网掩码 ”,就是示意子网络特色的一个参数。它在模式上等同于 IP 地址,也是一个 32 位二进制数字,它的网络局部全副为 1,主机局部全副为 0。比方,IP 地址 172.16.10.1,如果已知网络局部是前 24 位,主机局部是后 8 位,那么子网络掩码就是 11111111.11111111.11111111.00000000,写成十进制就是 255.255.255.0。

晓得 ” 子网掩码 ”,咱们就能判断,任意两个 IP 地址是否处在同一个子网络。办法是将两个 IP 地址与子网掩码别离进行 AND 运算(两个数位都为 1,运算后果为 1,否则为 0),而后比拟后果是否雷同,如果是的话,就表明它们在同一个子网络中,否则就不是。

比方,已知 IP 地址 172.16.10.1 和 172.16.10.2 的子网掩码都是 255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码别离进行 AND 运算,

总结一下,IP 协定的作用次要有两个:一个是为每一台计算机调配 IP 地址,另一个是确定哪些地址在同一个子网络。

3.3.3 ip 数据包
3.3.3.1 IP 数据包组成
ip 数据包也分为 head 和 data 局部,毋庸为 ip 包定义独自的栏位,间接放入以太网包的 data 局部

head:长度为 20 到 60 字节
data:最长为 65,515 字节。
而以太网数据包的 ” 数据 ” 局部,最长只有 1500 字节。因而,如果 IP 数据包超过了 1500 字节,它就须要宰割成几个以太网数据包,离开发送了。

把握 IP 首部格局如 16 位分片标识、DF 不分片标记、MF 更多分片标记↓13 位片偏移,8 位生存工夫 TTL,16 位的首部测验和等等

3.3.3.2 IP 分片原理
如何防止 ip 分片(在应用层或传输层做限度),确定 ip 分片的程序,客户端如何确认分片全副达到

3.3.3.3 把握 ip 选路
3.3.4 ARP 协定
arp 协定由来:计算机通信根本靠吼,即播送的形式,所有下层的包到最初都要封装上以太网头,而后通过以太网协定发送,在谈及以太网协定时候,我门理解到通信是基于 mac 的播送形式实现,计算机在发包时,获取本身的 mac 是容易的,如何获取指标主机的 mac,就须要通过 arp 协定

arp 协定性能:播送的形式发送数据包,获取指标主机的 mac 地址

协定工作形式:每台主机 ip 都是已知的

3.3.4.1 arp 报文格式
3.3.4.2 arp 查问原理
3.3.4.3 arp 缓存
3.3.5 ICMP 协定
把握 ICMP 协定的报文格式、报文的两大分类: 查问 + 过错,2 种查问报文 + 5 种过错报文

3.4、传输层
网络层的 ip 帮咱们区分子网,以太网层的 mac 帮咱们找到主机,而后大家应用的都是应用程序,你的电脑上可能同时开启 qq,暴风影音,等多个应用程序,那么咱们通过 ip 和 mac 找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

传输层性能:建设端口到端口的通信

补充:端口范畴 0 -65535,0-1023 为零碎占用端口

3.4.1 udp 协定
把握 UDP 协定:包含特点 + 首部各个字段

不牢靠传输,” 报头 ” 局部一共只有 8 个字节,总长度不超过 65,535 字节,正好放进一个 IP 数据包。

3.4.2 tcp 协定
牢靠传输,TCP 数据包没有长度限度,实践上能够有限长,然而为了保障网络的效率,通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不用再宰割。

3.4.2.1 tcp 报文
把握 TCP 协定:特点十 首部字段 + 牢靠机制厂

3.4.2.2 tcp 连贯管制
五种状况:三次握手、四次挥手、同时关上、同时敞开、半敞开

3.4.2.3 TCP 流量管制机制(四个机制 = 4 个算法)
滑动窗口、慢启动、拥塞防止、疾速重传、疾速复原

3.4.2.4 超时重传机制
各种定时器

3.4.3 为什么 UDP 和 TCP 要有伪首部
3.5、应用层
用户应用的都是应用程序,均工作于应用层,互联网是开发的,大家都能够开发本人的应用程序,数据多种多样,必须规定好数据的组织模式

应用层性能:规定应用程序的数据格式。

例:TCP 协定能够为各种各样的程序传递数据,比方 Email、WWW、FTP 等等。那么,必须有不同协定规定电子邮件、网页、FTP 数据的格局,这些应用程序协定就形成了 ” 应用层 ”。

3.5.1 DNS 协定
把握 DNS 协定的名字空间、DNS 指针查问 (反向查找或逆向解近) 基本原理,DNS 缓存

3.5.2 FTP 协定
两条连贯:管制连贯 + 数据连贯;
两种工作模式: PASV + PORT;
各种 FTP 指令 和 响应码;
FTP 断点续传、匿名 FTP;

3.5.3 http 协定
把握开 TP 协定:
1. 报文格式: 申请报文、响应报文、申请头各种字段、响应头各种字段

  1. http 状态码

3.5.3 https 协定
https 协定:

https 的具体握手过程
2. 摘要算法、数字签名、数学证书的原理和过程
3.6、Socket
咱们晓得两个过程如果须要进行通信最根本的一个前提能可能惟一的标示一个过程,在本地过程通信中咱们能够应用 PID 来惟一标示一个过程,但 PID 只在本地惟一,网络中的两个过程 PID 抵触几率很大,这时候咱们须要另辟它径了,咱们晓得 IP 层的 ip 地址能够惟一标示主机,而 TCP 层协定和端口号能够惟一标示主机的一个过程,这样咱们能够利用 ip 地址+协定+端口号惟一标示网络中的一个过程。

可能惟一标示网络中的过程后,它们就能够利用 socket 进行通信了,什么是 socket 呢?咱们常常把 socket 翻译为套接字,socket 是在应用层和传输层之间的一个形象层,它把 TCP/IP 层简单的操作形象为几个简略的接口供应用层调用已实现过程在网络中通信。

socket 起源于 UNIX,在 Unix 所有皆文件哲学的思维下,socket 是一种 ” 关上—读 / 写—敞开 ” 模式的实现,服务器和客户端各自保护一个 ” 文件 ”,在建设连贯关上后,能够向本人文件写入内容供对方读取或者读取对方内容,通信完结时敞开文件。

三、网络通信实现
3、1 每台主机实现网络通信的根本四因素
本机的 IP 地址
子网掩码
网关的 IP 地址
DNS 的 IP 地址
3.2 获取这四因素分两种形式
3.2.1 动态获取
即手动配置

3.2.3 动静获取
通过 dhcp 获取

最后面的 ” 以太网标头 ”,设置收回方(本机)的 MAC 地址和接管方(DHCP 服务器)的 MAC 地址。前者就是本机网卡的 MAC 地址,后者这时不晓得,就填入一个播送地址:FF-FF-FF-FF-FF-FF。
前面的 ”IP 标头 ”,设置收回方的 IP 地址和接管方的 IP 地址。这时,对于这两者,本机都不晓得。于是,收回方的 IP 地址就设为 0.0.0.0,接管方的 IP 地址设为 255.255.255.255。
最初的 ”UDP 标头 ”,设置收回方的端口和接管方的端口。这一部分是 DHCP 协定规定好的,收回方是 68 端口,接管方是 67 端口。
这个数据包结构实现后,就能够收回了。以太网是播送发送,同一个子网络的每台计算机都收到了这个包。因为接管方的 MAC 地址是 FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须剖析这个包的 IP 地址,能力确定是不是发给本人的。当看到收回方 IP 地址是 0.0.0.0,接管方是 255.255.255.255,于是 DHCP 服务器晓得 ” 这个包是发给我的 ”,而其余计算机就能够抛弃这个包。

接下来,DHCP 服务器读出这个包的数据内容,调配好 IP 地址,发送回去一个 ”DHCP 响应 ” 数据包。这个响应包的构造也是相似的,以太网标头的 MAC 地址是单方的网卡地址,IP 标头的 IP 地址是 DHCP 服务器的 IP 地址(收回方)和 255.255.255.255(接管方),UDP 标头的端口是 67(收回方)和 68(接管方),调配给申请端的 IP 地址和本网络的具体参数则蕴含在 Data 局部。

新退出的计算机收到这个响应包,于是就晓得了本人的 IP 地址、子网掩码、网关地址、DNS 服务器等等参数。

四、例举主机拜访网站的网络通信过程
首先关上浏览器,在地址栏输出 URL,回车,呈现网站内容。这是咱们简直每天都在做的事,那这个过程中到底是什么原理呢?HTTP、TCP、DNS、IP 这些耳熟能详的名词都在什么时候起着什么作用呢?在这里整体梳理一遍。

4.1 整个过程根本分做上面几个局部
域名解析成 IP 地址;
与目标主机进行 TCP 连贯(三次握手);
发送与收取数据;
与目标主机断开 TCP 连贯(四次挥手);
4.2 上面别离进行具体阐明
4.2.1 域名解析成 IP 地址
首先说什么是域名解析?

咱们在浏览器地址栏中输出的都是相似 ”www.baidu.com”、”www.qq.com” 等等容易记忆的英文域名,但这些字母你间接交给整个网络线路去寻找目标主机找失去吗?找不到,因为每个主机在网络中的地位都是以 IP 标识的,IP 才是主机在网络中的地位,域名只是为了不便用户记忆而已,这就要求浏览器可能辨认域名并且将其转化为对应的 IP 地址。

所以浏览器会有一个 DNS 缓存,其中记录了一些域名与 IP 的对应关系,供浏览器疾速查找须要的 IP。然而这个 DNS 缓存不可能存下所有的域名 -IP 地址,何况 IP 地址有时候还会变动,因而当在 DNS 缓存中没有找到的时候,就要先向 DNS 服务器申请域名解析,咱们常听到的 DNS 服务器很大的作用就是进行域名解析。

值得一提的是,DNS 域名解析时用的是 UDP 协定。

整个域名解析的过程如下:

浏览器向本机 DNS 模块收回 DNS 申请,DNS 模块生成相干的 DNS 报文;
DNS 模块将生成的 DNS 报文传递给传输层的 UDP 协定单元;
UDP 协定单元将该数据封装成 UDP 数据报,传递给网络层的 IP 协定单元;
IP 协定单元将该数据封装成 IP 数据包,其目标 IP 地址为 DNS 服务器的 IP 地址;
封装好的 IP 数据包将传递给数据链路层的协定单元进行发送;
发送时在 ARP 缓存中查问相干数据,如果没有,就发送 ARP 播送(蕴含待查问的 IP 地址,收到播送的主机查看本人的 IP,符合条件的主机将含有本人 MAC 地址的 ARP 包发送给 ARP 播送的主机)申请,期待 ARP 回应;
失去 ARP 回应后,将 IP 地址与路由的下一跳 MAC 地址对应的信息写入 ARP 缓存表;
写入缓存后,以路由下一跳的地址填充目标 MAC 地址,以数据帧模式转发;
转发可能进行屡次;
DNS 申请达到 DNS 服务器的数据链路层协定单元;
DNS 服务器的数据链路层协定单元解析数据帧,将外部的 IP 数据包传递给网络层 IP 协定单元;
DNS 服务器的 IP 协定单元解析 IP 数据包,将外部的 UDP 数据报传递给传输层 UDP 协定单元;
DNS 服务器的 UDP 协定单元解析收到的 UDP 数据报,将外部的 DNS 报文传递给 DNS 服务单元;
DNS 服务单元将域名解析成对应 IP 地址,产生 DNS 回应报文;
DNS 回应报文 ->UDP->IP->MAC-> 我的主机;
我的主机收到数据帧,将数据帧 ->IP->UDP-> 浏览器;
将域名解析后果以域名和 IP 地址对应的模式写入 DNS 缓存表。
其中提到了一个 ARP 的概念,相似于 DNS 将域名翻译成 IP,ARP 则是将 IP 翻译成 MAC 地址,咱们晓得了 IP 后,须要通过主机的 MAC 地址来更具体的找到主机。同样的也有一个 ARP 缓存,其中存储了一些 IP 与 MAC 地址的对应关系,如果缓存中找不到,就会进行播送来查找 MAC 地址,收到播送的主机会查看本人的 IP 是否是待查找的 IP,是的话就返回本人的 MAC 地址。

端口:如果做开发,往往还会接触到端口这个概念,那端口是什么呢?这里是指 TCP/IP 协定中的端口,端口号的范畴从 0 到 65535,比方用于浏览网页服务的 80 端口,用于 FTP 服务的 21 端口等等,都有一些固定的端口号,被占用后就不能被别的服务拿来传输数据了。

4.2.2 与目标主机进行 TCP 连贯(三次握手)
失去域名对应的 IP 地址后,也就示意能够将数据送达目标主机了,这时候才开始咱们常说的三次握手建设连贯。

HTTP 的申请时应用 TCP 进行传输的,能够保障牢靠传输,并且有序,而 TCP 是有连贯的传输,也就是在传输数据之前,会建设我的主机与目标主机之间的连贯,而后能力传输数据,传输实现后,还有断开连接。这也就是 TCP 的三次握手和四次挥手,大抵过程如下图所示:

具体的三次握手建设连贯的过程如下表述,其中数据包的传输过程相似上文申请 DNS 服务器时的过程,就简略的示意一下:

向目标主机发送 TCP 连贯申请报文;
该 TCP 报文中 SYN 标记位设为 1,示意连贯申请;
该 TCP 报文通过 IP(DNS)->MAC(ARP)-> 网关 -> 目标主机;
目标主机收到数据帧,通过 IP->TCP,TCP 协定单元回应申请应答报文;
该报文中 SYN 和 ACK 标记设为 1,示意连贯申请应答;
该 TCP 报文通过 IP(DNS)->MAC(ARP)-> 网关 -> 我的主机;
我的主机收到数据帧,通过 IP->TCP,TCP 协定单元回应申请确认报文;
该 TCP 报文通过 IP(DNS)->MAC(ARP)-> 网关 -> 目标主机;
目标主机收到数据帧,通过 IP->TCP,连贯建设实现。
三次握手的过程就是一去一回一去,相互确认一下,就建设连贯啦。这个过程中任何一个报文出错或者超时,都要进行重传。

4.2.3 发送与收取数据
如上所说,只有建设连贯后能力开始传输数据,数据其实有多种传输方式,比方分段啊分组啊分时啊等等。而一个数据包的传输过程如下所示,以 HTTP 的 GET 办法申请为例:

浏览器向域名收回 GET 办法报文;
该 GET 办法报文通过 TCP->IP(DNS)->MAC(ARP)-> 网关 -> 目标主机;
目标主机收到数据帧,通过 IP->TCP->HTTP,HTTP 协定单元会回应 HTTP 协定格局封装好的 HTML 模式数据;
该 HTML 数据通过 TCP->IP(DNS)->MAC(ARP)-> 网关 -> 我的主机;
我的主机收到数据帧,通过 IP->TCP->HTTP-> 浏览器,浏览器以网页模式显示 HTML 内容。
其余的 HTTP 办法在传输数据时办法都相似,只是所携带的内容不同。

4.2.4 与目标主机断开 TCP 连贯(四次挥手)
数据传输实现后须要断开连接,与建设时不同,断开连接须要多一次,有四次挥手,至于为什么,看完过程咱们再讲。

看图了解过程:

过程如下:

浏览器向目标主机收回 TCP 连贯完结申请报文,此时进入 FIN WAIT 状态;
该报文 FIN 标记位设为 1,示意完结申请;
TCP 完结申请报文通过 IP(DNS)->MAC(ARP)-> 网关 -> 目标主机;
目标主机收到数据帧,通过 IP->TCP,TCP 协定单元回应完结应答报文;
以后只是进行回应,因为目标主机可能还有数据要传,并不急着断开连接;
该报文中 ACK 标记位设为 1,示意收到完结申请;
目标数据发送完所有数据后,向我的主机收回 TCP 连贯完结申请报文;
该报文 FIN 标记位设为 1,示意完结申请;
TCP 完结申请报文通过 IP(DNS)->MAC(ARP)-> 网关 -> 我的主机;
我的主机收到数据帧,通过 IP->TCP,TCP 协定单元回应完结应答报文,此时进入 TIME WAIT 状态,因为不置信网络是牢靠的,如果目标主机没收到还能够重发;
该报文中的 FIN 标记位均设为 1,示意完结应答;
该 TCP 回应报文通过 IP(DNS)->MAC(ARP)-> 网关 -> 目标主机;
目标主机敞开连贯;
TIME WAIT 期待完结后,没有收到回复,阐明目标失常敞开了,我的主机也敞开连贯。
这里的过程是以我的主机被动发动完结申请开始的,实际上也能够由目标主机被动发动,那么过程就会跟下面相同,但细节差不多。

FIN_WAIT 状态是被动发动申请时期待确认信息,而 TIME_WAIT 状态是收到完结申请后发送确认信息后期待看是否须要重发。

当初来说说为什么断开连接时须要四次挥手呢?因为建设连贯时目标主机能够间接发送 SYN(同步)+ACK(应答)报文。而当断开时,目标主机收到 FIN 后可能还有数据要发,并不一定间接断开,所以先发送一次应答,告知我的主机收到了申请,等确认所有数据都发完了,再发送 FIN,同时期待我的主机应答,这里的 FIN 和 ACK 就不能一起发送,所以须要四次。

4.2.5 总结一下
以上就是主机拜访网站时的网络通信全过程,归纳起来就是:

首先要通过域名找到 IP,如果缓存里没有就要申请 DNS 服务器;失去 IP 后开始于目标主机进行三次握手来建设 TCP 连贯;连贯建设后进行 HTTP 拜访,传输并获取网页内容;传输完后与目标主机四次挥手来断开 TCP 连贯。

退出移动版