网络是怎么连接的

浏览器->通过网络:将数字信息搬运到指定目的地->web服务器
思路:将数字信息分割成一个一个得小块,然后装入一些被称为‘包’的容器中运送

浏览器:具备多种客户端功能的综合性客户端软件,根据url不同,访问的服务器,协议也不同,例如http访问Web服务器使用http协议 ftp就访问FTP服务器使用ftp协议
URL:https://www.baidu.com/——》https就是协议 //后面的www.baidu.com就是Web服务器名 /后面就是其他路径名,默认index.html或default.html省略

1.浏览器如何解析网址-》知道域名,需要知道IP地址,浏览器通过域名向DNS服务器查询域名对应的IP地址(?)

  • TCP/IP:
    在这里插入图片描述

  • 子网(用集线器连接起来的几台计算机)通过路由器连接网络,路由器连接子网形成大网络

  • IP地址访问对象服务器的网址:发送者发送消息经过子网中的集线器,转发到最近的路由器,路由器根据目的地在转发到下一个路由器,直到目的地

  • IP地址:

网络号+主机号,一串32比特的数字,按照8比特为一组分成4组(用十进制表示,用.隔开:10.11.12.13)
子网掩码:表示IP地址的内部结构,表示网络号和主机号之间的边界。也是32比特,分为4组
在这里插入图片描述

在这里插入图片描述

  • 为什么不用域名代替IP地址:域名需要处理几十到255个字节的字符,并且长度不固定。而IP只需处理长度固定的4到32个字节

获取IP的过程: DNS客户端<=>DNS解析器,通过解析器【操作系统的Socket库(调用网络功能的程序组件集合,解析器就是其中一种)中的库(库:相当于组件库)】 (将Web服务器域名和解析器的程序名称)向DNS服务器[IP地址事先设置好的]发出查询:(解析器发送消息是委托给操作系统内部的协议栈【操作系统内部的网络控制软件】来执行,因为解析器本身不具备使用网络收发数据的功能<=>解析器调用协议栈,协议栈执行发送消息,然后通过网卡将消息发送给DNS服务器),服务器返回响应信息(包含IP地址),通过网卡传到解析器,解析器取出IP地址,写入浏览器指定的内存中。浏览器在向Web服务器发送消息时,从内存中取出IP地址,与HTTP请求消息一起交给操作系统。
在这里插入图片描述

  • DNS服务器查找:最近的DNS服务器->根域DNS服务器>下一级DNS服务器…->目标DNS服务器 将根域DNS服务器保存在每个DNS服务器中,这样就很方便的找到
    在这里插入图片描述

2.浏览器怎样请求消息来告知服务器
浏览器向服务器发送请求消息:对什么(URI:各种访问目标),怎么操作(方法:让Web服务器完成怎样的工作;GET/POST/HESAD/OPTIONS/PUT/DELETE/TRACE/CONNECT)-》响应消息(状态码表示成功还是失败)-》客户端
生成HTTP请求消息:对URL进行解析:浏览器确定了Web服务器和文件名-》生成HTTP请求消息(格式上有严格规定)
在这里插入图片描述

3.浏览器会委托操作系统向web服务器发送请求(?)
浏览器委托操作系统的协议栈来发送数字信息(HTTP消息),按照指定的顺序来调用Socket库中的程序组件。
收发数据的两台计算机之间连接了一条数据通道(先要建立这条管道,关键在于管道两端的数据出入口,也就是套接字【存放控制信息的内存空间就是套接字的实体】),其过程如下:(多个套接字就需要描述符来判断识别是哪个套接字)
1.创建套接字(创建套接字阶段)
2.将管道连接到服务器端的套接字上(连接阶段)
3.收发数据(通信阶段)
4.断开管道并删除套接字(断开阶段)
套接字的作用: 协议栈是根据套接字中记录的控制信息来工作的。
创建套接字 :协议栈首先分配一个套接字所需的内存空间,然后向其中写入初始状态,紧接着将表示套接字的描述符告知应用程序。
在这里插入图片描述
当调用connect时(需要指定描述符、服务器IP和端口号【客户端和服务器之间用来识别对方套接字的机制】),协议栈就会执行连接操作,当连接成功后,协议栈会将对方的IP地址和端口号等信息保存在套接字中,这样就可以开始收发数据

