输入网址之后的旅程

网络流程

本文参考《网络是怎样连接的》因为作者是日本人,对于国内来说,有的设备名称有所偏差,但总体是一致的。而且我国互联网事业正在蓬勃发展,但仍没有一本科普也好,概括也好的网络流程书籍,以至于在学习和工作中总会磕磕绊绊。鉴于自己的求知欲,所以归纳总结该书之后,分享给大家

一图概括

在这里插入图片描述

客户端
	接下来开始从客户端讲起
书写URL (URI的子级) 提供访问机制
	URL一般是完整的链接,URI是相对地址(标识抽象或物理资源)
	可以理解为输入了www.baidu.com
浏览器解析URL
	输入链接之后,浏览器解析确定web服务器和文件名

在这里插入图片描述

浏览器生成http请求消息
	每条请求消息中只能写一个URI,所以每次只能获取一个文件
	当打开控制台就可以看到对应的请求消息(其他出现内容的是对于图片、账号、标签等等的请求)

在这里插入图片描述

向DNS服务器查询web服务器IP
解析器(resolver)包含在操作系统的 Socket库 (用于调用网络功能的程序组件集合)

解析器向DNS服务器发送查询消息后,将得到的响应消息提取出IP地址,写入浏览器指定的内存地址中。“根据域名查询IP地址时,浏览器会使用Socket库中的解析器。gethostbyname(解析器的程序名),解析器生成的查询消息通过委托操作系统内部的协议栈 (“TCP/IP协议”)发送给DNS服务器”

如果想更了解析器就需要看操作系统编程原理了

在这里插入图片描述
控制流程转移过程

  1. 应用程序本身的工作暂停
  2. Socket库中的解析器开始运行
  3. 解析器根据DNS格式,生成发送给DNS服务器的消息
  4. 解析器委托协议栈执行发送信息操作
  5. 网卡将消息发送给DNS服务器
  6. DNS服务器逐级查询到消息后,将IP地址写入响应消息并返回给客户端
  7. 经过网络到达客户端
  8. 在经过协议栈被传递给解析器
  9. 解析器取出的IP地址,并传递给应用程序,写入指定的内存地址
委托协议栈发送消息

在这里插入图片描述

  1. 创建套接字阶段

    应用程序调用Socket库中的socket程序组件(socket表示程序组件名称,Socket代表库,“套接字”表示管道两端的接口)
    协议栈分配一个套接字所需的内存空间,然后向其中写入初始状态,并返回给应用程序描述符

  2. 连接阶段

    应用程序调用connect,需要指定描述符、服务器IP地址和端口号并传给协议栈

    描述符:创建套接字时操作系统返回的一个整数(descriptor)应用程序用来识别套接字的机制
    IP地址和端口号:客户端和服务端之间用来识别对方套接字的机制

    协议栈将本地的套接字与服务器套接字进行连接,通信双方交换控制信息(保存在头部,TCP头部,MAC头部,IP头部)

    控制信息:
    - 头部中记录的信息
    - 套接字(协议栈中的内存空间)中记录的信息

  3. 通信阶段 1

    应用程序在内存中准备好要发送的数据,调用write,协议栈通过描述符指定套接字,识别出通信对象。将数据存放在内部的发送缓冲区中,通过判断长度与时间,累计到一定数据后发送到服务器。(会话型的应用程序一般使用直接发送的选项)

    判断MTU:一个网络包的最大长度,以太网中一般为1500字节
    判断MSS:除去头部之后,一个网络包所能容纳的TCP数据的最大长度

在这里插入图片描述

  1. 通信阶段 2

    服务器接收并返回数据后,客户端应用程序,调用read,接受信息。需要指定用于存放接收到的响应消息的内存 地址(接受缓冲区)

  2. 断开阶段

    调用close组件,最终连接断开,套接字被删除
    根据应用种类不同, 客户端和服务器哪一方先执行 close 都有可能。 有些应用中是客户端先执行 close, 而另外一些应用中则是服务器先执行close

创建套接字之后的详细流程

