1.《剑指Java面试-Offer直通车》--计算机网络

计算机网络
1. 物理层【传输比特流 模数/数模 网卡】
2. 链路层【封装成帧 SOH EOT、透明传输 增加转义字符、 差错检查 cro循环冗余】
3. 网络层【路由器的分组交换,有个转发表,知道下一条的路有】【MTU 】
————物理地址是数据链路层和物理层使用的地址。主机或者路由器收到MAC帧后,根据硬件地址决定是否需要接受
————ARP:高速缓存。广播出,单播回
4. 传输层【为应用进程提供通信】
5. 会话层
6. 表示层
7. 应用层
8. TCP【MSS 536】
————TCP和UDP在发送报文时,所采用的方式完全不同。TCP不关心应用进程一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值和当前网络拥塞来决定一个报文段应该包含多少字节;UDP发送的报文长度是应用进程决定的,如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分短一些再传送。如果应用进程一次只发送一个字节,TCP也可以等待累积足够多字节后再传送
————TCP下层网络提供的是不可靠的传输。因此:TCP必须采用适当的措施才能变得可靠【理想传输条件有两个特点:1. 传输信道不产生差错2. 不管发送方多快的发送数据,接收方总是来得及处理收到的数据 
————停止等待、连续ARQ、滑动窗口流量控制(让发送方发送的不要太快,接收方来得及接受)、Nagle算法、拥塞控制算法【慢开始、快重传(让发送方尽早知道个别报文段的丢失)】
————三次握手:【SYN、ACK CLOSED-》SYN_SENT-》LISTEN-》SYN_RECVED-》ESTABLISTED】【三次握手也可以变成四次握手】【保证数据序列正确、为了防止失效的报文浪费资源】
————SERVER没有收到三次握手的最后一次(SERVER会不断重试直到超时,Linux默认等待63s后超时)   SYN FLOOD攻击:SYN队列满后,通过tcp_syncookies回发SYNC—COOKIE
————三次握手后,客户端故障,服务端触发保活机制【向对方发送保活探测包,如果未收到响应则继续发送,一定次数后中断】
————四次挥手:【FIN_WAIT-1、CLOSE_WAIT、FIN_WAIT2、LAST_ACK、TIME_WAIT】 2msl原因: 最后ack可以有效到达、本次连接相关的请求都可以在网络中消失
9. keep-alive
————Connection: keep-alive。【指定时间或者达到最大连接数就会断开】
————Transfer-Encoding - 分块传输和Content-Length【服务端和客户单都保持长链接,那么客户端如何知道此刻已经响应完成了呢?】有时候响应体长度不好获取
10. cookie. session
————用来跟踪浏览器用户身份的会话方式。cookie数据保存在客户端,session数据保存在服务端
11. Https
————什么是安全?A与B通信的内容,有且只有AB能看到通信的真正内容
————使用非对称加密算法对对称加密算法协商【为了不让对称加密算法被第三者知道。所以使用了随机数】
————使用非对称加密算法,服务器端发送公钥给客户端时,被中间人调包了,怎么办?【中间人攻击,无法确认返回公钥的是中间人还是真实的人。密码学的身份验证问题】——使用第三方机构的公钥
    【所以,我们不能直接将服务器的公钥传递给客户端,而是第三方机构使用它的私钥对我们的公钥进行加密后,再传给客户端。客户端再使用第三方机构的公钥进行解密。】
————数字证书+数字签名 【XX.com 非对称公钥 md5】-》编码【第三方机构siyao加密】
 

一、网络基础知识讲解

  • OSI开放式互联参考模型

第1层 物理层

首先解决两台物理机之间的通信需求,具体就是机器A往机器B发送比特流,机器B能收到比特流。

主要作用是传输比特流(0101二进制数据),将比特流转化为电流强弱传输,到达目的后再转化为比特流,即常说的数模转化和模数转换。这层数据叫做比特。网卡工作在这层。

第2层 数据链路层

【封装成帧、透明传输、差错检测】

封装成帧:在数据前后添加首部和尾部,使用帧定界符。(SOH、EOT),数据部分小等于MTU

透明传输:为了避免中数据中非法包含SOH、EOT等特殊字符,链路层需要给特殊字符前增加转义字符   

差错检测:比特在传输过程中可能会出现1-》0,0-》1的差错,采用循环冗余检验(CRC)检错技术。

第3层 网络层

