数据链路层,也有称作网络访问层、网络接口层。他包含了OSI模型的物理层和数据链路层,把电脑连接起来。
网络层,也叫做IP层,处理IP数据包的传输、路由,建立主机间的通信。
传输层,就是为两台主机设备提供端到端的通信。
应用层,包含OSI的会话层、表示层和应用层,提供了一些常用的协议规范,比如FTP、SMPT、HTTP等。
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 时,既可使用慢开始算法,又可使用拥塞避免算法(通常做法)。
快重传、快恢复
快重传:接受方未收到报文 发送ack给发送方,发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
快恢复:是将cwnd设置为ssthresh减半后的值,然后执行拥塞避免算法,使cwnd缓慢增大。
流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。
放法:滑动窗口
粘包
粘包是指发送方发送的若干数据到接收方,而接收方在接收数据时这些数据粘在一起,后一包数据头紧接着前一包数据尾部。
发生情况:1.发送端发送间隔小,数据量小
2.接收端速率过慢
解决:1.在数据发送前,计算数据量大小,并将结果发送给接收端
2.直接使用固定的四个字节来表示数据长度
3.约定字符串或者字符来分割包
UDP是无连接、不可靠的 面向数据报的,传输层协议
使用场景:
流媒体、在线游戏流量通常使用UDP。 实时视频流和音频流应用是可以接受偶的丢包,不能接受重传数据包带来的高延迟。
udp 不会粘包:UDP 是没有连接的,面向消息的,提供高效率服务。不会使用块的合并优化算法, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包
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请求的完整过程简述
1、域名解析:使用DNS协议进行域名解析
2、建立连接:发起TCP三次握手
3、发起http请求:建立TCP连接成功后,浏览器发起http请求
4、响应http请求:服务端响应http请求,浏览器得到返回response
5、解析response:浏览器解析response,并请求其它的资源(如js、css等)
6、浏览器渲染展示页面:浏览器根据内核对页面进行渲染展示
cookie 和session 的作用 : http 特点为无状态 ,cookie 和session 为了 解决无状态的问题,而存储用户的信息。
浏览器请求时 :求情头部会带上cookie信息。cookie中会存有 session id ,服务器根据 session id 来识别 对饮的 session ,session 过期时间 会根据回话持续而重置时间
(1)Cookie以文本文件格式存储在浏览器中,而session存储在服务端,用来保持服务器的身份状态。
(2)cookie的存储限制了数据量,只允许4KB,而session是无限量的
(3)我们可以轻松访问cookie值但是我们无法轻松访问session值,因此它更安全(通过sessionID获取session)
BIO:同步阻塞IO
NIO:同步非阻塞IO
AIO:异步非阻塞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和事件类型返回给应用进程