1. 传输控制协议TCP 和 用户数据报协议UDP的区别?
- TCP是面向字节流的,基本传输单位是TCP报文段;UDP是面向报文的,基本传输单位是是用户数据报;
- TCP 注重安全可靠性,连接双方在进行通信前,需进行三次握手建立连接。UDP 是无连接的,使用最大努力交付,即不保证可靠交付。
- UDP 不需要连接等待,所以数据传输快,而 TCP 传输效率相对较低
- TCP 首部开销是20个字节 ,UDP的首部开销是8个字节,这也是减少网络传输开销的一方面
- TCP有拥塞控制和流量控制
- TCP支持点对点通信,提供全双工通信
- 当对网络通讯质量要求不高时,并且要求网络通讯速度能尽量的快,这时就可以使用UDP
- 当对网络通讯质量有要求时,要求整个数据准确无误可靠的传递给对方,这时就适用使用 TCP
2. TCP的三次握手
- 客户端向服务端发送一个 SYN 报文,指明客户端初始化序列号 ISN
- 服务端收到数据包后,由 SYN = 1 知道客户端请求建立连接,那么就会对这个TCP 连接分配缓存和变量(缓存指的是一个字节流队列),接着返回一个确认报文
- 客户端收到确认后,检查ACK,如果正确,则给服务端发送一个 ACK 报文,完成三次握手
3. 为什么不能用两次握手进行建立连接?
- 三次握手目的是确认双方的接收与发送能力是否正常,同步连接双方的初始化序列号 ISN,为后面的可靠性传输做准备
- 两次握手,只有服务端对客户端的起始序列号做了确认
- 三次握手,可以防止已失效的连接请求报文段突然又传送到了服务端,导致服务器错误地建立连接,浪费服务端的连接资源。
4. TCP的四次挥手
- 客户端发送一个 FIN 报文,主动关闭 TCP 连接
- 服务端收到 FIN 报文后,知道客户端请求关闭连接,则返回确认报文
- 当服务端没有要向客户端发送的数据时,就向客户端发送一个 FIN 报文,用于关闭服务端到客户端的数据传送
- 客户端收到 FIN 报文后,发送给服务端一个 ACK 报文作为应答,如果服务端接收到这个数据包,完成四次挥手
5. 为什么需要四次挥手
- TCP 是全双工模式,并且支持半关闭特性,提供了连接的一端在结束发送后还能接收来自另一端数据的能力。
- 任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。
- 当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
- 通俗的来说,两次挥手就可以释放一端到另一端的 TCP 连接,完全释放连接一共需要四次挥手。
6. 三次握手过程中是否可以携带数据?
- 第三次握手时是可以携带数据的
- 假如第一次握手可以携带数据的话,那么会放大 SYN 洪泛。如果有人要恶意攻击服务器,每次都在第一次握手中的 SYN 报文中放入大量的数据,然后疯狂重复发送 SYN 报文的话,就会让服务器开辟大量的缓存来接收这些报文,内存会很容易耗尽,从而拒绝服务。
7. TCP 如何保证可靠性传输
- 三次握手
- 应答机制与超时重传:TCP接收端收到发送端的数据时,它将发送一个确认。如果不能及时收到一个确认,将重发这个报文段。
(3)数据包校验与丢弃重复数据:TCP会检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP会超时重发数据;对于重复数据,则进行丢弃;
(4)对失序数据包进行重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
(5)流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据,防止较快主机致使较慢主机的缓冲区溢出。TCP使用的流量控制协议是可变大小的滑动窗口协议。
(6)拥塞控制:网络拥塞时,减少数据的发送。
8. http协议
- http协议即超文本传输协议,基于TCP协议
- 用于从Web服务器传输超文本到本地浏览器的传送协议。
- http协议是无状态协议,自身不对请求和响应直接的通信状态进行保存,但有些场景下我们需要保存用户的登陆信息,所以引入了cookie 和 session 来管理状态。
- cookie保存在客户端,session保存在服务端
- cookie存在安全隐患,可以通过拦截或本地文件找到cookie后进行攻击,而session相对更加安全
- 登陆信息等重要信息存放为session中
- 单个cookie最大只允许4KB,session没有大小限制,个数只跟服务器的内存大小有关
- cookie可长期有效存在;session依赖于cookie,过期时间默认为-1,只需关闭窗口该 session 就会失效
- 当客户端请求服务器时,都会带上cookie,cookie里面一般都会有一个JSESSIONID,服务器就按照 JSESSIONID 来找到对应的 session;
- 如果客户端请求不包含 JSESSIONID,则为此客户端创建session并生成相关联的JSESSIONID,并将这个JSESSIONID在本次响应中返回给客户端保存。
- 客户端保存这个 JSESSIONID 的方式可以使用cookie机制。若浏览器禁用Cookie的话,可以通过 URL重写机制 将JSESSIONID传回服务器。
11. 一个完整的http请求是怎么样?
- 解析url,获取 url 中包含的域名
- 通过DNS系统查询域名对应的IP
- 浏览器得到域名对应的IP地址之后,向服务器发起三次握手请求建立TCP链接
- TCP链接链接建立起来后,浏览器向服务器发送http请求,如果 html文件在缓存里,浏览器则直接返回, 如果没有,则去后台拿;
- 服务器接收到请求后,根据路径参数映射到特定的处理器进行处理,并将处理结果以及相应的视图返回给浏览器。
- 浏览器解析视图,并根据请求到的资源、数据进行渲染页面,最终向用户呈现一个完整的页面。
12. https
- https 是基于tcp协议,在http的基础上加入了SSL/TLS
- 可看成是添加了加密和认证机制的http
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/65608.html