从层次角度看:物理地址是数据链路层和物理层使用的地址,而IP层是网络层和以上各层使用的地址,是一种逻辑地址。

使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了。【MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧首部中】 

 

ARP:根据IP地址找出硬件地址【在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或者超时删除)】,如果ARP高速缓存中找不到,那么会广播请求,单播收到回复。。。。请注意:ARP是解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题

路由器有转发表,可以知道下一跳路由器

网络层:IP数据报有个字段叫做:首部校验和。只检验首部,不包括数据部分

第4层 传输层

为什么需要传输层?

网络层为主机之间提供逻辑通信。而运输层为应用进程之间提供端到端的逻辑通信

运输层:需要对收到的报文进行差错检测

TCP:传输控制协议(Transmission Control Protocol)

UDP:用户数据报协议(User Datagram Protocol)

第5层 会话层

自动收发包,自动寻址。

会话层作用是建立和管理应用程序间的通信。

第6层 表示层

Linux给WIndows发包,不同系统语法不一致,如exe不能在Linux下执行,shell不能在Windows不能直接运行。于是需要表示层。

解决不同系统之间通信语法问题,在表示层数据将按照网络能理解的方案进行格式化,格式化因所使用网络的不同而不同。

第7层 应用层

规定发送方和接收方必须使用一个固定长度的消息头,消息头必须使用某种固定的组成,消息头中必须记录消息体的长度等信息,方便接收方正确解析发送方发送的数据。应用层旨在更方便应用从网络中接收的数据,重点关注TCP/IP协议中的HTTP协议。

二、TCP三次握手

IP负责将每个包路由至目的地。IP协议没有确认包是否按顺序发送,或包是否被破环,因此IP数据包是不可靠的。需要它的上层协议做出控制。

  • 传输控制协议TCP简介

1)面向连接的、可靠的、基于字节流的传输层通信协议

2)将应用层的数据流分割成报文段并发送给目标节点的TCP层

3)数据包都有序号,对方收到则发送ACK确认,未收到则重传

4)使用校验和来检验数据在传输过程中是否有误

应用层向TCP层发送数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元MTU的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认ACK;如果发送端实体在合理的往返时延RTT内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

TCP和UDP在发送报文时,所采用的方式完全不同。TCP不关心应用进程一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值和当前网络拥塞来决定一个报文段应该包含多少字节;UDP发送的报文长度是应用进程决定的

如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分短一些再传送。如果应用进程一次只发送一个字节,TCP也可以等待累积足够多字节后再传送

TCP下层网络提供的是不可靠的传输。因此:TCP必须采用适当的措施才能变得可靠

理想传输条件有两个特点:
1. 传输信道不产生差错

2. 不管发送方多快的发送数据,接收方总是来得及处理收到的数据 

停止等待协议、连续ARQ协议、

注:TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段 【首部+数据】


端口:两个进程在计算机内部进行通信,有管道、内存共享、信号量、消息队列等方法。两个进程通信最基本的前提是唯一标识一个进程,通过唯一标识找到对应的进程。在本地进程通信中可以通过pid,但pid只在本地唯一。如果把两个进程放到两台计算机通信,pid实现不了。解决这个问题的方法就是在传输层使用协议端口号,简称端口。IP地址可以唯一标识主机,TCP协议和端口号可以唯一标识主机中的一个进程,利用IP地址+协议+端口号唯一标识去标识网络中的一个进程,这种唯一标识的模式称为Socket。

seq序号:占4字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如:一段报文的序号字段值是107,携带的数据是100个字段,下一个报文段序号从107+100=207开始。

ack确认号:4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如:B收到A发送的报文,其序号字段是301,数据长度是200字节,表明B正确收到A发送的到序号500为止的数据(301+200-1=500),B期望收到A下一个数据序号是501。B发送给A的确认报文段中把ack确认号置为501。

数据偏移:TCP报文的首部长度

保留:保留今后使用的,被标为1。

控制位:由8个标志位组成。每个标志位表示一个控制功能。

其中主要的6个:

URG紧急指针标志,为1表示紧急指针有效,为0忽略紧急指针。

ACK确认序号标志,为1表示确认号有效,为0表示报文不含确认信息,忽略确认号字段。上面的确认号是否有效就是通过该标识控制的。

PSHpush标志,为1表示带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将该报文段交给应用程序,而不是在缓冲区排队。

RST重置连接标志,重置因为主机崩溃或其他原因而出现错误的连接,或用于拒绝非法的报文段或非法的连接。

