目录
一.以浏览器要访问一个网址为例,理解这一次网络连接的全貌。
二.协议栈和网卡
0.TCP/IP的分层结构
1.套接字
2.连接
连接的目的
连接的过程
3.发送数据
4.接收数据
5.断开连接
6.发送数据时包的情况
包是怎么转发的?
包收发的过程
7.网卡
网卡组装完成包
8.向集线器发送网络包
9.接收返回包
网卡处理
TCP&IP处理
三.集线器,交换机,路由器
1.集线器
集线器的工作过程
2.交换机
交换机的工作过程
交换机的特点
3.路由器
四.通过接入网进入互联网内部
1.接入网
ADSL接入网
通信过程
光纤接入网
PPP拨号上网
区分
通过隧道将网络包发送给运营商
2.网络运营商内部
POP
NOC
运营商之间的连接
一.以浏览器要访问一个网址为例,理解这一次网络连接的全貌。
大体过程
- 浏览器要访问一个资源,如www.baidu.com
- 找到提供这个资源的服务器
- 服务器提供资源
1.浏览器解析URL,生成请求消息。
1)解析URL,明确访问目标
2)生成请求消息
注意:
1).URI是/目录名/文件名
2.浏览器将请求消息委托给操作系统
浏览器能解析网址并生成HTTP消息,但不具备将消息发送到网络上的能力。
3.操作系统根据域名查询IP地址
浏览器-Socket库-协议栈。
1)首先了解IP地址,在TCP/IP协议中,网络由子网和路由器连接而成,所以IP地址包含了网络号(具体在哪个子网)和主机号。用子网掩码来区分网络号和主机号的界限。
2)操作系统调用计算机上的DNS客户端(解析器-包含在Socket库中的一个程序),将域名告诉它。通过代码gethostbyname来调用这个程序。
3)解析器再将信息发送给操作系统内部的协议栈(协议驱动或TCP/IP驱动).。
4)协议栈执行操作通过网卡将消息发送给最近的DNS服务器(这个最近的DNS服务器的IP地址在电脑中设置好了)。
5)最近的DNS服务器去找根DNS服务器,根DNS服务器管理com等域名,再找管理baidu域名的服务器,再找管理www域名的服务器,在管理www域名的服务器中找到具体具体资源的服务器,获得该服务器的IP地址。
6)为什么域名和IP公用?
域名方便人们识别记忆,IP为了方便传输。
4.操作系统协议栈根据IP地址向服务器发送HTTP请求
需要调用操作系统的协议栈的Socket库中的程序组件来完成功能
客户端委托操作系统都是靠调用Socket库中的程序组件再交给协议栈来完成。
浏览器-Socket库-协议栈。
1)服务器,客户端分别创建一个套接字(相当于传输管道的入口和出口)。
调用Socket库中的socket组件
2)客户端的套接字延申出管道连接服务器的套接字。
d五分钟理解TCP/IP协议中端口号的涵义:什么是端口号?为什么要有端口号?_哔哩哔哩_bilibili
3)收发数据
调用socket的write组件发送
调用socket的read组件接收
4)断开管道删除套接字
调用socket的close组件关闭
描述符
创建完后,协议栈返回描述符,来识别不同的套接字,因为你可能同时在登录多个网站就需要建立多个通道。
客户端在创建套接字时,协议栈会为这个套接字分配一个端口号,接下来执行连接操作时,会将端口号告诉服务器。
5.服务器解析请求消息,返回响应消息
生成响应消息,返回给客户端,客户端浏览器接收后将数据显示到屏幕上。
二.协议栈和网卡
0.TCP/IP的分层结构
上层对下层委派,下层接收执行
Socket库中有解析器用来对DNS服务器进行查询还包括其他组件。
浏览器、邮件等一般的应用程序都是使用TCP收发数据的,而像DNS查询等收发较短的控制数据的时候则使用UDP。TCP协议负责加给数据添加TCP协议的控制信息。
IP:下面一半是用IP协议控制网络包收发操作的部分。在互联网上传送数据时,数据会被切分成一个一个的网络包,而将网络包发送给通信对象的操作就是由IP来负责的。IP还包括IMCP和ARP协议,ICMP用于告知网络包传送过程中产生的错误以及各种控制消息,ARP用于根据IP地址查询相应的以太网MAC地址。IP协议负责给数据添加IP协议的控制信息。
网卡驱动:负责控制网卡硬件。
网卡:完成实际收发操作。对网线中的信号执行发送和接收。
1.套接字
套接字的实体是协议栈中存放通信控制信息的内存空间,记录通信对象的IP地址、端口号、通信操作的进行状态等。
套接字的作用是在发送数据时,需要看一看套接字中的通信对象IP地址和端口号,以便向指定的IP地址和端口发送数据,套接字中必须要记录是否已经收到响应,以及发送数据后经过了多长时间,才能根据这些信息按照需要执行重发操作。
描述符:描述符相当于用来区分协议栈中的多个套接字的号码牌,来指明这一块内存地址。
2.连接
连接的目的
1.需要把服务器的IP地址和端口号等信息告知协议栈。
2.客户端向服务器传达开始通信的请求。客户端会发出我想和你开始通信,我的IP地址是xxx.xxx. xxx.xxx,端口号是yyyy。
3.开辟一块用来临时存放要收发的数据的内存空间。
连接的过程
第一步:在TCP模块处创建表示连接信息的头部
上面的调用提供了服务器的IP地址和端口号,这些信息会传递给协议栈中的TCP模块。然后,TCP模块会与该IP地址对应的对象,也就是与服务器的TCP模块交换控制信息。
也就是客户端创建一个控制信息的头部,主要包括发送方和接收方的端口号。将头部中的控制位的SYN比特设置为1,设置适当的序号和窗口大小。
第二步:创建好头部后,TCP模块传给IP模块委托它发送
第三步:服务器上的IP模块会将接收到的数据传递给TCP模块
第四步:服务器的TCP模块会返回响应
第五步:客户端再响应告诉服务器刚才的响应包已经收到
3.发送数据
应用程序调用write将要发送的数据交给协议栈,协议栈收到数据后执行发送操作
第一步:将数据存放在内部的发送缓冲区中,并等待应用程序的下一段数据
第二步:对叫大数据进行拆分
TCP进行拆分,并添加TCP头部,IP再添加头部
第三步:发给服务器
第四步:确认操作
TCP具备确认对方是否成功收到网络包,以及当对方没收到时进行重发的功能。需要对方返回ACK号来确认。
4.接收数据
浏览器在委托协议栈发送请求消息之后,会调用read程序来获取响应消息。控制流程会通过read转移到协议栈。协议栈会执行接下来的操作。
第一步:协议栈会检查收到的数据块和TCP头部的内容,判断是否有数据丢失,如果没有问题则返回ACK号。
第二步:协议栈将数据块暂存到接收缓冲区中,并将数据块按顺序连接起来还原出原始的数据,最后将数据交给应用程序。
5.断开连接
数据发送完毕的一方会发起断开过程。
第一步:服务器一方的应用程序会调用Socket库的close程序。
第二步:服务器的协议栈会生成包含断开信息的TCP头部(具体来说就是将控制位中的FIN比特设为1)。
第三步:协议栈会委托IP模块向客户端发送数据,同时,服务器的套接字中也会记录下断开操作的相关信息。
第四步:客户端收到后,客户端的协议栈会将自己的套接字标记为进入断开操作状态,为了告知服务器已收到FIN为1的包,客户端会向服务器返回一个ACK号。
第五步:应用程序就会调用read来读取数据。
第六步:客户端调用close来结束数据收发操作,这时客户端的协议栈也会和服务器一样,生成一个FIN比特为1的TCP包,然后委托IP模块发送给服务器。一段时间之后,服务器就会返回ACK号。
6.发送数据时包的情况
包是怎么转发的?
发送放创建包,发送到最近的网络转发设备,网络转发设备根据头部控制信息,向下一个转发设备转发,最终到达接收放的网络设备。
IP头部
包的目的地,也就是要访问的服务器的IP地址写入IP头部中,IP协议就可以根据这一地址查找包的传输方向,从而找到下一个路由器的位置。
MAC头部
IP协议会查找下一个路由器的以太网地址(MAC地址),并将这个地址写入(改写)MAC头部中。这样一来,以太网协议就知道要将这个包发到哪一个路由器上了。路由器的MAC就像人的身份证一样,是设备的唯一标识。
包收发的过程
1.TCP模块加头部
TCP模块在数据块的前面加上TCP头部,然后整个传递给IP模块,TCP模块还需要指定通信对象的IP地址,也就是需要写清楚“将什么内容发给谁”
2.IP模块加头部
IP模块会添加IP头部和MAC头部这两种头部。IP头部中包含IP协议规定的、根据IP地址将包发往目的地所需的控制信息;MAC头部包含通过以太网的局域网将包传输至最近的路由器所需的控制信息。
3.封装好的包会被交给网络硬件
网络硬件可能是插在计算机主板上的板卡,也可能是笔记本电脑上的PCMCIA卡,或者是计算机主板上集成的芯片,不同形态的硬件名字也不一样,本书将它们统称为网卡。
4.网络硬件发送
传递给网卡的网络包是由一连串0和1组成的数字信息,网卡会将这些数字信息转换为电信号或光信号,并通过网线(或光纤)发送出去,然后这些信号就会到达集线器、路由器等转发设备,再由转发设备一步一步地送达接收方。
MAC
以太网中判断发送目的地时要用MAC头部
IP与MAC
IP地址其实标识的是网卡而不是计算机,MAC地址是在网卡生产时写入ROM里的,只要将这个值读取出来写入MAC头部就可以,所以MAC地址也能标识计算机,但IP地址可以修改,但MAC地址不能修改。
将包转发的时候转发给路由器,但需要知道路由器的地址,查询目标路由器的MAC地址需要用到ARP协议。
惊了!大学一直搞不懂的IP地址和MAC地址的区别原来这么简单!_哔哩哔哩_bilibili
反正没人看!随便讲讲Mac地址和Ip地址有什么区别_哔哩哔哩_bilibili
7.网卡
ROM
网卡的ROM中保存着全世界唯一的MAC地址,这是生产网卡时写入的
网卡驱动
1.网卡中保存的MAC地址在网卡驱动进行初始化时会由网卡驱动程序读取并分配给MAC模块。
2.网卡驱动从IP模块获取包之后,将其复制到网卡内的缓冲区,再向MAC模块发送发送包的命令。
MAC模块
MAC模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列,MAC模块从报头开始将数字信息按每个比特转换成电信号,将数字信息转换为电信号的速率就是网络的传输速率。
PHY
将MAC模块来的电信号将其转换为可在网线上传输的格式发出去
它还需要监控接收线路中有没有信号进来。在开始发送信号之前,需要先确认没有其他信号进来,这时才能开始发送。如果在信号开始发送到结束发送的这段时间内一直没有其他信号进来,发送操作就成功完成了。
网卡组装完成包
报头
是一串比特序列,用来确定包的读取时机,当这串序列被转换成电信号,根据波形可以判断取数据的时机。
起始帧分界符
表示包起始位置的标记
FCS(帧校验序列)
检查包传输过程中因噪声导致的波形紊乱、数据错误,它是一串32比特的序列,是通过一个公式对包中从头到尾的所有内容进行计算而得出来的。它和磁盘等设备中使用的CRC[插图]错误校验码是同一种东西。
8.向集线器发送网络包
发送信号的操作分为两种,一种是使用集线器的半双工模式,另一种是使用交换机的全双工模式。
半双工模式中需要注意信号碰撞的问题
全双工模式中不需要注意信号碰撞问题
9.接收返回包
网卡处理
1.PHY (MAU)模块会将信号转换成通用格式并发送给MAC模块
2.MAC模块再从头开始将信号转换为数字信息,并存放到缓冲区中。当到达信号的末尾时,还需要检查FCS。
3.当到达信号的末尾时,还需要检查FCS。具体来说,就是将从包开头到结尾的所有比特套用到公式中计算出FCS,然后和包末尾的FCS进行对比,正常情况下两者应该是一致的,如果中途受到噪声干扰而导致波形发生紊乱,则两者的值会产生差异,这时这个包就会被当作错误包而被丢弃。
4.再判断MAC头部中接收方MAC地址与网卡在初始化时分配给自己的MAC地址是否一致,不是就丢弃,是就将包放到缓冲区。
5.通过中断机制通知计算机收到了包,调用网卡驱动,从缓冲区中取出收到的包,并通过MAC头部中的以太类型字段判断协议的类型交给不同的协议栈。(一般给TCP/IP)
TCP&IP处理
协议栈会判断这个包应该交给哪个应用程序,并进行相应的处理。
1.第一步是检查IP头部,确认格式是否正确。
2.查看接收方IP地址。如果接收网络包的设备是一台Windows客户端计算机,那么服务器返回的包的接收方IP地址应该与客户端网卡的地址一致。如果布一致,IP模块会通过ICMP消息将错误告知发送方
3.分片重组:IP模块会将它们还原成原始的包(将小包合起来),分片的包会在IP头部的标志字段中进行标记,当收到分片的包时,IP模块会将其暂存在内部的内存空间中,然后等待IP头部中具有相同ID的包全部到达,这是因为同一个包的所有分片都具有相同的ID。
4.TCP模块会根据IP头部中的接收方和发送方IP地址,以及TCP头部中的接收方和发送方端口号来查找对应的套接字。
5.找到对应的套接字之后,就可以根据套接字中记录的通信状态,执行相应的操作,如果包的内容是应用程序数据,则返回确认接收的包,并将数据放入缓冲区,等待应用程序来读取;如果是建立或断开连接的控制包,则返回相应的响应控制包,并告知应用程序建立和断开连接的操作状态。
三.集线器,交换机,路由器
1.集线器
集线器的工作过程
1.网卡中的PHY模块负责将包转换成电信号,电信号通过RJ-45接口进入双绞线。
2.当信号到达集线器后,会被广播到整个网络中。以太网的基本架构[插图]就是将包发到所有的设备,然后由设备根据接收方MAC地址来判断应该接收哪些包,而集线器就是这一架构的忠实体现,它就是负责按照以太网的基本架构将信号广播出去。
3.信号到达集线器的PHY模块,再进入中继电路,将信号广播到集线器的所有端口,流向所有设备。
4.这些设备在收到信号之后会通过MAC头部中的接收方MAC地址判断是不是发给自己的,如果是发给自己的就接受,否则就忽略。这样,网络包就能够到达指定MAC地址的接收方了。
集线器,交换机,路由器在接收数据方面的区别
由于集线器只是原封不动地将信号广播出去,所以即便信号受到噪声的干扰发生了失真,也会原样发送到目的地。这时,接收信号的设备,也就是交换机、路由器、服务器等,会在将信号转换成数字信息后通过FCS[插图]校验发现错误,并将出错的包丢弃。当然,丢弃包并不会影响数据的传输,因为丢弃的包不会触发确认响应。因此协议栈的TCP模块会检测到丢包,并对该包进行重传。
2.交换机
交换机的工作过程
1.当信号从双绞线传入时,就会进入PHY(MAU)模块的接收部分。
2.PHY(MAU)模块会将网线中的信号转换为通用格式,然后传递给MAC模块。
3.MAC模块将信号转换为数字信息,然后通过包末尾的FCS校验错误,如果没有问题则存放到缓冲区中,[插图]。这部分操作和网卡基本相同,大家可以认为交换机的每个网线接口后面都是一块网卡。
交换机和网卡的不同
但交换机的工作方式和网卡有一点不同。网卡本身具有MAC地址,并通过核对收到的包的接收方MAC地址判断是不是发给自己的,如果不是发给自己的则丢弃;相对地,交换机的端口不核对接收方MAC地址,而是直接接收所有的包并存放到缓冲区中。因此,和网卡不同,交换机的端口不具有MAC地址
4.接下来需要查询一下这个包的接收方MAC地址是否已经在MAC地址表中有记录了。MAC地址表主要包含两个信息,一个是设备的MAC地址,另一个是该设备连接在交换机的哪个端口上。
交换机的特点
1.交换机只将包转发到具有特定MAC地址的设备连接的端口,其他端口都是空闲的。如图3.7中的例子所示,当包从最上面的端口发送到最下面的端口时,其他端口都处于空闲状态,这些端口可以传输其他的包,因此交换机可以同时转发多个包。
2.相对地,集线器会将输入的信号广播到所有的端口,如果同时输入多个信号就会发生碰撞,无法同时传输多路信号,因此从设备整体的转发能力来看,交换机要高于集线器。
3.路由器
转发模块
判断包的转发目的地,判断具体交给哪一个端口发送。
端口模块
负责包的收发操作
通过更换网卡,计算机可以支持以太网或无线局域网,路由器也一样。如果路由器安装了支持无线局域网的硬件,就可以支持无线局域网了。
发送过程
1.通过端口将发过来的包接收
2.转发模块根据收到的包的IP头部中记录的接收方的IP地址,在路由表中进行查询,来判断转发目标
3.转发模块委托端口将包转移到转发目标对应的端口,端口按照硬件的规则将包发送出去。
接收过程
1.在以太网中,从以太网端口接收并放到缓冲区中
2.PHY和MAC部分将信号转为数字信号
3.通过包末尾的FCS进来错误校验再检查MAC头部
注意
1.以以太端口为例,路由器有MAC地址,因为它能成为以太网的发送方和接收方。
端口还有IP地址,当转发包时,首先路由器端口会接收发给自己的以太网包,然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去。这一点和交换机是不同的,交换机只是将进来的包转发出去而已,它自己并不会成为发送方或者接收方。
IP协议根据目标地址判断下一个IP转发设备的位置
子网中的以太网协议将包传输到下一个转发设备
四.通过接入网进入互联网内部
互联网的整体架构
将互联网理解成家庭公司网络的方法版
不同点是路由器之间距离和路由器的维护方式
1.接入网
是指连接互联网与家庭、公司网络的通信线路[插图]。一般家用的接入网方式包括ADSL、FTTH、CATV、电话线、ISDN等,公司则还可能使用专线。
ADSL接入网
用户端路由器发出的网络包通过ADSL Modem(调制解调器)到达电话局,再到达ADSL网络运营商(ISP)。
通信过程
1.计算机-交换机-(接入网)路由器-ADSL Modem
若互联网接入路由器和ADSL Modem之间是以太网连接,传送时互联网接入路由器会在网络包前面加上MAC头部、PPPoE头部、PPP头部总共3种头部,然后发送给ADSL Modem。
2.ADSL将数据拆分成信元
3.ADSL将信元调制成信号
4.信号进入分离器,然后ADSL信号会和电话的语音信号混合起来一起从电话线传输出去。
信号从分离器发出时,分离器没有做什么事。
信号从电话线传入时,分离器负责将电话和ADSL信号分离。
5.通过室内电话线,到达IDF(中间配线盘)和MDF(总配线架),再进入电线杆上的电话电缆,再经过配线盘和分离器发送给DSLAM(相当于多个ADSL Modem)。
6.电信号被还原成数字信号。
ADSL和DSLAM的区别
ADSL Modem具备以太网接口,可与用户端路由器交互,收发以太包。
DSLAM用的是ATM接口,接收信元,和后方路由器收发数据也是用ATM信元形式。
7.信元被转到BAS的包转发设备(具有ATM接口可以接收ATM信元),将ATM转换成原始的包。
8.将MAC头部和PPPoE头部丢掉。取出PPP头部和后面的数据。
MAC头部和PPPoE头部作用是到达BAS的接口
9.BAS在包前面加上隧道专用头部,送到隧道出口。
10.网络包到达隧道出口的隧道专用路由器,隧道头部被丢弃,IP包被取出,转发到互联网中。
光纤接入网
FTTH基于光纤接入网的技术的入网方式。
PPP拨号上网
在使用电话线或ISDN拨号上网时,需要传送PPP包。
1.用户向运营商的接入点拨打电话,输入用户名和密码
2.用户名和密码到达RAS通过RADUIS协议发送到认证服务器
3.认证服务器返回IP地址等信息
4.用户信息配置IP等信息,便可向网络发送TCP/IP包了。
区分
ADSL,FTTH,PPP拨号上号都需要给计算机分配公有地址。
ADSL和FTTH通过电缆或光纤固定连接在一起的,没有必要验证用户身份,通过用户名和密码登录的步骤可以根据用户名来切换不同的运营商,这很方便。因此,接入运营商在ADSL和FTTH中一般也会使用PPP。
也就是说PPP实现了通过用户名和密码来上网。
PPP拨号上网中PPP传送的方式:PPP协议中没有定义以太网中的报头和FCS等元素,也没有定义信号的格式,因此无法直接将PPP消息转换成信号来发送。要传输PPP消息,必须有另一个包含报头、FCS、信号格式等元素的“容器”,然后将PPP消息装在这个容器里才行。于是,在拨号接入中PPP借用了HDLC[插图]协议作为容器,而HDLC协议原本是为在专线中传输网络包而设计的,拨号接入方式对这一规格进行了一些修正。
ADSL和FTTH中PPP的传送方式:不能借用HDLC来作为容器,我们用以太网包代替HDLC来装载PPP协议,以太网和PPP在设计上有所不同,为了弥补这些问题就重新设计了一个新的规格,这就是PPPoE。
BAS用作用户认证和配置下发的窗口
通过隧道将网络包发送给运营商
BAS还使用隧道方式传输网络包
隧道方式
类似于套接字之间建立的TCP连接。
2.网络运营商内部
互联网的实体是由多个运营商网络相互连接而成。
ADSL、FTTH等接入网是与用户签约的运营商设备相连的,这些设备称为POP(Poine Of Presense 接入点)。到达互联网的入口,运营商POP路由器。
POP
POP中包括各种类型的路由器,根据接入网的类型需要分别使用不同类型的路由器。
专线接入:这里用的路由器就是具有通信线路端口的一般路由器。专线不需要用户认证、配置下发等功能,因此用一般的路由器就可以了。
电话、ISDN等拨号方式的接入:使用的路由器称为RAS。拨号接入需要对用户拨电话的动作进行应答,而RAS就具备这样的功能。
PPPoE方式的ADSL和FTTH:PPPoE方式中,ADSL、FTTH接入服务商会使用BAS,运营商的路由器则与BAS相连。PPPoE中的身份认证和配置下发操作由接入服务商的BAS来负责,运营商的路由器只负责对包进行转发,因此这里也是使用一般的路由器就可以了。
NOC
NOC:Network Operation Center 网络运行中心
运营商的核心设备,从POP传来的网络包都会集中到这里,并从这里被转发到离目的地更近的POP,或者是转发到其他的运营商。可以认为NOC就是规模扩大后的POP。
运营商之间的连接
如果最终目的地Web服务器和客户端是连接在同一个运营商中的,那么POP路由器的路由表中应该有相应的转发目标。
如果服务器的运营商和客户端的运营商不同,网络包需要先发到服务器所在的运营商。
对于互联网内部的路由器来说,无论最终目的地是否属于同一家运营商,都可以从路由表中查到,因此只要一次接一次按照路由表中的目标地址来转发包,最终一定可以到达Web服务器所在的POP。这样一来,我们就可以把包发到任何地方,包括地球的另一面。
通过IX连接
IX的实体是高性能交换机。