TCP协议、IP协议、HTTP协议分别在哪一层?
- TCP:运输层
- IP:网络层
- HTTP:应用层
网络七层模型和网络五层模型
TCP协议的三次握手:
- 建立连接时,客户端发送SYN包(syn=x)到服务器,进入SYN_SEN状态,等待服务器确认
- 服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送了一个SYN包(syn=y,即SYN+ACK包),进入SYN_RECV状态
- 服务端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),包发送完毕,客户端和服务器进入ESTABLISHED状态(TCP连接成功),完成三次握手。
TCP协议的四次握手:
- 由于TCP协议是全双工的,因此每个方向都必须单独进行关闭。
- 全双工(Full Duplex)通信允许数据在两个方向上同时传输。能力上相当于两个单工通信的结合。
- 半双工(Hals Duplex)数据传输指可以在一个信号载体的两个方向上传输,但是不能同时传输。[同一时间仅允许一个方向,实际上是一种切换方向的单工通信;同一时间只有一方接受或发送信息,如对讲机]
- 单独关闭的原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
- TCP的连接的拆除需要发送四个包,因此称为四次握手(four-way handshake)。服务端或刘拉你端均可主动发起挥手动作,在sokert编程中,任何一方执行close()操作即可产生挥手操作。
- 四次握手过程:
- 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送
- 服务器B收到这个FIN,它发送一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
- 服务器B关闭与客户端A的连接,发送一个FIN给客户端A
- 客户端A发送ACK报文确认,并将确认序号设置为收到序号加1。
| TCP | 状态 |
|---|---|
| SYN | 建立连接 |
| FIN | 关闭连接 |
| ACK | 响应 |
| PSH | 有DATA数据传输 |
| RST | 连接重置 |
- ACK可能是与SYN,FIN等同时使用的,如SYN和ACK,可能同时为1,他表示的就是建立之后的响应
- 如果只是单个SYN,表示的只是建立连接。
为什么连接时候三次握手,关闭的时候四次握手?
- 连接时,当Server端收到Client端的SYN请求后报文后,可以直接发送SYN+ACK报文。ACK报文是用来应答的,SYN报文是用来同步的。
- 关闭时,当Server端收到FIN报文时,很可能不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端。当Server端所有的报文都发送完后,才能发送FIN报文,因此不能一起发送,所以需要四次握手。
为什么TCP要建立连接?
- 保证可靠传输
TCP为什么可靠一些?
- 三次握手、超时重传、滑动窗口、拥塞控制
哪种应用场景会使用TCP协议,使用它的意义?
- 当对网络通信质量有要求时:整个数据都要准确无误的传输给对方,这往往用于一些可靠的应用。如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTO等邮件传输的协议
TCP连接和释放过程,描述:
-
三次握手:
- 主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始***seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)
- 主机B收到请求后,会发回连接确认数据包。(其中确认报文段中,表示位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始***seq(B)=y,以及主机B对主机A初始***的确认号ack(b)=seq(a)+1=x+1)
- 第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个***seq(A)=x+1;确认号为ack(A)=y+1的报文;
-
四次握手:假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下:
- 关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,***seq=u;
- 服务器收到这个FIN,它发送回一个ACK,确认号ack为收到的序号加1.(此时服务器还未关闭,当所有服务器端所有报文都发送完毕后再回进入下一步)
- 关闭服务器到客户端的连接:也是发送一个FIN给客户端
- 客户端收到FIN后,会发回一个ACK报文确认,并将确认序号seq设置为收到序号加1。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
解释,http请求中304状态码的含义
- 304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
- 如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为if-Modified-Since HTTP标头)。服务器可以告诉Googlebot自从上次抓取网页没有变更,进而节省带宽和开销。
请你说明一下,SSL四次握手的过程
- 客户端发送请求
- 首先,客户端(通常是浏览器)先向服务器发送加密通信的请求,这叫做ClientHello请求
- 服务器回应
- 服务器收到客户端请求后,向客户端发出回应,这叫做ServerHello
- 客户端回应
- 客户端收到服务器回应以后,首先验证服务器证书,如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
- 服务器的最后回应
- 服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所有的“会话秘钥”。然后,向客户端最后发送下面信息。
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和秘钥发送。
- 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用“会话秘钥”加密内容。
请你讲讲http1.1和1.0的区别
- 缓存处理:
- 在HTTP1.0中主要是用header里的if-Modified-Since,Expires作为缓存判断的标准。
- HTTP1.1则引入了更更多缓存控制策略例如Entity tag,If-Unmodified-Sine,If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
- 带宽优化及网络连接的使用:
- HTTP1.0中,存在一些浪费带宽的现象,如客户端需要对象一部分,而服务器将整个对象送过来,并且不支持端点续传功能。
- HTTP1.1在请求头中引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),方便开发者自由选择以便于充分利用带宽和连接。
- 错误的通知管理:
- 在HTTP1.1中新增了24个错误状态响应吗,409(Confilict)表示请求的资源与资源发生冲突,410(Gone)表示服务器上的某个资源被永久性删除。