学习笔记-网络基础

TCP/IP

在这里插入图片描述

TCP的三次握手

目的:建立连接。

TCP Flags
1为有效,0为无效

  • URG:紧急指针标志
  • ACK:确认序号标志
  • PSH:push标志
  • RST:重置连接标志
    - SYN:同步序列号,用于建立连接过程
    - FIN:finish标志,用于释放链接

握手是为了建立连接,流程如下:
在这里插入图片描述
seq:为自己的标记缓存的初始序号
ack:确认号
第一次握手
一开始都是close状态,假设主动客户端主动打开,服 务端进入listen监听状态,等待请求,发出连接请求报文(SYN包),报文头为SYN=1,seq为任意正整数。客户端进入同步发送状态(SYN_SEND),等待服务器确认。
第二次握手:
如果服务端同意接收信息,会发出确认报文(SYN+ACK包 ),报文头seq为另外一个正整数,ack为x+1,服务端进入同步收到的状态(SYN_RECV)
前两步都不携带数据,都需要消耗一个序列号。
第三次握手:
客户端接收到确认报文(SYN+ACK包 ),还要向服务端给出确认,发出确认报文(ACK包),两端都进入ESTABLISHED状态,完成三次握手。
此后,双方就建立了链接,可以开始通信了。

可以携带数据。如果不携带数据就不消耗序号。

为什么需要三次握手?

为了初始化Sequence Number 的初始值。

首次握手的隐患–SYN超时

原因:
Server收到Client的SYN ,回复SYN- ACK的时候未收到ACK确认
Server不断重试直至超时, Linux默认等待63秒才断开连接
此时可能遭受恶意攻击。

防护措施:
SYN队列满后,通过tcp_ syncookies参数回发SYN Cookie
若为正常连接则Client会回发SYN Cookie ,直接建立连接

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

保活机制
一直发送探测报文,直到达到设定次数还无响应就中断连接

TCP四次挥手

目的:为了中止连接

流程图:在这里插入图片描述

第一次挥手:
最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq,然后进入FIN_WAIT_1状态。
第二次挥手:
服务器收到报文,发出确认报文(ACK),进入CLOSE_WAIT状态。
CLOSEWAIT状态:半关闭状态,客户端没有数据需要发送,服务器如果要发送数据客户端也可以接收。
第三次挥手:
客户端收到报文进入FIN_WAIT_2状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文,然后进入LAST_ACK状态。
第四次挥手:
客户端收到报文后必须发送确认报文,进入TIME_WAIT,但连接没有释放。
服务端收到确认直接进入CLOSED状态

什么有TIME_WAIT状态

原因

确保有足够的时间让对方收到ACK包,所以才设置为2MS
避免新旧连接混淆

为什么需要四次握手才能断开连接

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

tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输

服务器出现大量CLOSE_ WAIT状态的原因

对方关闭socket连接,我方忙于读或写,没有及时关闭连接
解决:
检查代码,特别是释放资源的代码
检查配置,特别是处理请求的线程配置

UDP的特点

➢面向非连接
➢不维护连接状态,支持同时向多个客户端传输相同的消息
➢数据包报头只有8个字节,额外开销较小
➢吞吐量只受限于数据生成速率、传输速率以及机器性能
➢尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
➢面向报文,不对应用程序提交的报文信息进行拆分或者合并

区别:

➢面向连接VS无连接
➢可靠性.
➢有序性
➢速度

TCP的滑动窗口

即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)

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

保证TCP的可靠性
接收方使用滑动窗口来告诉发送方我还可以接受多少数据。

保证TCP的流控特性

HTTP

特点

  • 支持客户/服务器模式
  • 简单快速
  • 灵活
  • 无连接
  • 无状态

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

答案
➢客户端进行DNS解析,查询服务器缓存,解析url,找到服务器的IP地址
➢进行TCP连接,三次握手
➢客户端发送HTTP请求
➢服务器处理请求并返回HTTP报文
➢客户端解析渲染页面
➢连接结束,四次挥手

HTTP状态码

1xx :指示信息–表示请求已接收,继续处理
2xx :成功–表示请求已被成功接收、理解、接受
3xx :重定向–要完成请求必须进行更进一步的操作
4xx :客户端错误–请求有语法错误或请求无法实现
5xx :服务器端错误–服务器未能实现合法的请求

GET和POST区别

Http报文层面: GET将请求信息放在URL , POST放在报文体中
数据库层面: CET符合幂等性和安全性, POST不符合
其他层面: GET可以被缓存、被存储,而POST不行

get有长度限制,post没有

Cookie ,Session区别

➢Cookie数据存放在客户的浏览器上, Session数据放在服务器上
➢Session相对于Cookie更安全
➢若考虑减轻服务器负担,应当使用Cookie

HTTPS

S:Security
https增加了一个SSL层

SSL(Security Sockets Layer ,安全套接层)
➢为网络通信提供安全及数据完整性的一-种安全协议
➢是操作系统对外的API , SSL3.0后更名为TLS
➢采用身份验证和数据加密保证网络通信的安全和数据的完整性

HTTP和HTTPS的区别

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

HTTPS密文传输, HTTP明文传输

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

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

Socket

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

发布了33 篇原创文章 · 获赞 0 · 访问量 475

猜你喜欢

转载自blog.csdn.net/naerjiajia207/article/details/104078544