java研发工程师不得不知道的有关计算机网络的知识

五层协议的网络体系结构概述

综合osi七层协议,TCP/IP四层协议的优点,概念上更容易理解。

应用层的任务是通过应用进程间的交互来完成特定网络应用。

运输层的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。

网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。

数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。

应用层下的协议

DNS协议

HTTP协议

...

运输层下的协议

TCP协议

UDP协议

...

TCP协议的三次握手与四次挥手

四次挥手时为什么要等待2MSL

server收到ACK,关闭连接。但是client无法知道ACK是否已经到达server,于是开始等待?等待什么呢?假如ACK没有到达server,server会为FIN这个消息超时重传 timeout retransmit ,那如果client等待时间足够,又收到FIN消息,说明ACK没有到达server,于是再发送ACK,直到在足够的时间内没有收到FIN,说明ACK成功到达。这个等待时间至少是:server的timeout + FIN的传输时间(为一个msl),为了保证可靠,采用更加保守的等待时间2MSL。

TCP如何保证可靠传输的

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  3. 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据,并通知发送端重发。
  5. 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  6. 拥塞控制:当网络拥塞时,减少数据的发送。
  7. 停止等待协议也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 超时重传:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

流量控制(滑动窗口)

慢开始和拥塞避免

发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法:当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后(一个传输轮次),把拥塞窗口增加一倍。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

 

拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

从输入URL到页面加载发生了什么?

  1. DNS解析

  2. TCP连接

  3. 发送HTTP请求

  4. 服务器处理请求并返回HTTP报文

  5. 浏览器解析渲染页面

  6. 连接结束

具体过程点击下面链接:

https://segmentfault.com/a/1190000006879700

TCP和UDP的区别

(1)TCP提供的是面向连接的、可靠的数据流传输;UDP提供的是非面向连接的、不可靠的数据流传输。

(2)TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失,不重复,按序到达;UDP尽最大努力交付,即不保证可靠交付。

(3)TCP面向字节流;UDP面向报文。

(4)TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。

(5)TCP首部开销20字节;UDP的首部开销小,只有8个字节。

HTTPS 与 HTTP 的一些区别

(1)HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。

(2)HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。

(3)HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

(4)HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

HTTPS的加密过程

加密方式

对称加密:加密和解密都是同一个密匙。

非对称加密:密钥成对出现,分为公钥和私钥,公钥加密需要私钥解密,私钥加密需要公钥解密。

两者区别

对称加密速度快,非对称加密速度慢。

对称加密要将密钥暴露,和明文传输没区别。

非对称加密将公钥暴露,供客户端加密,服务端使用私钥解密。

Https加密

对称加密和非对称加密结合方式

浏览器使用Https的URL访问服务器,建立SSL链接。

服务器收到SSL链接,发送非对称加密的公钥A返回给浏览器

浏览器生成随机数,作为对称加密的密钥B

浏览器使用公钥A,对自己生成的密钥B进行加密,得到密钥C

浏览器将密钥C,发送给服务器。

服务器用私钥D对接受的密钥C进行解密,得到对称加密钥B。

浏览器和服务器之间可以用密钥B作为对称加密密钥进行通信。

 

 

cookie 和 session 的区别和联系

Cookie 与 Session 都可以进行会话跟踪,主要作用都是在整个会话过程中,实现数据的跨页面访问,但是实现的原理不太一样。

区别

(1)cookie在客户端记录信息确定用户身份,session在服务器端记录信息确定用户身份。

(2)Cookie是服务器发给客户端的特殊信息,cookie是以文本的方式保存在客户端,每次请求时都带上它。

(3)Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。。

(4)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

(5)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。

联系:

(1)cookie和session都是用来跟踪浏览器用户身份的会话方式。

(2)session 的运行依赖 session id,而 session id 是存在 cookie 中的,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)。

Session是保存在服务器端的,每个用户都会产生一个Session。如果并发访问的用户非常多,会产生非常多的Session,消耗大量的内存。 而Cookie保存在客户端,不占用服务器资源。如果并发浏览的用户非常多,Cookie是很好的选择。

HTTP1.0和HTTP1.1的一些区别

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,一定程度上弥补了HTTP 1.0每次请求都要创建连接的缺点。

 

HTTP2.0 和 HTTP1.X 相比的新特性

HTTP 2.0最大的特点:不会改动HTTP 的语义,HTTP 方法、状态码、URI 及首部字段这些核心概念没变,却能致力于突破上一代标准的性能限制,改进传输性能,实现低延迟和高吞吐量。

HTTP 2.0会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码,这些帧可以乱序发送,然后再根据每个帧首部的流标识符重新组装。

 

HTTP 2.0可以让服务器将响应主动“推送”到客户端缓存中,以此来避免往返的延迟。

HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值