[笔记] 《网络是怎么连接的》

1、浏览器生成消息

  • URL:统一资源定位符,包含服务器域名,要访问的文件路径名等
  • 浏览器要先解析URL,确定要访问的Web服务器和文件名
  • GET:获取数据,命令后跟着URL,可在URL后面加上表单信息一起发给服务器
  • POST:向服务器发送数据,用于将表单中填写的信息发送给服务器进行处理
  • 浏览器通过HTTP协议访问Web服务器
  • 浏览器按规定格式生成HTTP请求消息
  • 浏览器根据域名查询Web服务器的IP地址
  • IP地址:一串32bit的数字,包括网络号和主机号(人使用名称,路由器使用IP地址)
  • DNS:域名服务系统,通过名称查询IP地址
  • Socket库:操作系统自带标准库,c语言编写,用于调用网络功能的程序组件集合
  • 浏览器委托操作系统将消息发给Web服务器
  • 浏览器调用Socket库的解析器,向DNS服务器查询Web服务器的IP地址
    • DNS服务器的IP地址作为TCP/IP一个项目事先设置好
    • 信息分布保存在多态DNS服务器中,DNS服务器相互接力配合查出信息
  • 浏览器向操作系统内部的协议栈发出委托,按指定的顺序调用Socket库中的程序组件
    • “数据管道”两端的出入口称为套接字
    • 收发数据过程:创建--连接--通信--断开
    • Socket表示库,socket表示程序组件,套接字表示管道两端接口
    • 浏览器--协议栈--网卡驱动/网卡--服务器

2、用电信号传输TCP/IP数据

  • Socket库位于网络应用程序内部,协议栈位于操作系统内部
  • 网络应用程序--操作系统--驱动程序--硬件
  • ICMP:告知网络包传送过程中产生的错误和各种控制消息
  • ARP:根据IP地址查询相应的以太网MAC地址
  • 协议栈(Protocol stack):计算机网络协议套件的具体软件实现。协议套件中的一个通信协议通常只为一个目的而设计,每个协议模块和上下两个协议模块通信,最低层协议模块与硬件交互,每个高层增加更多的特性,用户应用程序只处理最上层协议
  • Socket:操作系统自带库,内部实现了TCP协议(3次握手,累积确认,分组缓存...)(稳定),socket作为留给上层应用的编程接口(变化)

客户端socket程序(系统自动获得客户端ip并分配端口)

1 clientfd = socket(...);
2 
3 connect(clientfd, 服务器的ip和port, ...);
4 
5 send(clientfd, 数据);
6 
7 receive(clientfd, ...);
8 
9 close(clientfd);
View Code

服务端socket程序

 1 listenfd = socket(...);
 2 
 3 bind(listenfd, 服务端ip和端口80, ...);
 4 
 5 listen(listenfd, ...);
 6 
 7 while(true){
 8 
 9     connfd = accept(listenfd, ...);
10 
11     recieve(connfd, ...);
12 
13     send(connfd, ...);    
14     
15 }
View Code

listenfd--创建socket用于监听

bind--占用端口

listen--开始监听

accept--和客户端connect一起完成TCP三次握手

  • 套接字(插座):协议栈内部用于存放控制信息的内存空间,记录了通信对象的IP地址、端口号、通信操作状态等
  • 套接字对:定义连接两个端点的四元组,本地Ip+本地TCP端口+外地Ip+外地TCP端口,唯一标识一个网址上的每个TCP连接
  • 套接字操作:open, read/write, close(Everything is a file)
  • 文件:Interface File { int ( *open ){}; int ( *close ){}; int ( *read ){}; int ( *write ){}  }
  • 端口:TCP是进程间通信,客户端上可能有多个进程同时访问多个服务器,浏览器自动生成端口号进行访问,服务器指定端口号提供服务,端口用来区分进程(多路复用)
  • TCP:连接,收发,断开
  • IP:受TCP委托,将数据封装成包(IP不负责传输包,包的传输委托以太网进行)
  • UDP:不需要重发的数据用UDP更高效
  • 连接(准备):通信双方交换控制信息,在套接字中记录这些必要信息,分配缓冲区,准备数据收发
  • 网络包:以太网和IP控制信息+TCP控制信息+数据块
  • 浏览器委托协议栈发送HTTP请求,向Web服务器发送请求消息
  • Web服务器返回相应消息,发起断开过程(socket.close())

