计算机网络

网络分层:有OSI开放系统互联网参考模型和TCP/IP协议族

在这里插入图片描述

一:HTTP协议

1.HTTP定义:超文本传输协议,是一种无状态的,以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。

2.HTTP报文格式:HTTP协议的请求报文和响应报文的结果基本相同,由三大部分组成:

  • 起始行(start line):描述请求或响应的基本信息。
  • 头部字段集合(header):使用key-value形式更详细地说明报文。
  • 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。
    在这里插入图片描述

3.请求行报文格式

  • 请求方法:如get/post/head/put,表示对资源的操作;
  • 请求目标:通常是一个URI,标记了请求方法要操作的资源;
  • 版本号:表示报文使用的HTTP协议版本
    在这里插入图片描述

4.响应行报文格式

  • 版本号:表示报文使用的HTTP协议版本;
  • 状态码:一个三位数,用代码的形式表示处理的结果,比如200成功,500服务器错误;
  • 原因:作为数字状态的补充,是更详细的解释文字,帮助人理解原因。
    在这里插入图片描述

5.HTTP头字段:头部字段是key-value的形式,key和value之间用:分隔。比如前后端分离时经常遇到的要与后端协商传输数据的类型"Content-type:application/json"。HTTP头部字段非常灵活,不仅可以使用标准里的Host、Connection等已有字段,也可以任意添加自定义头,这就给HTTP协议带来了无限的扩展可能。

5.1常用头部字段:HTTP协议中有非常多的头字段,但基本可以分为四大类:

  • 请求字段:请求头中的头字段,如Host,Referer;
  • 响应字段:响应头中的头字段,如Server;
  • 通用字段:在请求头和响应头里都可以出现,如Content-type,Connection。

6.HTTP请求的完整过程:
当用户在浏览器输入网址回车之后,网络协议都做了哪些工作呢?

  1. 首先干活的是浏览器应用程序,它要解析出URL中的域名;

  2. 根据域名获取对应的ip地址,首先从浏览器缓存中查看,如果没有则从本机域名解析文件hosts(/etc/hosts)中查看,还没有则从LDNS(Localdnserver)、Rootserver域名服务器、国际顶级域名服务器的DNS的层层解析;

  3. 拿到ip地址后,浏览器就可以发起与服务器的三次握手请求;

  4. 握手建立链接之后,就开始组装http请求报文,然后发送报文;

  5. 服务器收到请求报文之后,解析请求报文,生成响应数据,发送响应数据;

  6. 浏览器收到响应之后,开始渲染页面。

    在这里插入图片描述

二:HTTPS协议

1.由于http天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截取,修改或者伪造请求/响应报文,数据不具有可信性。
2.HTTPS协议:在所有的HTTP请求和响应发送到网络之前,都要进行加密。
在这里插入图片描述
3.SSL即安全套接层(Secure Sockets Layer),后来改名为TLS(传输层安全,Transport Layer Security)。

三:TCP协议

1.TCP定义:面向连接的,可靠的,基于字节流的传输层协议。
2.TCP 特点:

  • 基于连接的:数据传输之前需要建立连接;
  • 全双工的:双向传输;
  • 字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃;
  • 流量缓存:解决双方处理能力的不匹配;
  • 可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性;
  • 拥塞控制:防止网络出现恶性拥塞。

3.TCP层传输的数据单元是TCP报文,也称报文段。TCP报文中每个字段如图所示。

3.1三次握手
三次握手是基于连接的过程,当客户端向服务端发起连接时,会先发送一包请求数据到服务端来询问是否可以建立连接,这数据就是SYN包,如果服务器同意连接则回复一包SYN+ACK包,客户端收到之后回复一包ACK包,连接就建立成功了。

3.2 思考:为什么是三次握手而不是两次握手?
目的是为了防止已失效的请求报文,突然又传到服务器引起错误。
假设采用两次握手建立连接,客户端向服务端发送了一个SYN包来请求建立连接,因为某些未知原因并没有到达服务器,在中间某个网络节点产生了滞留。客户端为了建立连接会重新发送SYN包,这次的数据包正常送达,服务端回复了SYN+ACK包之后就建立起了连接,但是第一包数据阻塞的网络节点突然恢复,第一包SYN包又送到了服务端,这时服务端会误以为是客户端又发起了一个新的请求连接从而在两次握手之后进入等待状态,这时服务端认为是两个连接而客户端认为是一个连接,这就造成了状态不一致的问题。
如果是三次握手状态下,服务端收不到最后的ACK包,自然不会认为建立连接成功,所以三次握手本质上来说就是为了在不可靠的信道上建立可靠的连接。
在这里插入图片描述

3.3四次挥手
假设客户端主动发起连接关闭请求,需要向服务端发起一包FIN包,表示要关闭连接,然后客户端自己进入终止等待1状态,这是第一次挥手;
服务端接收到FIN包后回复一包ACK给客户端,表示服务端进入了关闭等待状态,而客户端进入终止等待2状态,这是第二次挥手;
这时服务端还可以发送未发送的数据,而客户端还可以接收数据,等到服务端发送完数据之后发送一包FIN包给客户端,服务端进入最后确认状态,这是第三次挥手;
客户端接收到FIN包后回复一包ACK包,然后客户端进入超时等待状态,经过超时时间后关闭连接,而服务端接收到ACK包立即关闭连接,这是第四次挥手。

3.4 思考:为什么客户端需要等待超时时间?
目的是为了保证服务端接收到客户端发送过来的ACK包。
假设客户端发送完最后一包ACK包后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态。如果客户端发送最后一包ACK包后,等待一段时间,这时服务端因为没有收到ACK包,会重发FIN包,客户端会响应这个FIN包,然后客户端会重发ACK包并刷新超时时间,这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中进行可靠的连接断开。
在这里插入图片描述

四:UDP协议

UDP:是面向无连接的传输层协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值