网络知识

网络知识

OSI 七层模型 & TCP/IP五层模型

TCP与UDP的区别

  • TCP面向连接的, 传输数据时,需先进行三次握手,建立连接,UDP是无连接的,发送数据之前不需要建立连接
  • TCP通过确认和重传机制,提供可靠的服务。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,而UDP不保证可靠传输,只是尽可能得交付
  • TCP面向字节流,即将数据看成一连串无结构的字节流。UDP是面向报文的。
  • UDP没有拥塞控制机制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

TCP与UDP的应用场景

对效率要求低,对准确性要求高后者有连接的场景,使用TCP协议

对效率高,对准确性要求低的场景,使用UDP协议

TCP粘包现象原因和解决方法

TCP粘包:客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况。

TCP拆包:客户端连续不断的向服务端发送数据包时,服务端接收数据时,一个数据包被拆成两个数据包。

出现粘包或者拆包的原因

  • 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
  • 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
  • 要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
  • 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

粘包、拆包解决办法

解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:

  • 发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
  • 发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
  • 以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

cookie与session的区别

http协议是无状态的,形象点来说,就是服务器记不住你,每次刷新网页,都需要重新输入账号和密码进行登录,这是难以容忍的,所以有了cookiesession技术,让服务器记住你。

cookie

一个cookie可以认为是一个键值对,存储再浏览器上,服务器可以向浏览器设置多个cookie.

服务器给客户端设置cookie的目的,主要是用来辨识客户端,提供定制化、个性化服务。

在浏览器中,输入账号、密码登录网站成功后,网站服务器会给浏览器设置cookie,下次请求网站页面的时候,网站服务器会读取请求中cookie, 辨识出用户,不用再次输入账号、密码进行登录

session

session是一个数据结构,由网站开发者设计,可以承载各种数据,存储于网站服务器中。

现在的很多网站功能很复杂,而且涉及很多的数据交互,比如说电商网站的购物车功能,信息量大,而且结构也比较复杂,无法通过简单的 cookie 机制传递这么多信息,而且要知道 cookie 字段是存储在 HTTP header 中的,就算能够承载这些信息,也会消耗很多的带宽,比较消耗网络资源。

cookie+session就可以解决此问题。浏览器cookie存储sessionID,请求网站的时,网站服务器读取客户端cookie中存储的sessionID,通过sessionID找到客户对应的session,session里面存储用户的购物车等详细信息,服务器通过读取session里面的信息返回该用户的定制化页面。

四次挥手中,主动关闭端,TCP连接,出现过多的TIMEWAIT状态原因

查看TCP状态数

netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'

高并发,短连接的TCP服务器上, 当服务器处理完请求后,立刻主动正常关闭连接时,会出现大量TCP连接处于TIME_WAIT状态。出现TIME_WAIT状态过多的原因主要是,TCP连接大多是短连接,业务处理+传输数据的时间,远小于TIME_WAIT超时时间,所以导致TCP连接状态一直处于TIME_WAIT状态,如果是高并发请求场景,就会出现过多的TCP连接处于TIME_WAIT状态

重定向与转发的区别

servlet调用重定向和转发的语句分别是

request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp

response.sendRedirect("new.jsp");//重定向到new.jsp

重定向过程:

  1. 客户浏览器发送http请求
  2. web服务器接受后发送302状态码响应及对应新的location给客户浏览器
  3. 客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址
  4. 服务器根据此请求寻找资源并发送给客户

转发过程:

  1. 客户浏览器发送http请求
  2. web服务器接受此请求
  3. 调用内部的一个方法在容器内部完成请求处理和转发动作
  4. 将目标资源发送给客户

区别

  1. 重定向是两次http请求,而转发是一次http请求。

  2. 重定向之后地址栏上的地址会发生变化,变化成第二次请求的地址,转发之后地址栏上的地址不会变化,还是第一次请求的地址

  3. 转发的路径必须是同一个web容器下的url,而重定向可以跳转到任意想要的地址

Http1.0、Http1.1、Http2.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值