1.学JavaWeb为什么要学网络知识?
当性能无法满足我们的需求时,如果不熟悉框架底层,往往束手无策,网络也是一样,我们没办法判定程序为何变慢,是网络原因还是其他原因?数据包是否丢失?为什么会造成大量loads wait?为什么会出现大量连接丢失等等。
2.七层模型
第一层:** **物理层(网卡)
定义物理设备的标准,如光纤的接口类型,网线的类型,传输介质的速率。
作用:发送数据时,将比特流(010101二进制数据),转换为电流的强弱强弱来传输,到达目的地后,再转换为0101二进制数据(数模转换)。
数据:比特
第二层:数据链路层(交换机)
定义了如何格式化数据以进行传输,控制对物理介质的访问。
在传输比特流过程中,会产生错传,数据传输不完整的可能,
作用:它提供错误检测和纠正的功能,以确保数据传输的可靠性,将比特数据组成帧。
数据:帧
第三层:网络层(路由器)
网络层考虑问题:随着网络节点的增加,点对点的通讯是需要多个节点的,如何找到目标节点,如何选择最佳路径。
作用:将网络地址翻译成物理地址,并决定如何将数据从发送方路由到接收方。
数据:数据报、分组
第四层:传输层(路由器)OSI模型中最重要的一层
传输层考虑的问题:随着网络通讯需要的进一步扩大,通讯过程需要发送大量数据,可能需要很长时间,而网络在通讯过程中中断很多次,为了保证传输大量文件的准确性,需要对发送出去的数据进行切分,切割为一个个段落(segment),段落丢失时 是否重传?每个段落是否按顺序到达?
作用:1.分割与重组数据;2.差错控制和流量控制,纠错的功能;3.按端口号寻址;4.连接管理。
传输层要向会话层提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错
数据:分段
表示网络中唯一的进程:ip地址加传输层协议和端口号
某些场合将这个进程称为套接字:socket
3.说说TCP的三次握手?
4.说说TCP的四次挥手?
为什么要三次握手
为什么要TIME_WAIT?
为什么要四次挥手?
服务器出现大量CLOSE_WAIT的原因
10.TCP滑动窗口的原理
-
LastByteAcked:当前已发送并且对方已确认的数据段
-
LastByteSent:指向当前以发送的但对方未确认的最后一个字节
-
LastByteWritten:指向上层应用已写完的最后一个字节,当前程序准备好的要发送的数据段。
-
LastByteAcked ~ LastByteSent区间:表示已经发送但是未收到ACK的数据
-
LastByteSent ~ LastByteWritten区间:表示未发送出去的数据
-
LastByteRead:TCP缓冲区已读取的最后一个字节
-
NextByteExpected:收到的连续包的最后一个位置
-
LastByteRcved:收到的包的最后一个位置
-
NextByteExpected ~ LastByteRcved区间:未到达的数据区间
-
LastByteRead ~ NextByteExpected区间:已收到的数据区间
ACK中会汇报自己的Window = MaxRcvBuffer – LastByteRcvd – 1(只剩下这么多的空间能装新的数据)
发送方会根据窗口来控制发送数据的大小,以保证接收方可以处理
已发送且待确认的数据量要小于接收方的窗口大小。
窗口内剩余的可发送的数据大小EffectiveWindow等于AdvertisedWindow减去待确认的数据量。
TCP最基本的传输可靠性来源于确认重传机制,TCP滑动窗口的可靠性也是建立在重传基础之上的,发送窗口只有收到接收端对于本段发送窗口内字节的ack确认才会移动发送窗口的左边界,接收窗口只有在前面所有的段确认的情况下才会移动左边界,当在前面还有字节未接收,但收到后面的字节窗口是不会移动的,并不会对后面字节确认对端会对这些数据重传。
11.GET和POST的区别
12.session和cookie的区别
url回写:比如登陆请求成功后返回首页,这时首页的链接或包含的其他链接都会在链接参数后加上sessionId
- 实验证明一下关于tomcat的url回写机制
13.socket的通信流程
14.浏览器上输入url后按下回车发生了什么?
- 待详细
1. 根据域名解析得到ip地址
2. 通过ip地址和端口与服务端建立tcp连接
3. 向服务端发送http请求
4. 服务端接收处理请求
5. 响应结果给浏览器
6. 关闭tcp连接
7. 浏览器解析html
8. 浏览器渲染结果