网络基础

2018-12-01  本文已影响0人  Coder_JdHo

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加密已建立,开始通信

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 // 响应的时间

- 实体内容:服务器返回给客户端的具体数据,比如文件数据
上一篇下一篇

猜你喜欢

热点阅读