Java复习笔记之计算机网络

OSI与TCP/IP模型详解
本文详细介绍了OSI七层模型与TCP/IP协议的工作原理,对比了两种模型的异同,深入解析了TCP和UDP的特点,以及HTTP和HTTPS的区别。涵盖了三次握手、四次挥手、滑动窗口等关键概念。

OSI七层模型

第1层:物理层

机械,电子,定时接口通信信道上的原始比特流传输,网卡。    比特流

第2层:数据链路层

物理寻址,同时将原始比特流转变为逻辑传输线路 ARP RAPP 交换机   数据帧

第3层:网络层

控制子网的运行,如逻辑编址,分组传输,路由选择,路由器,OSPS,RIP, ICMP, IP   数据包

第4层:传输层

接受上一层的数据,在必要的时候把数据进行分割,并将这些数据交给网络层,保证这些数据段有效到达对端。  TCP UDP  数据段

第5层:会话层

不同机器上的用户之间建立及管理会话   SSL TLS DAP LDAP RPC  

第6层:表示层

信息的语法语义以及他们的关联,如加密解密,转换翻译,压缩解压缩,不同系统之间的信息交流。  LPP   NBSSN  XDP

第7层:应用层  HTTP

OSI和TCP/IP

OSI七层模型

TCP/IP概念性模型

功能

TCP/IP协议簇

应用层

 

应用层

文件传输,电子邮件,文件服务,虚拟终端

TFTP, HTTP, SNMP, FTP,  DNS,  Telnet

表示层

数据格式化,代码转换,数据加密

没有协议

会话层

解除或建立与别的接点的联系

没有协议

传输层

传输层

提供端对端的接口

TCP, UDP

网路层

网络层

为数据包选择路由

IP, ICMP, RIP, OSPF, BGP, ICMP

数据链路层

 

链路层

传输有地址的帧以及错误检测功能

SLTP, CSLTP, PPP, ARP, RARP, MTU

物理层

以二进制的形式在物理媒体上传输数据

ISO2110, IEEE802, IEEE802.2

 

传输控制协议TCP简介

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

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

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

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

 

TCP  Flags:

   URG: 紧急指针标志

   ACK:确认序号标志

   PSH:Push标志 (立即交给应用程序)

   RST: 重置连接标志

   SYN: 同步序号,用于建立连接过程

   FIN:finish标志,用于释放连接

TCP 三次握手流程图:

 

在TCP/IP协议中,TCO协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SNED状态,等待服务器确认

第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn = k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务端进入ESTABLISHED状态,完成三次握手。

 

为什么要三次握手才能建立连接:

为了初始化Sequence Number的初始值,确认客户端和服务端收发正常。

 

首次握手的隐患---SYN超时

问题起因分析:

Server收到Client的SYN,回复SYN-ACK 的时候未收到ACK确认

Server不断重试直至超时,Linux默认等待36秒才断开连接(5次,1+2+4+8+16+32)

 

针对SYN Flood的防护措施;

  SYN队列满后,通过tcp_syncookies参数回发SYN Cookie

  若为正常连接则Client会回发SYN Cookie,直接建立连接

 

建立连接后,Client出现故障怎么办:

保活机制:

   向对方发送保活探测报文,如果未收到响应则继续发送

   尝试次数达到保活探测数仍未收到响应则中断连接

TCP采用四次挥手来释放连接

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态;

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入到LAST_ACK状态;

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

为什么会有TIME-WAIT状态?

原因:确保有足够的时间让对方收到ACK包,若对端没有收到确认,将再次重复FIN,一来一去刚好是2MSL

      避免新旧混淆(有些路由器会缓存数据包)

为什么需要四次挥手中断连接?

因为TCP是全双工通信,发送方和接收方都需要FIN和ACK报文

服务器出现大量CLOSE_WAIT状态的原因?

 对方关闭socket连接,我方忙于读或写,没有及时关闭连接

 检查代码,特别是释放资源的代码

 检查配置,特别是处理请求的线程配置

 

TCP的滑动窗口:

RTT和RTO:

   RTT: 发送一个数据包到收到对应的ACK,所花费的时间

   RTO:重传时间间隔

 