3、从网线到网络设备(集线器、交换机、路由器)

  • 以太网(本地连接):是当今现有局域网采用的最通用的通信协议标准,定义了在局域网(LAN)中采用的电缆类型和信号处理方法。也指采用以太网协议的网络,互联设备间在以太网中以10-100Mbps的速率传送信息包
  • MAC头部:包含通过以太网的局域网将包传输至最近的路由器所需的控制信息
  • 网关(Gateway):路由器
  • 网卡:接收网络包(二进制),转换为电信号/光信号,通过网线/光纤发送出去,网卡的ROM中保存着全世界唯一的MAC地址,是生产网卡时写入的
  • 以太网通过广播,把包发给连接在同一以太网中的所有设备,得到接收放的MAC地址
  • ARP:地址解析协议,通过IP地址查询MAC地址
  • 全双工模式:可同时发送和接收信号
  • 网络包经过集线器和交换机,到达路由器,并再此被转发到下一个路由器
  • 路由器基于IP设计,交换机基于以太网设计
  • 路由器包括转发模块和端口模块,转发模块判断包的转发目的地,端口模块负责包的收发,分别相当于协议栈的IP模块和网卡模块
  • 路由器端口的硬件将包接收进来,转发模块根据包的IP头部记录接收方的IP地址,在路由表中进行查询,得到转发目标,最后由端口模块将包发送出去
  • ICMP:控制报文协议。包传输过程中出错时,用来发送控制消息
  • 地址转换:在转发网络包时对IP头部中的IP地址和端口号进行改写(公有地址<-->私有地址),提高了公有地址的利用率

4、通过接入网进入互联网内部

  • ADSL:不对称数字用户线。利用金属电话线通信,上行方向(用户到互联网)和下行方向(互联网到用户)的通信速率是不对称的
  • FTTH:光纤到户
  • ISP:互联网服务提供商
  • 互联网接入路由器在网络包前加上MAC头部、PPPoE头部、PPP头后,发送给ADSL Modem
  • ATM:异步传输。以电话线为载体的传统电话技术基础上扩展出的通信方式,数据传输单位是“信元”
  • PPPoE:以太网点对点协议
  • RAS:远程访问服务器
  • DHCP:动态主机配置协议
  • 网络包通过接入网后,到达运营商POP的路由器
  • BAS:宽带接入服务器。路由器的一种,具有身份认证,向客户端下发IP地址等配置信息的功能
  • NOC:网络运行中心
  • POP:
  • BGP:边界网关协议
  • 互联网内部使用BGP机制在运营商之间交换路由信息
  • IX:互联网交换中心。实体是高性能交换机,将多个运营商连接在一起

5、服务器端局域网

  • 防火墙:对包进行检查,只转发允许通过的包。一般和反病毒、非法入侵检测、访问隔离等机制并用
  • 将Web服务器放在网络运营商管理的数据中心,可获得更高的访问速度,更高的安全性
  • 包过滤:检查网络包头部的信息,设置包过滤字段(接收方IP,发送方IP,接收方端口,发送方端口,控制位等)
  • 缓存:
  • 负载均衡:使用多台相同的Web服务器分担负载(分布式架构)
  • 轮询:将访问平均给所有的服务器。缺点:无法识别服务器宕机,传输CGI动态网页时的连续性问题
  • 负载均衡器:定期采集Web服务器的CPU、内存使用率,判断负载情况。操作跨多个页面时不考虑负载,将请求发送到一台服务器上
  • Cookie:在HTTP头部字段中加上用来判断相关性的信息,便于负载均衡器判断是否将相关的请求发到同一台Web服务器
  • 缓存服务器:将整个系统按功能不同分为不同服务器,如Web服务器,数据库服务器,缓存服务器。通过代理机制对数据进行缓存
  • 反向代理:介于Web服务器和客户端之间,可对Web服务器访问进行中转,将Web服务器返回的数据保存在磁盘真能干,代替Web服务器将磁盘中的数据返回给客户端
  • 正向代理:客户端部署的缓存服务器,可实现缓存,防火墙等功能。在转发过程中可查看请求的内容,从而禁止员工访问与工作内容无关的网站。需要在浏览器中进行设置
  • CDSP:内容分发服务运营商。与多个Web服务器运营者签约,部署多台缓存服务器配合Web服务器工作
  • 使用内容分发服务时,如何从服务器中找到离客户端最近的一个,并让客户端去访问?
  • DNS服务器参照路由信息估算到客户端的距离
  • 重定向服务:根据客户端发来的HTTP消息的发送方IP地址估计距离

6、请求到达Web服务器

  • 服务器启动之后,需要进行各种准备工作,才能接收客户端的访问
  • 服务器需要同时和多个客户端通信,每有一个客户端连接进来,就启动一个新的服务器程序,确保服务器程序和客户端是一对一状态
  • ACK:表示接收数据字段号有效,用于通知发送方数据已正确接收
  • 服务器程序分为等待连接模块和负责与客户端通信的模块
  • 服务器操作系统具有多任务/进程(程序),多线程(程序的一部分)功能
  • 发起连接的一方是客户端,等待连接的一方是服务器
  • 使用客户端的端口号+IP地址来判断发送给哪个客户端

 

 

 

 

 

 

 

 

posted @ 2020-03-05 19:28  cxc1357  阅读(419)  评论(0编辑  收藏  举报