连接 含义:

  • 连接实际上是通信双方交换控制信息(客户端向服务器传达开始通信的请求,客户端:我想和你开始通信,我的IP地址时xxxx,端口号xxx)
  • 在执行连接时,需要一块用来临时存放收发数据的内存空间,即缓冲区

控制信息:

  • TCP的头部信息:客户端和服务器相互联络时交换的控制信息
  • 套接字中记录的信息,用来控制协议栈操作的信息(传递,接收到的信息,以及收发状态等信息)
    在这里插入图片描述

连接过程:
1.在TCP模块处创建表示连接控制信息的头部(通过TCP头部中的发送方和接收方端口号可以找到要连接的套接字)
2.TCP模块将信息传递给IP模块并委托它进行发送,IP模块执行网络包发送操作后,网络包会通过网络到达服务器,然后服务器上的IP模块会将接收到的数据传递给TCP模块,服务器的TCP模块根据TCP头部信息找到端口号对应的套接字,找到套接字后,套接字就会写入响应的信息,并将状态改为正在连接
3.服务器的TCP模块返回响应,过程和客户端一样,需要在TCP头部中设置发送方和接收方端口号,SYN比特以及ACK(相互确认网络包是否已经送达),接着服务器TCP模块会将TCP头部传递给IP模块,并委托IP模块向客户端返回响应。
4.网络包返回客户端,通过IP模块到达TCP模块,并通过TCP头部信息确认连接服务器操作是否成功。如果SYN是1,则连接成功,向套接字写入服务器的IP地址,端口号等信息,同时将ACK是设置为1并发回服务器,表示响应包已经收到并将状态改为连接完毕。
IP模块:IP头部+MAC头部(MAC:只是发送到哪个路由器地址:根据IP地址查询MAC地址【使用ARP查询:类似广播的方法】;刚开始在ARP缓存【防止IP地址发生变化,ARP缓存过一段时间删除】里查找)
在这里插入图片描述
在这里插入图片描述

网卡: 将数字信号转换为电信号或光信号
在这里插入图片描述
bl80NjcyMjc2NA==,size_16,color_FFFFFF,t_70#pic_center)

收发数据过程: 当connect结束之后,进入write阶段,从应用程序调用write将要发送的数据(二进制字节序列)交给协议栈。
协议栈回会数据放到缓冲区,等待应用程序的下一段数据,积累到一定量在发送出去

发送要素: 发送长度;时间

  • MTU:一个网络包的最大长度,以太网中一般1500字节
  • MSS:除去头部之后,一个网络包所能包含的TCP数据的最大长度
    如果请求消息太长,会进行拆分。
    在这里插入图片描述
    使用ACK确认网络包收到:确定客户端和服务端的初始值。
    在这里插入图片描述
    滑动窗口: 发送一个包之后,不等的ACK号返回,直接发送后续一系列包:前提:接收方告诉发送方最多能接收多少数据,然后根据实际量发送。当接收操作完成后,接收缓冲区的空间会被释放出来,可以接收更多数据,这是接收方通过TCP头部的窗口字段将直接能接收到的数据量告知发送方。
    在这里插入图片描述

断开连接,删除套接字

另一方都可以发起断开过程,一服务器以放为例:首先,服务器一方的应用程序会调用Socket库的close程序,然后服务器的协议栈会生成断开连接的TCP头部,就是将FIN设为1.接下来,协议栈委托IP模块向客户端发送数据,同时服务器的套接字中会记录下断开操作的相关信息。客户端收到FIN的TCP头部时,客户端的协议栈会将子地套接字标记为断开操作状态。并会向服务器返回ACK号,客户端的应用程序会调用close来结束收发操作,并生成FIN的TCP包,委托IP模块发送给服务器。一段时间之后,服务器会返回ACK号。通信结束。
删除套接字需要等待一段时间,防止在断开连接的操作中出现问题,以免客户端重新发FIN,服务器的套接字删除出席问题。

TCP整个通信过程

在这里插入图片描述

UDP

无连接的,一个包的大小范围内可解决的,基于数据报文;可用于发送音频或视频数据
在这里插入图片描述

文章图片均来自来自《网络是怎么连接的》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值