《网络是怎样连接的》读书笔记一
最近面试嵌入式软件工程师,hr都会问到网络编程这一块,特别是对TCP/IP协议 、TCP三次握手、四次挥手、UDP和TCP的区别,HTTP的传输过程,HTTP中get和post的区别,HTTPS的加密方式,Linux下TCP的创建、接受等等,由于网络知识这一块博主很薄弱,所以吃了大亏,这几日决定好好恶补一下网络知识,看看网络编程的书,做下笔记。
《网络是怎样连接的》读书笔记一
问:我们平时是如何上网的呢?
首先,我们在浏览器上输入网址,浏览器会根据网址的含义生成请求消息,在请求消息生成以后,浏览器会委托操作系统向web服务器发送请求
1.1网址
常用的有几种URL(网址),http:访问web服务器 、ftp:访问ftp服务器
web浏览器解析完URL后,就知道访问的目标在哪里了,接下来,web浏览器会使用HTTP协议来访问web服务器
1.2HTTP协议
HTTP协议定义了客户端和服务器之间交互的消息内容和步骤
HTTP过程:客户端向服务器发送请求消息,该消息包括URI和方法,URI表示存放网页数据的文件名,方法表示让web服务器完成怎样的工作。web服务器收到请求消息后,通过URI和方法完成自己的工作,然后将结果存放在响应消息中并发送回客户端,相应消息的开头有一个状态码,表示操作的执行结果是成功还是失败。客户端收到后,浏览器会从消息中读出所需的数据并显示在屏幕上
1.2.1 HTTP常用的两种方法
表1-1列出的方法中,最常用的一个就是GET方法了。一般当我们访问web服务器获取网页数据时,使用的就是GET方法。所谓一般的访问过程大概就是这样的:首先,在请求消息中写上GET方法,然后在URI中写上存放网页数据的文件名“dir/file.html”,这就表示我们需要获取dir/file.html文件中的数据。当web服务器收到消息后,会打开dir/file.html文件并读取出里面的数据,然后将读出的数据存放到响应消息中,并返回给客户端。最后,客户端浏览器会收到这些数据并显示在屏幕上。
还有一个经常使用的方法就是POST 。我们在表单中填写数据并将其发送给web服务器时就会使用这个方法。当我们在网上商城填写收货地址和姓名,或者是在网上填写问卷时,都会遇到带有输入框的网页,而这些可以输入信息的部分就是表单。使用POST方法时,URI会指向web服务器中运行的一个应用程序2\’的文件名,典型的例子包括”index.cgi”Indexphp等。然后,在请求消息中,除了方法和U心之外,还要加上传递给应用程序和脚本的数据。这里的数据也就是用户在输人框里填写的信息。当服务器收到消息后,web服务器会将请求消息中的数据发送给URI指定的应用程序。最后,web服务器从应用程序接收输出的结果,会将它存放到响应消息中并返回给客户端。
1.3 生成HTTP请求消息
回到浏览器中来,对URL解析后,确定了web服务器和文件名,接下来根据这些生成请求消息
1.4 发送请求后会收到响应
响应消息的格式和请求消息基本是相同的,差别只在于第一行上,在响应消息中,第一行的内容为状态码和响应短语,用来表示请求执行的结果是成功还是出错,状态码和响应短语表示的内容相同,但他们的用途不同,状态码是一个数字,它主要用来向程序告知执行的结果,相对地,响应短语则是一段文字,用来向人们告知执行的结果。
返回响应消息后,浏览器会将数据提取出来显示在屏幕上,如果网页的内容有图片的话,也将图片的文件名写进URI生成请求消息,由于每条请求消息只能写一个URI,所以每次只能获取一个文件,如果有3张图片,那么获取网页加上获取图片,一共要向web服务器发送4个请求消息,总结起来就是:1 条请求消息中只能写1个URI。如果需要获取多个文件,必须对每个文件单独发送1条请求。
1.5 向DNS服务器查询web服务器的IP地址
尽管浏览器能够解析URL生成请求消息,但它本身不具备将消息发送到网络中的功能,所以,需要委托操作系统来实现。在委托之前,还需要先查询web服务器的IP地址,这样操作系统才知道要发送的地址在哪里。
关于IP地址的划分在此就不再解释。
注意:主机号部分的比特全部为0 或者全部为1 时代表两种特殊的含义。主机号部分全部为0 代表整个子网而不是子网中的某台设备。此外,主机号部分全部为1代表向子网上所有设备发送包,即广播。
什么是DNS呢?
我们要发送请求消息前,必须知道web服务器的IP地址,有的小伙伴会说,为什么不直接用域名作为它的地址呢,想想,IP地址4个字节,域名至少也要几十到几百个字节,这增加了路由器的负担,传送数据也会花费更大的时间对吧。所以我们现在使用的方案是人来使用域名,路由器使用IP地址,为了填补两者之间的障碍,需要一个机制,能通过域名查询IP地址或通过IP地址查询域名,这个机制就叫做DNS域名解析服务。
我们的计算机上一定有相应的DNS客户端,简称DNS解析器,解析器实际上是一段程序,它包含在操作系统的socket库中。Socket 库是用于调用网络功能的程序组件集合。调用解析器后,解析器会向DNS 服务器发送查询消息,然后DNS 服务器会返回响应消息。响应消息中包含查询到的IP 地址,解析器会取出IP地址,并将其写入浏览器指定的内存地址中接下来,浏览器在向Web 服务器发送消息时,只要从该内存地址取出IP 地址,并将它与HTTP 请求消息一起交给操作系统就可以了。总结:根据域名查询IP 地址时,浏览器会使用Socket 库中的解析器。
今天弄懂了HTTP协议的交互过程,以及DNS的基本原理,下节将继续学习DNS的工作过程以及如何委托协议栈发送消息
转载请注明作者、出处,谢谢