网络知识小结

1.TCP/IP四层模型,OSI七层模型

网络知识小结_第1张图片
TCP/IP则是四层的结构,相当于是对OSI模型的简化。

数据链路层,也有称作网络访问层、网络接口层。他包含了OSI模型的物理层和数据链路层,把电脑连接起来。

网络层,也叫做IP层,处理IP数据包的传输、路由,建立主机间的通信。

传输层,就是为两台主机设备提供端到端的通信。

应用层,包含OSI的会话层、表示层和应用层,提供了一些常用的协议规范,比如FTP、SMPT、HTTP等。

2.TCP /UDP 传输层协议

TCP

TCP是一种面向连接的、可靠的传输层协议。
网络知识小结_第2张图片

TCP连接三次握手

1.一开始,客户端和服务端都处于CLOSED状态

2.先是服务端主动监听某个端口,处于LISTEN状态

3.客户端主动发起连接SYN,之后处于SYN-SENT状态

4.服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RCVD状态

5.客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处于ESTABLISHED状态。

6.服务端收到ACK的ACK之后,处于ESTABLISHED状态。

TCP连接释放四次挥手

1.当前A和B都处于ESTAB-LISHED状态。

2.A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。

3.B收到连接释放报文段后即发出确认,然后B进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时TCP连接处于半关闭状态,即A已经没有数据发送了。

从B到A这个方向的连接并未关闭,这个状态可能会持续一些时间。

4.A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文端。

5.若B已经没有向A发送的数据,B发出连接释放信号,这时B进入LAST-ACK(最后确认)状态等待A的确认。

6.A再收到B的连接释放消息后,必须对此发出确认,然后进入TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉,必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入CLOSED状态。

7。B收到A发出的确认消息后,进入CLOSED状态。

TIME_WAIT 状态

主动发起断开连接的一方 在第四次挥手时,进入 TIME-WAIT(时间等待)状态 持续2MSL(两个报文生命周期)

作用:1 为了保证连接的可靠关闭。如果server没有收到最后一个ACK,那么就会重发FIN。
2 识别后来的报文并丢弃

TCP怎么保证传输过程的可靠性?
校验和:发送方在发送数据之前计算校验和,接收方收到数据后同样计算,如果不一致,那么传输有误。
确认应答,序列号:TCP进行传输时数据都进行了编号,每次接收方返回ACK都有确认序列号。
超时重传:如果发送方发送数据一段时间后没有收到ACK,那么就重发数据。
连接管理:三次握手和四次挥手的过程。
流量控制:TCP协议报头包含16位的窗口大小,接收方会在返回ACK时同时把自己的即时窗口填入,发送方就根据报文中窗口的大小控制发送速度。
拥塞控制:刚开始发送数据的时候,拥塞窗口是1,以后每次收到ACK,则拥塞窗口+1,然后将拥塞窗口和收到的窗口取较小值作为实际发送的窗口,如果发生超时重传,拥塞窗口重置为1。这样做的目的就是为了保证传输过程的高效性和可靠性。

拥塞控制和流量控制

拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:

慢启动 :cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探网络的拥塞情况),然后再逐渐增大cwnd,每次翻倍

拥塞避免 : ssthresh (慢开始门限)
当cwnd 当cwnd> ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。每次 +1
当cwnd= ssthresh 时,既可使用慢开始算法,又可使用拥塞避免算法(通常做法)。

快重传、快恢复
快重传:接受方未收到报文 发送ack给发送方,发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
快恢复:是将cwnd设置为ssthresh减半后的值,然后执行拥塞避免算法,使cwnd缓慢增大。

流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。
放法:滑动窗口

粘包

粘包是指发送方发送的若干数据到接收方,而接收方在接收数据时这些数据粘在一起,后一包数据头紧接着前一包数据尾部。

发生情况:1.发送端发送间隔小,数据量小
2.接收端速率过慢

解决:1.在数据发送前,计算数据量大小,并将结果发送给接收端
2.直接使用固定的四个字节来表示数据长度
3.约定字符串或者字符来分割包

UDP协议

UDP是无连接、不可靠的 面向数据报的,传输层协议

使用场景:
流媒体、在线游戏流量通常使用UDP。 实时视频流和音频流应用是可以接受偶的丢包,不能接受重传数据包带来的高延迟。

udp 不会粘包:UDP 是没有连接的,面向消息的,提供高效率服务。不会使用块的合并优化算法, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包

HTTP 协议

HTTP协议
(超文本传输协议)是一种网络通信协议,它将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。默认端口:80

HTTPS协议:
 HTTPS协议是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。默认端口:443

响应状态码:

响应状态码由三位数字组成,第一个数字定义了响应的类别,且有五种类型

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

200 - 请求成功,已经正常处理完毕

301 - 请求永久重定向,转移到其它URL

302 - 请求临时重定向

304 - 请求被重定向到客户端本地缓存

400 - 客户端请求存在语法错误

401 - 客户端请求没有经过授权

403 - 客户端的请求被服务器拒绝,一般为客户端没有访问权限

404 - 客户端请求的URL在服务端不存在

500 - 服务端永久错误

503 - 服务端目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

一次http 请求过程

一、http请求的完整过程简述
1、域名解析:使用DNS协议进行域名解析
2、建立连接:发起TCP三次握手
3、发起http请求:建立TCP连接成功后,浏览器发起http请求
4、响应http请求:服务端响应http请求,浏览器得到返回response
5、解析response:浏览器解析response,并请求其它的资源(如js、css等)
6、浏览器渲染展示页面:浏览器根据内核对页面进行渲染展示

cookie 和 session 的区别

cookie 和session 的作用 : http 特点为无状态 ,cookie 和session 为了 解决无状态的问题,而存储用户的信息。
浏览器请求时 :求情头部会带上cookie信息。cookie中会存有 session id ,服务器根据 session id 来识别 对饮的 session ,session 过期时间 会根据回话持续而重置时间
网络知识小结_第3张图片

(1)Cookie以文本文件格式存储在浏览器中,而session存储在服务端,用来保持服务器的身份状态。

(2)cookie的存储限制了数据量,只允许4KB,而session是无限量的

(3)我们可以轻松访问cookie值但是我们无法轻松访问session值,因此它更安全(通过sessionID获取session)

BIO/NIO/AIO

BIO:同步阻塞IO
NIO:同步非阻塞IO
AIO:异步非阻塞IO
网络知识小结_第4张图片

那么你怎么理解同步和阻塞?

同步异步:重点在用户态,用户是否等待,等待则未同步,不等待区干别的则为异步
阻塞非阻塞:重点在内核,内核拷贝不数据到用户,则为阻塞,拷贝为非阻塞

IO多路复用

IO 多路复用是一种同步 IO 模型,实现一个线程可以监视多个文件句柄,一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作

IO ;指网络请求 多路指多个TCP连接(即 socket 或者 channel),复用指复用一个或几个线程。

epoll
1、epoll_create:创建内核事件表()(红黑树)
2、epoll_ctl:添加或移出监控的fd和事件类
3、 epoll_wait: 绑定回调事件 内核向事件表的fd绑定一个回调函数
4、当监控的fd活跃时,会调用回调函数把事件加到一个活跃事件队列里
5、最后在epoll_wait 返回的时候内核会把活跃事件队列里的fd和事件类型返回给应用进程

select 和 poll 为 阻塞,epoll为 非阻塞
网络知识小结_第5张图片

你可能感兴趣的:(网络,tcp/ip,服务器)