美文网首页
网络基础

网络基础

作者: Coder_JdHo | 来源:发表于2018-12-01 00:47 被阅读0次

    http三次握手

    第一次握手:客户端发送了一个带有SYN(建立连接)的Tcp报文到服务器,表示客户端想要和服务端建立连接。
    第二次握手:服务端接收到客户端的请求,返回带有SYN(建立连接)和ACK(确认)标志的报文,询问客户端是否准备好。
    第三次握手:客户端再次响应服务端一个ACK(确认),表示已经准备好。

    http四次挥手

    1. 先由客户端向服务器端发送一个连接释放报文FIN,请求关闭数据传输。
    2. 当服务器接收到客户端的FIN时,向客户端发送一个ACK确认报文,其中ack的值等于FIN+SEQ
    3. 服务端确认没有数据要发送后,就向客户端发送一个FIN,告诉客户端应用程序关闭。
    4. 当客户端收到服务器端的FIN,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ。客户端等待2∗MSL(最长报文段寿命)的时间后,才进入CLOSED状态。
    5. 服务端收到ack后立即进入CLOSED状态。

    为什么要4次挥手
    确保数据能够完整传输。
    当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。
    但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,
    再发送FIN报文给主动方,告诉主动方同意关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

    为什么客户端最后还要等待2MSL
    MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。
    第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
    第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。

    TCP保持连接
    TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

    https连接过程

    1. 客户端发送请求到服务器端
    2. 服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在
    3. 客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端
    4. 服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端
    5. 客户端使用共享密钥解密数据

    此时SSL加密已建立,开始通信

    • (公钥和私钥加密是非对称加密,常见的非对称加密有RSA,比较耗性能;
      共享秘钥加密是对称加密,对称加密算法有DES、AES,加密速度快)
      另外MD5是不可逆的,它既不是对称加密也不是非对称加密

    https如何抓包

    使用Charles来抓取https网络报文

    1. 构造一个中间人代理,它有能力完成TLS/SSL握手,
    2. 弄到一个根证书,并用它生成签名认证的代理服务器证书

    HTTP协议中 POST 方法和 GET 方法有那些区别

    1. GET用于向服务器请求数据,POST用于提交数据
    2. GET请求,请求参数拼接形式暴露在地址栏,而POST请求参数则放在请求体里面,因此GET请求不适合用于验证密码等操作
    3. GET请求的URL有长度限制(2kb左右),POST请求不会有长度限制

    网络模型

    1. OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
      2.四层模型:网络接口层、网络层、传输层、应用层

    什么是 TCP / UDP

    它们都工作在传输层。
    TCP:传输控制协议。
    UDP:用户数据协议。

    TCP 是面向连接的,建立连接需要经历三次握手,是可靠的传输层协议。
    UDP 是面向无连接的,数据传输是不可靠的,它只管发,不管收不收得到。
    简单的说,TCP注重数据安全,而UDP数据传输快点,但安全性一般。

    URL

    URL的全称是Uniform Resource Locator(统一资源定位符)
    通过1个URL,能找到互联网上唯一的1个资源
    URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL

    URL的基本格式 = 协议://主机地址/路径?参数

    HTTP

    Hypertext Transfer Protocol,超文本传输协议

    http请求
    HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容

    - 请求行:包含了请求方法、请求资源路径、HTTP协议版本
    GET /MJServer/resources/images/1.jpg HTTP/1.1 
    
    - 请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息
    Host: 192.168.1.105:8080    // 客户端想访问的服务器主机地址
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0 
    // 客户端的类型,客户端的软件环境
    Accept: text/html, */ *     // 客户端所能接收的数据类型
    Accept-Language: zh-cn  // 客户端的语言环境
    Accept-Encoding: gzip   // 客户端支持的数据压缩格式
    
    - 请求体:客户端发给服务器的具体数据,比如文件数据  (get请求没有)
    

    http响应
    客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端
    HTTP协议规定:1个完整的HTTP响应中包含以下内容

    - 状态行:包含了HTTP协议版本、状态码、状态英文名称
    HTTP/1.1 200 OK 
    
    - 响应头:包含了对服务器的描述、对返回数据的描述
    Server: Apache-Coyote/1.1       // 服务器的类型
    Content-Type: image/jpeg        // 返回数据的类型
    Content-Length: 56811       // 返回数据的长度
    Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间
    
    - 实体内容:服务器返回给客户端的具体数据,比如文件数据
    

    相关文章

      网友评论

          本文标题:网络基础

          本文链接:https://www.haomeiwen.com/subject/apbeqqtx.html