SYN同步序号,用于建立连接过程,在连接请求中SYN=1和ACK=0表示该数据段没有使用捎带的确认域,连接应答捎带一个确认即SYN=1和ACK=1。

FIN终止标志,用于释放连接,为1时表示发送方没有发送了。

窗口:滑动窗口大小,用来告知发送端接收端缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。

校验和:奇偶校验,此校验和是对整个的TCP报文段(包括TCP头部和TCP数据),以16位进行计算所得,由发送端计算和存储,接收端进行验证。

紧急指针:只有控制位中的URG为1时才有效。指出本报文段中的紧急数据的字节数。

选项:其长度可变,定义其他的可选参数。【最长可达40字节】,当没有使用选项时,TCP的首部长度是20字节。

最大报文长度MSS【Maximum Segment Size】:是每一个TCP报文段中的数据字段的最大长度

TCP流量控制。利用滑动窗口实现流量控制

 

拥塞控制算法

 

TCP三次握手


当应用程序希望通过TCP与另一个应用程序通信时,会发送一个通信请求,这个请求必须发送到一个确切的地址,双方握手之后,TCP建立一个全双工的通信(计算机A能给B发送信息,在发送信息的同时B也能给A回发信息。半双工通信:双向交替通信,即通信的双方都可以发送信息,但不能双方同时发送和接收),这个通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。握手即为TCP三次握手。

 

 TCP四次挥手

 

 

UDP的理解:

 TCP的滑动窗口

TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?_程序员吴师兄的博客-CSDN博客

HTTP相关

  • Http1.0 1.1 2.0的区别?

参考:HTTP keep-alive详解_海为龙世界,云是鹤家乡-CSDN博客_keep-alive

  • 客户端请求消息(Request)

客户端发送一个HTTP请求到服务器的请求消息结构如下:

  • 在浏览器地址栏键入URL,按下回车之后经历的流程

忽略掉诸如键盘事件响应之类的,只关心跟网络相关的知识。考虑最简单的流程。

1)DNS解析:浏览器会依据URL逐层查询DNS服务器缓存,解析URL中的域名对应的IP地址,DNS缓存从近到远依次是浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、域名服务器缓存、顶级域名服务器缓存。从哪个缓存找到对应的IP直接返回,不再查询后面的缓存。

2)TCP连接:结合三次握手

3)发送HTTP请求:浏览器发出读取文件的HTTP请求,该请求发送给服务器

4)服务器处理请求并返回HTTP报文:服务器对浏览器请求做出响应,把对应的带有HTML文本的HTTP响应报文发送给浏览器

5)浏览器解析渲染页面

6)连接结束:浏览器释放TCP连接,该步骤即四次挥手。第5步和第6步可以认为是同时发生的,哪一步在前没有特别的要求。

  • 常见的HTTP状态码

状态码由3位数字组成,第一位定义响应的类别

1XX:指示信息,服务器收到请求

2XX:请求成功,表示请求已经被成功接收、理解、接受

    200 OK:正常返回信息

3XX:重定向,要完成请求必须进行进一步操作

    301:永久重定向,配合location,浏览器自动处理。

    302:临时重定向,配合location,浏览器自动处理。只是临时地从旧地址跳转到新地址

    304:资源未被修改

4XX:客户端错误,请求由语法错误或请求无法实现

    400 Bad Request:客户端请求有语法错误,不能被服务器所理解。此时需要分析客户端的代码,去看看请求为什么出现服务      器无法理解的错误。

    401 Unauthorized:缺失或错误的认证,这个状态代码必须和WWW-Authenticate报头域一起使用。

    403 Forbidden:客户端请求没有权限去访问要求的资源。

    404 Not Found:请求资源不存在,检擦URL或路径配置。

5XX:服务端错误,服务器未能实现合法的请求

    500 Internal Server Error:服务器错误。检查服务器日志,看看里面的代码哪里错误,进而抛出异常。

    502 Bad Gateway:服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

    504 Gateway Timeout:网关超时,由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答

  • GET请求和POST请求的区别

Content-Type最常见的几种类型:

application/x-www-form-urlencoded  form表单默认的数据格式,提交的数据形式 key1=val1&key2=val2(参数少)

multiple/form-data 一般用来上传文件,也可以上传普通数据

application/json json对象(参数多)
 

Cookie和Session的区别(面试必备)_chen13333336677的博客-CSDN博客_session和cookie的区别面试题

也许,这样理解HTTPS更容易

​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值