传输层
OSI七层模型:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
协议分层
降低模块之间的耦合,降低人们使用和学习成本,并且可以灵活替换
封装和分用:
- 封装:将数据打包传给传输层,根据TCP(源端口,目的端口)报头传输给网络层,根据IP(源IP,目的IP)报头传输给数据链路层,根据以太网数据帧头和以太网数据帧尾 把网络层的数据包打包成数据链路层的数据包 交给物理层进行传输
- 分用: 物理层将光电信号的数据,数据进行分析还原成二进制的bit流,把二进制的数据交给数据链路层,去掉以太网帧头帧尾,把中间交给网络层,再解析IP数据包,把IP头去掉,剩下部分给传输层 ,传输层TCP协议解析数据,取出TCP报头,把剩下的交给应用层 ,应用层对数据进行应用层协议解析,得到最终的数据
TCP/IP五层结构:
- 应用层:常见Http协议
- 传输层:(操作内核已经实现好的)端对端 的数据进行传输
- TCP
- UDP
- 网络层:(操作内核已经实现好的)
- 数据链路层:
- 物理层:
TCP和UDP的区别:
- UDP协议无连接,TCP协议有连接
- UDP协议不可靠传输,TCP协议可靠传输
- UDP协议面向数据报,TCP协议面向字节流
UDP优点:
- 传输速度快
- UDP能够支持”广播“
- 应用场景:对于效率要求高,对于可靠性要求不高的场景 (机房内部主机之间的通信)
TCP:
- 要对数据的传输进行一个详细的控制
TCP核心机制:
-
6位标志位:
- URG: 紧急指针是否有效
- ACK: 确认号是否有效
- PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
- RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
- SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
- FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
-
确认应答机制:保证TCP可靠性的核心机制
- 可靠性目的为了防止丢包
-
超时重传:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yqWyeMHl-1631537322938)(/Users/cola/Library/Application Support/typora-user-images/image-20210913115635648.png)]
- 主机A发送数据给B之后, 可能因为网络拥堵等原因, 数据无法到达主机B;
- 如果主机A在一个特定时间间隔内没有收到B发来的确认应答, 就会进行重发;
TCP三次握手和四次挥手
-
建立连接(三次握手):建立连接过程互相发送SYN(同步报文段)和ACK
-
断开连接(四次挥手):双方各自向对方发送FIN(结束报文段),并且向对方发送ACK
TCP中核心的状态:
- ESTSBLISHED:连接成功,可以进行后续通信
- LISTEN:服务器进入的状态,服务器准备就绪,允许客户端随时建立连接
- CLOSE_WAIT:断开连接时的中间状态
- TIME_WAIT(意义:为了防止最后一个ACK丢包而做准备的):断开连接时的状态,谁主动断开连接,谁就进入该状态(建立连接,一定是客户端主动发出连接请求;断开连接,客户端和服务器都可以做)
滑动窗口
-
既保证了可靠性,有提高了效率
-
超时重传机制(快速重传)导致接受方难以接受 要想办法进行 流量控制
-
流量控制:为了让发送方的速率和接收方的速率尽可能一致,才能做到可靠的同时又高效
-
拥塞控制:滑动窗口的大小由拥塞控制+流量控制一起决定的;先设置小的窗口,发现没有丢包,将窗口扩大,直至发现丢包为止,然后让窗口回到初始大小
-
延迟应答:提高效率的机制,接受方收到数据不立即返回ACK,等待一定的时间再发送,这时ACK携带更大的窗口返回给发送方
捎带应答
- 最常见的服务器通信方式“一问一答”
- 多问一答
- 一问多答
- 多问多答
面向字节流:
只要是面向字节流都会有粘包问题,面向数据报的UDP没有粘包问题
如何解决粘包问题(粘的是应用层的数据包)?
- 显示指定包的长度
- 显示指定包与包的分割符(结束标记)
TCP对于异常情况的处理:
- 进程终止
- 机器重启
- 机器断点、网线断开
负载均衡机制(处理高并发的问题):
成千上万用户访问服务器,需要通过网关/反向代理平均分配给若干服务器(这些服务器定时向网关发送心跳包防止服务器下线);可以在服务不中断的情况下,对服务器进行重启和升级
如何基于UDP实现可靠性传输?
根据TCP的确认应答和超时重传进行细说
端口号范围划分:
0~65535
网络层
网络层
- 地址管理
- 路由选择
IP协议
- 自己可以分包和组包
IP协议不够用解决方法?
- 动态分配(治标不治本)
- NAT通过路由设备,把IP数据报中的源IP进行替换,使用一个公网IP代表一波局域网中的设备
IP协议进行分片,把一个大的IP数据报分成很多小的
数据链路层
数据链路层:
- 只关注相邻节点之间的传输情况
以太网协议:
- 插网线的有线网
- CRC(校验和)为了验证数据是正确的,没有发生改变;
- 比较简单的校验和方法“循环冗余校验”
Mac地址
- Mac地址也叫物理地址,是和主机的网卡设备绑定的,只要主机出厂,Mac地址就被写死了
- 每个Mac地址都是唯一的
ARP协议
- 建立主机IP地址和Mac地址的映射关系
DNS协议
- 域名解析系统
- 访问一个网站先通过DNS解析域名称为IP地址,网络传输是靠IP 地址
浏览器输入URL后,发生的事情?
-
根据域名到DNS中找到IP
-
根据IP建立TCP连接(三次握手)
-
连接建立成功发起http请求
-
服务器响应http请求
-
浏览器解析HTML代码并请求html中的静态资源(js,css)
-
关闭TCP连接(四次挥手)
-
浏览器渲染页面
地址,网络传输是靠IP 地址
浏览器输入URL后,发生的事情?
-
根据域名到DNS中找到IP
-
根据IP建立TCP连接(三次握手)
-
连接建立成功发起http请求
-
服务器响应http请求
-
浏览器解析HTML代码并请求html中的静态资源(js,css)
-
关闭TCP连接(四次挥手)
-
浏览器渲染页面