TCP使用滑动窗口做流量控制与乱序重排

  保证TCP的可靠性

  保证TCP的流控特性

 

UDP的特点:

  面向非连接

  不维护连接,支持同时向多个客户端传输相同的消息

  数据包报头只有8个字节(TCP20),额外开销较小

  吞吐量只受限于数据生成速率,传输速率以及机器性能

  尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表

  面向报文,不对应用程序提交的报文信息进行拆分或者合并

 

TCP和UDP的区别:

  面向连接VS无连接

  可靠性

  有序性

  速度

  量级

 

超文本传输协议HTTP主要特点

支持客户/服务器模式

简单快速

灵活

无连接

无状态

 

HTTP定义了web客户端怎么通过HTTP请求页面,以及 web服务端怎么响应页面

 

请求/响应的步骤

客户端连接到Web服务器

发送HTTP请求

服务器接受请求并返回HTTP响应

释放连接TCP连接

客户端浏览器解析HTML内容

 

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

答: DNS解析

     TCP连接

     发送HTTP请求

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

     浏览器解析渲染页面

     连接结束

 

HTTP状态码:

五种可能的取值:

1xx: 指示信息---表示请求已接收,继续处理

2xx: 成功--表示请求已被成功接收,理解,接受

3xx: 重定向--要完成请求必须进行更进一步的操作

4xx: 客户端错误--请求有语法错误或请求无法实现

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

 

常见状态码:

200 OK:正常返回信息

400 Bad Request:客户端请求有语法错误,不能被服务器所理解

401 Unauthorized: 请求未经授权,这个状态码必须和WWW-Authenticate包头域一起使用

403 Forbidden: 服务器收到请求,但是拒绝提供服务

404 Not Found: 请求资源不存在, eg, 输入错误的URL

500 Internal Server Error: 服务器发生不可预期的错误

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

 

GET请求和POST请求的区别:

从三个层面来解答:

  HTTP报文层面:GET将请求信息放在URL,POST放在报文体中

  数据库层面:CET符合幂等性(多次访问的数据一样)和安全性,POST不符合

  其他层面:GET可以被缓存,被存储,而POST不行

 

Cookie和Session的区别

Cookie简介:

 是由服务器发给客户端的特殊信息,以文本的形式存放在客户端

 客户端再次请求的时候,会把Cookie回发

 服务器接收到后,会解析Cookie生成与客户端相对应的内容

 

Cookie的设置以及发送过程:

Session简介:

   服务器端的机制,在服务器上保存的信息

   解析客户端请求并操作session id, 按需保存状态信息

 

Session的实现方式:

   使用Cookie来实现

   使用URL回写来来实现

Cookie和Session的区别:

Cookie数据存放在客户的浏览器上,Session数据放在服务器上

Session相对于Cookie更安全

若考虑减轻服务器负担,应当使用Cookie

 

 

HTTP和HTTPS的区别:

  HTTPS简介:

   

SSL(Security Sockets Layer, 安全套接层)

  为网络通信提供安全及数据完整性的一种安全协议

  是操作系统对外的API,SSL3.0后更名为TLS

  采用身份验证和数据加密保证网络通信的安全和数据的完整性

 

加密的方式:

   对称加密:加密和解密都使用同一个密钥

   非对称加密:加密使用的密钥和解密使用的密钥是不相同的

   哈希算法:将任意的长度的信息转换为固定长度的值,算法不可逆

   数字签名:证明某个消息或者文件是某人发出/认同的

 

HTTPS数据传输流程

   浏览器将支持的加密算法信息发送给服务器

   服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器

   浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器

   服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器

   浏览器解密响应消息,并对消息进行验证,之后进行加密交互数据

HTTP和HTTPS的区别:

  HTTPS需要到CA申请证书,HTTP不需要

  HTTPS密文传输,HTTP明文传输

  连接方式不同,HTTPS默认使用443端口,HTTP使用80端口

  HTTPS = HTTP + 加密 + 认证 + 完整性保护,较HTTP安全

HTTPS真的安全吗?

不一定:

浏览器默认填充http://, 请求需要进行跳转,有被劫持的风险

可以使用HSTS(HTTP Strict Transport Security) 优化

 

Socket简介:

Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口

Socket通信流程

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值