在这里插入图片描述

  1. 客户端,生成SYN为1的TCP包,包含了从客户端到服务器方向通信相关的序号初始值和服务器向客户端发送数据时需要使用的窗口大小,一并发送给服务器。

    SYN为1表示进行连接,Synchronize(同步)告知初始序号使通信双方保持步调一致,仅在连接过程中出现代表发起连接

    TCP接收窗口:TCP接收缓冲区,指接收端得窗口,用来告知发送端自己所能接收得数据量,从而达到一部分流控目的

  2. 服务器返回一个SYN为1得TCP包,包含了初始序号和窗口大小及确认已收到包(1得ACK号返回ACK号时,除了要设置ACK号得值以外,还需要将控制位得ACK比特设为1,这代表ACK号字段有效,接收方也就可以知道这个网络包时来告知ACK号的

  3. 客户端根据服务器发的初始序号计算出表示确认的ACK号的TCP包,返回给服务器

  4. 客户端将请求消息切分成一定大小且每个头部包含序号的数据发送给服务器,序号表示当前发送的是第几个字节的数据

  5. 服务器向客户端返回ACK号

  6. 服务器将应答消息切分成一定大小且每个头部包含序号的数据发送给客户端,序号表示当前发送的是第几个字节的数据

  7. 客户端向服务器返回ACK号

  8. 服务器先发送一个FIN为1得TCP包

  9. 客户端返回一个表示收到确认得ACK号

  10. 客户端发送FIN

  11. 服务端返回ACK号

从编程角度的详细流程

在这里插入图片描述
在这里插入图片描述

到这里就不要详细步骤了,参照上方流程就可以理清大概脉络,因为更多网络编程需要了解深入

CLOSED 假象起点和终点
LISTEN 监听状态,服务器是等待来自客户端连接请求的被动实体
SYN_SENT 套接字正在试图主动建立连接
SYN_RCVD (RECEIVED收到) 处于连接的初始同步状态
ESTABLISHED 连接已建立,能够进行双向数据传递的状态
FIN_WAIT_1 主动发送关闭连接
CLOSE_WAIT 等待关闭这个套接字
FIN_WAIT_2 等待远程套接字关闭
LAST_ACK 等待本地套接字关闭确认
TIME_WAIT 正在等待远程套接字的关闭传送[FIN、ACK、FIN、ACK都完毕,这是主动方的最后一个状态,在过了2MSL时间后变为CLOSED状态]
CLOSING 套接字已关闭,远程套接字正在关闭,(同时关闭)[两端均从 ESTABLISHED变为FIN_WAIT_1。这将导致双方各发送一个 FIN,两个FIN经过网络传送后分别到达另一端。收到 FIN后,状态由FIN_WAIT_1变迁到CLOSING,并发送最后的ACK。当收到最后的ACK时,状态变化为TIME_WAIT。]

IP头部,TCP头部,MAC头部

在这里插入图片描述
TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成包发送给通信对象

TCP模块在数据块得前面加上TCP头部(指定通信对象IP),然后传递给IP模块

IP模块将包的内容当作一整块数据,在前面加上包含控制信息的头部

在这里插入图片描述
ROM保存全世界唯一的MAC地址

网卡中保存的MAC地址会有网卡程序读取并分配给MAC模块

RJ-45 水晶头
PHY 物理接口收发器
MAU 介质连接单元
速率为 100 Mbit/s 以上的以太网中都叫 PHY

网卡驱动

在这里插入图片描述
网卡驱动从IP模块获取包之后,复制到网卡缓冲区,向MAC模块发送发送包命令,MAC模块取出后,在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。然后MAC模块从报头开始将数字信息按每个比特转换为电信号,然后由 PHY(MAU) 将信号转换为可在网线上传输的格式,并发送出去

客户端局域网

交换机和路由器的顺序就不做过多阐述,因为大部分家庭局域网没有交换机这一概念。路由器呢,也集成了交换机的功能,所有两者前后关系,没那么要紧。更多的大型交换机使用在广域网中。

交换机

网卡中的 PHY(MAU)模块负责将包转换成电信号,信号通过 RJ-45 接口进入双绞线。以太网信号的本质是正负变化得电压

信号通过双绞线到交换机网线接口,并由PHY(MAU)模块接收。后将网线中的信号转换成为通用格式,然后转递给MAC模块。MAC模块将信号转换为数字信息,然后通过包末尾的FSC校验错误,没有问题存放到缓冲区。(交换机端口的MAC模块不具备MAC地址)(管理型交换机集成了计算机和交换机两种设备,计算机的部分是具有MAC地址的)

包存入缓冲区后,在MAC地址表中查询对应的MAC地址和端口,并通过交换电路将包发送到相应的端口

交换机会自动更新或删除地址表中的记录,不需要手动维护

路由器

网络包经过交换机之后,到达了路由器

转发模块:负责判断包的转发目的地
端口模块:负责包的收发操作

路由器首先会委托端口的硬件将包接收进来。路由器的端口都具有MAC地址,只接收与自身地址匹配的包,遇到不匹配的包直接丢弃

完成包接收操作后,路由器就会丢弃包开头的MAC头部。MAC头部的作用就是将包送到路由器。而后
路由器根据IP头部中的内容进行包的转发操作。
(a)首先查询路由表判断转发目标
(b)根据最长匹配原则(比特数越长优先级越高),筛选出目标地址并发送
(c)如果无法找出匹配的记录,则丢弃该包,并通过ICMP消息告知发送方(路由表中 0.0.0.0 记录表示“默认路由”且记录优先级是最低的,只有当找不到其他匹配的记录时才会选择这条记录)

路由器中对路由表的维护是与包转发操作相互独立的,在转发包的过程中不需要对路由表的内容进行维护
(a)由人手动维护路由记录
(b)根据路由协议机制RIP、OSPC、BGP,通过路由器之间的信息交换由路由器自行维护路由表的记录

路由器判断下一个转发目标得方法
(a)如果路由表的网关列内容为IP地址,则该地址就是下一个转发目标
(b)如果路由表的网关列内容为空,则IP头部中的接收方IP地址就是下一个转发目标

接入网

ADSL 近几年在我国已经淘汰,光纤入户已经普及,但是不碍于我们去了解网络脉络,只是介于传输介质的不同,但是具体流向和前后关系是一致的
在这里插入图片描述
在这里插入图片描述

ADSL

在这里插入图片描述
ADSL Modem将包拆分成小格子,每一个小格子为一个信元。信元开头是有5个字节的头部,后面是48个字节的数据,用于叫做ATM(以电话线为载体的传统电话技术基础拓展出来的,已经被淘汰)的通讯技术。
之后ADSL采用调制方式:振幅调制(ASK)和相位调制(PSK)相结合的正交振幅调制(QAM)方式,将信元转换成信号

已经淘汰,全当了解

FTTH

在这里插入图片描述
在这里插入图片描述

  • 通过光纤分路连接多个用户的光纤接入模式统称为PON(Passive Optical Network,无源光网络)
  • ONU(Optical Network Unit,光网络单元):离用户最近,ONU设备一般直接安装部署到用户家里,常见的有SFU(Single family Unit,单家庭用户单元)和HGU(Home Gateway Unit,家庭网关单元)两种类型。ONU的一端通过光纤连接到分光器,另一端通过有线或无线方式连接家里的终端设备。
  • SFU(可理解为光猫)一般需配合HGW(Home Gateway,家庭网关,可理解为家用路由器)使用。
    • HGU功能更为强大,集成了光猫和路由器的功能。
    • ODN(Optical Distribution Network,光分配网络 ):通过光纤和分光器为ONU和OLT提供“传输通道”,分光器可以将一路光信号以一定的比例分成多路。
  • OLT(Optical Line Terminal,光线路终端):离用户最远,OLT设备是PON的核心设备,一般安装部署在运营商的机房中,用于将用户数据进行汇总并上送到城域网传输。

分光器让光纤分路,同时连接多个用户,ONU将以太网的电信号转换成光信号之后,会到达OLT。为了防止多个用户同时收发网络包时信号会在分光器产生碰撞,因此,OLT会调整信号发送时机并向ONU下发指令,ONU则根据OLT的指令来发送数,反过来,当BAS端向用户发送数据时,分光器只需要将信号发给所有用户即可(为避免信息泄露,每个包前面加了用于识别ONU的信息)ONU收到信号后转换成以太网电信号。

BAS (BRAS):用来终结用户宽带拨号连接(PPPoE拨号)的一种设备,是拨号用户接入交换机的上联设备

PPPoE
这也就是最主要的认证鉴权

在这里插入图片描述
PPPoE将PPP消息装入以太网网包进行传输
认证过程中会使用

CHAP:加密握手认证协议
PAP:不加密认证协议
RADIUS:认证拨号用户服务
在这里插入图片描述

第一个MAC地址:路由器通过PPPoE的发现机制查询BAS的MAC地址,然后以太网类型填写8864

之后网络包到达BRAS,BRAS将MAC头部和PPPoE头部去掉,取出PPP头部以及后面的部分,然后通过隧道机制将包发送出去

POP

在这里插入图片描述
POP代表接入点,是互联网接入商(ISP)的本地接入点包括(呼叫聚合器、调制解调器组、路由器和高速异步传输方式ATM交换机)
NOC网络运行中心,是运营商的核心设备,从POP传来的网络包都会集中到这里,并1转发到离目的地更近的POP,或转发给其他运营商
IX(IXP)互联网交换中心,不同电信运营商之间为连通各自网络而建立的集中交换平台,国内发展前景仍然以运营商之间直连为主,互联网交换中心未成为主流

服务器局域网

防火墙就不做过多阐述

正向代理

代理(Proxy) 本来的意思并不是“转发”消息, 而是先把消息收下来, 然后“伪装”成原始客户端向 Web 服务器发出访问请求

forward proxy
在这里插入图片描述
客户端必须要进行一些特别的设置才能使用正向代理,需要在浏览器的设置窗口中的“代理服务器”一栏中填写正向代理的 IP 地址
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

反向代理

reverse proxy
反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

CDN的原理就是在智能DNS基础上进行web的反向代理缓存实现的

服务器

大多数服务器已Linux为主,就算是云服务器,也是依托Linux

网卡

当包到达服务器时,会触发中断机制,网卡会接收信号并通知CPU

网卡的 MAC 模块将网络包从模拟信号还原为数字信息, 校验 FCS 并存入缓冲区
在这里插入图片描述
根据包末尾的帧校验序列(FCS) 来校验错误, 即根据校验公式计算刚刚接收到的数字信息, 然后与包末尾的 FCS 值进行比较。 FCS 值是在发送时根据转换成电信号之前的数字信息进行计算得到的, 因此如果根据信号还原出的数字信息与发送前的信息一致, 则计算出的 FCS 也应该与包末尾的 FCS 一致。 如果两者不一致, 则可能是因为噪声等影响导致信号失真, 数据产生了错误, 这时接收的包是无效的,因此需要丢弃(包的丢失会由 TCP 检测出来并重传, 因此错误的包可以直接丢弃

网卡驱动会根据 MAC 头部判断协议类型, 并将包交给相应的协议栈

IP模块

(1) 判断是不是发给自己的
(2) 判断网络包是否经过分片
(3) 将包转交给TCP 模块或UDP模块

在这里插入图片描述
服务器上可能存在多个端口号相同的套接字, 但客户端的套接字都是对应不同端口号的, 因此我们可以通过客户端的端口号来确定服务器上的某个套接字。 不过, 使用不同端口号的规则仅限一台客户端的内部, 当有多个客户端进行连接时, 它们之间的端口号是可以重复的。

即要确定某个套接字时, 不仅使用服务器端套接字对应的端口号, 还同时使用客户端的端口号再加上 IP 地址, 总共使用下面 4 种信息来进行判断。客户端 IP 地址客户端端口号服务器 IP 地址服务器端口号

TCP模块

(1) 根据收到的包的发送方 IP 地址、 发送方端口号、 接收方 IP 地址、接收方端口号找到相对应的套接字
(2) 将数据块拼合起来并保存在接收缓冲区中(拼合数据块的操作在每次收到数据包时都会进行,而不是等所有数据全部接受完毕之后再统一拼合的)
(3) 委托IP模块向客户端返回ACK。

Socket模块

在这里插入图片描述
当服务器程序启动并读取配置文件完成初始化操作后,就会运行等待连接模块。这个模块会创建套接字,然后进入等待连接的暂停状态。接下来,当客户端发起连接,这个模块会恢复运行并接收连接,然后启动通信模块,并移交完成连接的套接字。操作系统具有多任务,多线程的功能,可以同时运行多个程序,服务器程序的设计正是利用了这一功能。
多任务和多线程的区别在于任务和线程的区别。 在操作系统内部, 任务是作为单独的程序来对待的而线程则是一个程序中的一部分

在这里插入图片描述
在这里插入图片描述
在执行 accept 的时候, 一般来说服务器端都是处于等待包到达的状态, 这时应用程序会暂停运行。 在这个状态下, 一旦客户端的包到达, 就会返回响应包并开始接受连接操作。 接下来, 协议栈会给等待连接的套接字复制一个副本, 然后将连接对象等控制信息写入新的套接字中

当 accept 结束之后, 等待连接的过程也就结束了, 这时等待连接模块会启动客户端通信模块, 然后将连接好的新套接字转交给客户端通信模块, 由这个模块来负责执行与客户端之间的通信操作。 之后的数据收发操作和刚才说的一样, 与客户端的工作过程是相同的。

处于等待连接状态的套接字还会以等待连接的状态继续存在, 当再次调用 accept, 客户端连接包到达时, 它又可以再次执行接受连接操作。 接受新的连接之后, 和刚才一样, 协议栈会为这个等待连接的套接字复制一个新的副本, 然后让客户端连接到这个新的副本套接字上。

响应内容

最后,服务器返回相应的类型数据,旅程到此为止
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值