目录
一.以浏览器要访问一个网址为例,理解这一次网络连接的全貌。
大体过程
- 浏览器要访问一个资源,如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.开辟一块用来临时存放要收发的数据的内存空间。