OSI七层模型(自底向上):物理层->数据链路层->网络层->传输层->会话层->表示层->应用层
TCP/IP五层模型(自底向上):物理层->数据链路层->网络层->传输层->应用层
一、Socket简介
二、TCP建立连接的三次握手
- 传输控制协议TCP简介:
1.面向连接的、可靠的、基于字节流的传输层协议;
2.将应用层的数据流分割成报文段并发送给目标节点的TCP层;
3.数据包都有序号,对方收到则发送ACK确认,未收到则重传
1.1 TCP Flags:
1)URG:紧急确认指针
2)ACK:确认序号标志
3)PSH:push标志
4)RST:重置连接标志
5) SYN:同步标志,用于建立连接的过程
6) FIN:finish标志,用于释放连接
客户端状态变化过程:CLOSED->SYN-SENT->ESTABLISHED
服务端状态变化过程:CLOSED->LISTEN->SYN-RCVD->ESTABLISHED
- 详细过程:
1)第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务 器确认
2)第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_REVD状态
3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包,此包发送完毕,客户端和服务器 进入ESTABLSHED状态, 完成完成三次握手 - 为什么要经过三次握手才能建立连接?
答:为了初始化Sequence Number(序列号)的初始值,要通知双方数据包的序号地,作为以后通讯的序号,以保证在网络传输过程,不会因为网络原因而导致乱序。 - 首次握手的隐患–SYN超时
问题起因分析:
1)Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认
2)Server不断重试直至超时,Linux默认等待63秒才断开连接
解决措施:
1)SYN队列满后,通过tcp_syncookies参数回收SYN Cookie
2)若为正常连接则Client会回发SYN Cookie,直接建立连接 - 建立连接后,Client出现故障怎么办?
保活机制
1)向对方发送保活探测报文,如果未收到响应则继续 发送
2)尝试次数达到保活探测数仍未收到响应则中断连接
三、TCP释放连接的四次挥手
1.详细过程:
1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;
2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序列为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSED_WAIT状态;
3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
2.为什么会有TIME_WAIT状态
原因:
1)确保有足够的时间让对方收到ACK包
2)避免新旧连接混淆
3. 服务器出现大量CLOSE_WAIT状态的原因
对方关闭socket连接 ,我方忙于读或写,没有及时关闭连接
1)检查代码,特别是释放资源的代码
2)检查配置,特别是处理请求的线程配置
4.为什么需要四次挥手才能断开连接?
答:因为TCP连接是全双工的网络协议,允许同时通信的双方同时进行数据的收发,同样也允许收发两个方向的连接被独立关闭,以避免client数据发送完毕,向server发送FIN关闭连接,而server还有发送到client的数据没有发送完毕的情况。所以关闭TCP连接需要进行四次握手,每次关闭一个方向上的连接需要FIN和ACK两次握手。
四、UDP简介
1. UDP的特点:
1)面向非连接;
2)不维护状态,支持同时向多个客户端传输相同的信息;
3)数据包报头只有8个字节,额外开销较小;
4)吞吐量只受限于数据生成速率、传输速率以及机器性能;
5)尽最大努力交付,不保证可靠交付,不需要维持复杂的连接状态表;
6)面向报文,不对应用程序提交的报文信息进行拆分或者合并
2.TCP和UDP的区别:
1)面向连接VS无连接
2)TCP具有可靠性,而UDP并没有
3)有序性
4)速度
5)量级
五、HTTP与HTTPS
-
超文本传输协议HTTP的主要特点
- 支持客户/服务器模式;
- 简单快速
- 灵活
- 无连接
- 无状态
-
请求/相应的步骤
- 客户端连接到Web服务器
- 发送HTTP请求
- 服务器接受请求并返回HTTP响应
- 释放TCP连接
- 客户端浏览器解析HTML内容
-
在浏览器地址栏输入URL,按下回车之后经历的流程
- DNS解析
- 建立TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 释放TCP连接
-
HTTP常见状态码
- 200 OK:正常
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未经授权,这个状态码必须与WWW-Authenticate报头域一起使用
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在
- 500 Internal Server Error:服务器发生不可预知的错误
- 503 ServerUnavailable:服务不能处理当前客户端的请求,一段时间可能恢复正常
-
GET请求和POST请求的区别
- Http报文层面:GET请求将请求信息放在URL里,而POST请求放在报文体中
- 数据库层面:GET请求符合幂等性和安全性
- 其他层面:GET可以被缓存、被存储,而POST不行
-
Cookie与Session的区别
- Cookie数据存放在客户端浏览器里,而Session数据存放在服务器端
- Session相对于Cookie来说更安全
- 若考虑减轻服务器端负担,应当使用Cookie
-
HTTP与HTTPS的区别
- HTTPS需要到CA申请证书,HTTP不需要
- HTTPS是密文传输方式,HTTP则是明文传输
- 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
- HTTPS=HTTP + 加密 + 认证 + 完整性保护,较HTTP安全
-
计算机网络中常见的各层协议
1)应用层:
- FTP:文件传输协议
- HTTP:超文本传输协议
2)传输层:-
TCP:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议
-
UDP:用户数据报协议,是无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
2)网络层: -
IP:网际协议或互联网协议
-
ARP:地址解析协议,实现通过IP地址得到目标主机的物理地址
-
RARP:反向地址转换协议,允许局域网的物理主机从网关服务器的ARP表或者缓存中请求其IP地址
-
ICMP:控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息
-
IGMP:Internet组管理协议,是因特网协议家族中的一个组播协议,该协议运行在主机和组播路由器之间
3)数据链路层: -
PPP:点对点协议,面向字节。
-
CSMA/CD:载波侦听多路访问/冲突检测协议
-
ARQ:OSI模型中数据链路层的错误纠正协议之一。它包括停止等待ARQ协议和连续ARQ协议,错误侦测(Error Detection)、正面确认(Positive Acknowledgment)、逾时重传(Retransmission after Timeout)与负面确认继以重传(Negative Acknowledgment and Retransmission)等机制。
-