zoukankan      html  css  js  c++  java
  • 计算机网络知识总结

    一些术语汇总

    并发与并行

    这俩是不同的哟......
    并发:轮流处理多任务。(两个队伍在排队进一家咖啡厅,咖啡厅就一个门)
    并行:同时处理多任务。(两个队伍在排队进一家咖啡厅,咖啡厅有两个门,每队排一个门)

    TCP/IP

    TCP/IP模型

    TCP/IP不是一个协议,而是一个协议族模型,里面包括4个层:应用层,传输层,网络层与数据层(被视为OSI七层模型的简化版)
    "tcpip

    HTTP,TCP,IP在网络中分属不同的层。
    应用层:HTTP,FTP,POP,SMTP等就属于这个层。应用层主要主要向用户提供一组应用程序,比如邮件发送,远程登录等

    • DNS(域名系统)是一个将域名和IP地址相互映射的分布式数据库,它可以使人更方便的访问互联网(使用域名),而不用记住IP数串。
    • HTTP(超文本传输协议)是互联网上应用最广泛的协议,所有万维网的文件必须遵守该协议。设计HTTP最初的目的是为了传输和接收HTML页面。


    传输层:TCP和UDP属于这个层,该层用于提供两个节点间的数据传输。

    • TCP:
      • 面向连接(需要手动建立连接,确保连接通畅才会传输,网络设备会预留资源以确保连接通畅,通信完成后释放连接)
      • TCP连接只能有两个端点,因此TCP连接只能一对一。
      • TCP提供可靠传输:不重复,不丢失,无错序。(面向连接协议中发送端和接收端都会记录发送和接收的状态)
    • UDP:
      • 无连接(不需要事先建立连接,接收方也不会确认,无法提供可靠传输)
      • UDP没有阻塞控制,因此网络尽管出现阻塞也不会降低传输速率。
      • UDP支持一对多,多对多,一对一,多对一的传输。
      • UDP提供最大努力传输:不保证数据可以成功传送(无连接的数据包每次发送的状态彼此之间独立,不记录)

    无连接的优点:速度快(没有阻塞控制,也省了许多保证可靠传输的机制);可以实现多对一,一对多,多对多(面向连接的需要多个独立连接才能做到);且无连接是实现面向连接的基础(IP是无连接的,它是构建TCP/IP的基础)

    网络层:IP属于这个层。网络层包括地址管理与路由选择,它决定数据通过什么路径来到达另一端。在这层数据被称为数据包。

    网络接口层:通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

    TCP三次握手与四次握手

    三次握手目的是建立可靠的连接。这三次是确认双方都能正确发送并接收对方信息的最小次数。
    "three"
    第一次握手:客户端发送带有SYN标志的数据包到服务端,服务端可以由此确认自己正常接收了数据,也可以确认客户端正确发送了数据。但客户端无法确认任何事。
    第二次握手,服务端发送带有SYN/ACK标志的数据包到客户端,证明了自己发送数据功能正常。客户端知道了自己接收发送功能都正常,也知道了服务端接收发送都正常,但服务端不知道客户端的接收功能是否正常,也不知道自己的发送功能是否正常
    第三次握手,客户端发送带有ACK标志给服务端,至此双方都确认了自己和对方接收、发送功能正常,连接正式建立。

    SYN是客户端到服务端的确认标志;而ACK是反过来的确认标志。在TCP连接中,两者互相发送信息必须都无误才行。

    之所以是三次握手而不是两次握手,主要原因是:如果客户端之前发了一个SYN,但是滞留在网络中没有传到服务端。如果只有两次握手,那么服务端之后如果收到这个过时请求不会再向客户端确认,而是直接建立连接,那么会白白浪费资源。

    断开一个TCP连接需要四次挥手
    "four"
    第一次挥手:客户端发送带FIN标志的数据包给服务端,告诉服务端客户端已停止传送数据。
    第二次挥手:服务端发回客户端ACK,并进入CLOSE_WAIT状态,表示知道了。此时从客户端到服务端的传输通道关闭。(但反向通道没有关闭,于是此时连接处于半关闭状态)
    第三次挥手:等到服务端的数据发送完毕后,它会再给客户端发一个FIN。
    第四次挥手:客户端收到后返给服务端ACK,服务端收到后正式关闭通道。而客户端需要等待一段时间后再进入CLOSE状态。

    之所以服务端不能在接收到ACK后立刻返回FIN,是因为终止数据传输的指令是上层应用层下达的,客户端只能终结自己这边的传输通道,而服务端的数据可能还没有传完。

    最后,当客户端最终发给服务端ACK之后并不是马上CLOSE,而是等一段时间(通常是报文最大寿命时间),有两个原因:

    • 第一,因为它需要确认服务端收到了ACK之后才会正式关闭。如果服务端没有收到ACK的话会重新发送给客户端FIN,然后客户端会再发一次ACK,并重新计时。
    • 第二,它可以消灭所有残留的报文。这也是规避掉可能有滞留在网络的过时报文进入新的请求的情况。

    TCP 如何保证可靠传输

    1. 应用数据被分割成TCP认为最适合发送的数据块。
    2. TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
    3. 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
    4. TCP 的接收端会丢弃重复的数据。
    5. 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
    6. 拥塞控制:当网络拥塞时,减少数据的发送。
    7. 停止等待协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。超时重传: 当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

    HTTP协议

    基本介绍

    HTTP 是一个客户端终端和服务器端请求和应答的标准,是基于TCP/IP之上的应用层协议。通过使用浏览器、网络爬虫等工具,客户端发起了一个请求到服务器上指定端口,我们称这个客户端为用户代理程序。应答的服务器上会存储一些资源,我们称这个应答服务器为源服务器。在用户代理和源服务器之间有很多中间层,比如代理服务器、网关、隧道等。

    工作原理

    1. 客户端(通常是浏览器)通过DNS查找到域名对应的IP地址。
    2. 根据IP地址,HTTP客户端与Web服务器的HTTP端口(默认为80)建立一个TCP连接。
    3. 通过TCP连接,客户端发送一个HTTP请求报文。
    4. 服务器接收请求,根据提供的参数,cookies等信息再生成HTTP响应,并将资源副本(通常是HTML)写到TCP套接字,由客户端读取。
    5. 释放TCP连接
    6. 客户端浏览器解析HTML内容。

    例如:在浏览器地址栏输入一个url,回车后所经历的流程如下:

    1. 浏览器向DNS服务器请求解析该url中对应的IP地址。
    2. 解析到IP地址后,根据IP地址和端口号,和对应服务器建立TCP连接。
    3. 浏览器发出读取文件(URL中域名后面部分)的HTTP请求。该请求报文作为TCP三次握手的第三个报文的数据发送给服务器。
    4. 服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器。
    5. 释放TCP连接
    6. 浏览器解析并显示html内容。

    HTTP特性

    1. 基于请求-响应模式
      HTTP协议规定,请求由客户端发出,然后服务器端进行响应。如果客户端没有请求,服务器端也不会响应。

    2. 无状态
      HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说,如果该事务后续处理要求前边的信息,则必须要重新传输。这样的好处时当每个事务是独立的时,它的响应速度会很快,但也意味着如果事务间有联系的话则需要传入重复的数据。对此引入cookies技术,该技术可以保持一个状态(比如用户登录了网站,但是他跳转的同时需要保持登录状态)。

    3. 无连接(短连接)
      无连接意味着服务器一次链接处理一个请求,当完成响应并且得到客户端应答后即断开。采用这种方式可以节省传输时间,并且提高并发性能。

      可以设置http的keep-alive(长连接),会在完成响应后等一段时间再开始关闭连接,如果还有http请求则保持连接。这样在一个TCP连接中可以发送多个数据,减少了挥手中TIME_WAIT的时间(更少的TCP连接意味着更少的系统内核调用,或者说socket中accpet和close的调用),但是,如果keep-alive的时间过长则也会导致资源浪费)
      (http和TCP都有keep-alive机制,意图不一样。TCP 的keep—alive机制会在最后一次传输完毕http之后过一段时间发给客户端一个确认包,以确保连接正常。如果客户端给出了回应,则表示连接依旧正常,不释放TCP连接)

      还有一种并发连接:其实就是并发的短链接:)
      con

    HTTP请求Request和响应Response格式

    Request包含四部分:请求行,请求头部,空行,请求数据
    "request
    举例(一个GET请求)

    GET /562f25980001b1b106000338.jpg HTTP/1.1
    Host    img.mukewang.com
    User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
    Accept    image/webp,image/*,*/*;q=0.8
    Referer    http://www.imooc.com/
    Accept-Encoding    gzip, deflate, sdch
    Accept-Language    zh-CN,zh;q=0.8
    

    上面的例子中,第一行为请求行,先标明是GET方法,后面是URL以及协议版本。
    下面几行都是请求头部,用来标明服务器要使用的附加信息。
    该请求没有请求数据,所以数据行为空

    要注意的是,GET会把请求数据放在url中,而POST则会放在请求数据行中。因此,GET方法请求数据会显示给客户端,而POST不会,所以使用GET提交数据是不安全的。

    Response 包括三部分:状态行,响应报头,空行,响应正文
    "response"
    举例:

    HTTP/1.1 200 OK
    Date: Fri, 22 May 2009 06:07:21 GMT
    Content-Type: text/html; charset=UTF-8
    
    <html>
          <head></head>
          <body>
                <!--body goes here-->
          </body>
    </html>
    

    第一行为状态行,表名协议版本以及状态码
    后面两行data和content-type则是响应报头,用于输出客户端需要的一些额外信息。
    空行之后,则是相应正文(html)

    请求方法

    HTTP定义了八种方法来操作指定的资源:

    1. GET:请求指定的资源,并返回实体本体。
    2. HEAD:也是请求指定资源,但不会返回具体内容,用于获取报头。
    3. POST:向指定资源提交数据。(这个请求可能会导致新资源的创建或者旧资源的修改)
    4. PUT:向指定资源位置上传其最新内容。
    5. DELETE:请求服务器删除指定的数据。
    6. TRACE:回显服务请求,用于测试诊断。
    7. OPTION: 这个方法可使服务器传回该资源所支持的所有HTTP请求方法,允许客户端查看服务器是否正常运行。
    8. HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

    HTTP 状态码

    1xxx(信息):请求已服务器接收,继续处理。
    2xxx(成功):请求已被服务器成功接收,理解。
    3xxx(重定向):需要后续操作。
    4xxx(客户端错误):请求无法实现。
    5xxx(服务器错误):服务器在实现某个正常请求时出现问题

    常见状态码:
    200 OK: 请求成功
    301 Moved permanently:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
    400 Bad request:请求有语法错误,服务器无法理解
    402 Unauthorized:请求要求用户的身份认证
    403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求
    404 Not Found:服务器无法根据客户端的请求找到资源(网页)。
    500 Internal Server Error:服务器内部错误,无法完成请求

    URL

    URL,全称是Uniform Resource Locator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。
    以下是一个url应有的格式:
    http://www.mmm.com:80/max?name=max&age=26#first

    1. http表示协议;
    2. www.mmm.com表示域名部分(也可以直接使用IP地址)
    3. :80是一个端口部分,如果省略的话则使用默认端口。
    4. /max表示虚拟路径部分,从第一个/开始到?为止,包括目录与文件名。
    5. ?开始之后表示参数部分,有两种方法设置参数:
    6. 到最后是锚部分(不是必须的)

    HTTP与HTTPS的区别

    HTTP以明文形式在浏览器和服务器之间传递信息,不提供加密。如果攻击者截取了报文,则可以直接窃取信息。

    HTTPS则在HTTP的基础上添加了SSL加密协议。SSL依靠证书来验证服务器的身份,并且为客户端与服务端的通信提供加密。HTTPS协议更安全,但是在握手时也更耗时。

    RESTful

    什么是REST?
    Representation State Transfer:表现层状态转化。
    表现层意思是“资源的表现方法”,比如文本的表现方法是txt文件,图片的表现方法是jpg等。而状态转化的意思是“通过某种手段让服务器发生变化”。这种手段就是HTTP协议操作。综上所述,REST的意思是:

    1. Resources:使用URL定位资源。
    2. Representation:在客户端与服务端,传递资源的表现层
    3. State Transfer:使用4个HTTP动词(GET,POST,PUT,DELETE)对服务器进行操作。

    REST是网络中client与server之间的交互风格,REST本身不实用,实用的是如何写出RESTful的API。

    1. URI使用名词而不是动词,且名词最好是复数。
    2. 具体动词使用HTTP的操作符GET,POST等
    3. 使用HTTP status code 来传递状态信息,比如404什么的。
    4. 传递资源的某种表现形式(比如json,html,jpg等)
  • 相关阅读:
    jQuery小案例
    update-alternatives
    计算机网络备忘
    报文交换 (转自百度百科,方便以后复习)
    erlang supervisor simple_one_for_one实例
    erlang supervisor中启动普通的进程
    erlang四大behaviour之一gen_server(转载)
    用Doxygen+Graphviz生成函数调用流程图(转)
    selenium模块
    request模块
  • 原文地址:https://www.cnblogs.com/maxdofo/p/12927053.html
Copyright © 2011-2022 走看看