图解HTTP笔记(一)

title:图解HTTP笔记(一)

date:2017年10月18日18:54:17


一.TCP/IP协议族

通常我们使用的网络都是在TCP/IP协议族的基础上运作的,HTTP属于该协议族。

我们在计算机网络这门课中曾经学习过计算机网络分层。

如果按照ISO/OSI规定来分,我们会分为七层。

物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)

数据链路层:将比特组装成帧和点到点的传递(帧Frame)

网络层:负责数据包从源到宿的传递和网际互连(包PackeT)

传输层:提供端到端的可靠报文传递和错误恢复(段Segment)

会话层:建立、管理和终止会话(会话协议数据单元SPDU)

表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

而如果我们按照TCP/IP协议族来分的话,我们会把计算机网络分为4层。

  • 数据链路层
    用来处理连接网络的硬件部分。包括OS,硬件的设备驱动,网卡及光纤等无力可见部分,只要是硬件范畴的,都在链路层的作用范围中。
  • 网络层
    网络层用来处理网络上流动的数据包(网络传输的最小数据单位)。
    该层规定了通过怎样的路径到达对方计算机。并把数据包传给对方。

  • 应用层
    传输层对上传应用层,提供处于连接中的两台计算机之间的数据传输。
    在传输层中有两个很重要的协议 TCP 和UDP协议

  • 传输层
    应用层决定了向用户提供应用服务时通信的活动。
    FTP,DNS,HTTP都是传输层的服务。

二.TCP/IP通信过程

以客户端在应用层发出一个想看某个WEB页面的HTTP请求来举例。

发送请求时,处于应用层的HTTP协议负责生产针对WEB服务器的HTTP请求报文。

接着,请求走到传输层时,TCP协议开始发挥作用了,为了方便通信传输,它将HTTP请求报文分割成若干报文段(按序号分)。

然后走到网络层,这个时候大佬IP协议就出来了,他负责搜索对方的地址,增加作为通信目的地的MAC地址后转发给链路层。(一般需要经过多次路由转发)

接收端的服务器在链路层收到数据,往上层网络层发送,然后到达传输层,TCP协议负责将从客户端发出的若干报文段重组成有序的请求报文,然后上传到应用层,此时HTTP协议对WEB服务请求的内容进行处理。找到相应服务器相应资源。

请求的结果以同样的方式回传。

  • IP协议
    IP网际协议位于网络层,几乎所有使用网络的系统都会用到IP协议。
    IP协议的作用是把各种数据包传送给对方,要确保正确的送达,需要满足很多条件。
    其中有两个重要的信息必须得到,一个是IP地址,一个是MAC地址,一般IP地址都会在HTTP请求中给出,那MAC地址怎么得到呢。这个时候需要用到ARP协议,ARP是一种用以解析地址的协议,根据通信方的IP就可以反查出对应的MAC地址。
    我们知道,在网络通信中,很少会出现双方都在同一局域网中的情况,通常都需要经过多台计算机和网络设备中转才能找到对方,进行中转的过程就会用到ARP协议得到MAC地址,然后用下一个中转设备的MAC地址来搜索下一个中转目标。双方的路由选择并不确定,也就是说并不能确定的知道经过哪些中转设备。
  • TCP
    在大学学习计算机网络的时候,经常会考TCP协议和UDP协议之间的差别。(虽然大学学的计算机网络都已经还给老师了)有一个很重要的区别就是TCP协议保证可靠传输,需要三次握手以确保传输成功。而UDP协议是不可靠的。
    我们主要讲一个三次握手的策略(如果真的要深入讲解TCP协议的话,内容实在太多了,大学学的到现在记得也就是什么滑动窗口什么的了,所以就把最主要的讲一下先,以后有时间再深入了解)
    发送端首先发送一个带有SYN标志的数据包给对方。
    接收端收到后,回传一个带有SYN/ACK标志的数据包以表示传达确认信息。
    最后,发送端回传一个带有ACK的标志的数据包,代表握手结束。
    SYN(synchronize)
    ACK(acknowledge)

  • DNS服务
    他和HTTP协议一样都位于应用层。
    他提供域名到IP地址之间的解析服务。
    由于IP地址实在是对用户不友好,但是通过IP协议寻找对方时又必须用到IP地址。
    为了解决这一问题就出现了DNS服务,我们提供给用户的是友好的域名,但是实际传输的时候,会通过DNS服务将域名解析为对应的IP地址。

三.URL和URI

不知道大家在学习Servlet的时候是否有注意过

String HttpServletRequest.getRequestURI();

StringBuffer HttpServletRequest.getRequestURL();

这两个API的区别,反正我没有,很尴尬。

我们来看看什么是URI

  • URI:
    URI是Uniform Resource Identifier的缩写。即某个协议方案表时的资源的定位标识符。

    • Uniform
      规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。
      另外新增的协议方案也更容易。
    • Resource
      资源的定义是“可标识的任何东西”。不仅是文档文件,包括图像和服务等,只要是能够区别于其他类型的,全都可以称为资源。
    • Identifier
      表示可标识的对象,也称为标识符。

    URI用字符串标识某一互联网资源,而URL表示资源的地点(在互联网上所处的位置)。URL是URI的子集。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。
    原来uri包括url和urn,后来urn没流行起来,导致几乎目前所有的uri都是url
    URL代表资源的路径地址,而URI代表资源的名称。
    通过URI找到资源是通过对名称进行标识,这个名称在某命名空间中,并不代表网络地址,如:
    urn:issn:1535-3613
    用一个例子来解释下URI和URL的区别

作者:daixinye
链接:https://www.zhihu.com/question/21950864/answer/154309494
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。拿人做例子,假设这个世界上所有人的名字都不能重复,那么名字就是URI的一个实例,通过名字这个字符串就可以标识出唯一的一个人。现实当中名字当然是会重复的,所以身份证号才是URI,通过身份证号能让我们能且仅能确定一个人。那统一资源定位符URL是什么呢。也拿人做例子然后跟HTTP的URL做类比,就可以有:动物住址协议://地球/中国/浙江省/杭州市/西湖区/某大学/14号宿舍楼/525号寝/张三.人可以看到,这个字符串同样标识出了唯一的一个人,起到了URI的作用,所以URL是URI的子集。URL是以描述人的位置来唯一确定一个人的。在上文我们用身份证号也可以唯一确定一个人。对于这个在杭州的张三,我们也可以用:身份证号:123456789来标识他。所以不论是用定位的方式还是用编号的方式,我们都可以唯一确定一个人,都是URl的一种实现,而URL就是用定位的方式实现的URI。回到Web上,假设所有的Html文档都有唯一的编号,记作html:xxxxx,xxxxx是一串数字,即Html文档的身份证号码,这个能唯一标识一个Html文档,那么这个号码就是一个URI。而URL则通过描述是哪个主机上哪个路径上的文件来唯一确定一个资源,也就是定位的方式来实现的URI。对于现在网址我更倾向于叫它URL,毕竟它提供了资源的位置信息,如果有一天网址通过号码来标识变成了http://741236985.html,那感觉叫成URI更为合适,不过这样子的话还得想办法找到这个资源咯…(from知乎https://www.zhihu.com/question/21950864

在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。
相反的是,URL类可以打开一个到达资源的流。
因为URL直接指定了位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值