TCP/IP模型: 4层模型
模型组成: 接入层 网络层(互联网层) 传输层(主机到主机层) 应用层
模型作用:
1) 定义各种网络通讯协议信息
2) 应用层: HTTP* FTP NFS* SMTP SNMP(监控) DHCP DNS 协议=服务
DHCP协议 --> 动态主机配置协议 作用: 自动获取IP地址
DHCP协议原理:
第一个里程: 主机向局域网中发送广播包 获取IP地址
第二个里程: 局域网中DHCP服务器 分配IP地址
配置过程:
a 安装软件服务 dhcp软件程序
b 编写配置文件 地址池信息 192.168.36.100 ~ 192.168.36.200
地址掩码信息 255.255.255.0
网关地址信息 192.168.36.254
DNS地址信息 1.2.4.8 223.5.5.5 114.114.114.114 ***
第三个里程: 主机收到DHCP服务分配地址确认数据包发送
第四个里程: 局域网中DHCP服务器 收到确认信息 调整地址池信息
地址池信息 192.168.36.101 ~ 192.168.36.200
第五个里程: 局域网中DHCP服务器 定期发送IP地址使用确认信息
第六个里程: 主机确认地址是否使用
地址在使用中 自动进行续租
地址未使用中 地址分配给其他主机使用
问题: 局域网中没有DHCP服务, 主机可以获得IP地址吗
会, 获得169.xxx, 系统给主机分配地址
传输层: TCP UDP
TCP(Transmission Control Protocol): 传输控制协议
概述说明: 面向连接网络协议
特点说明: 可靠传输协议 传输过程有确认机制
应用场景: 邮件服务 FTP HTTP
UDP(User Datagram Protocol) : 用户报文协议
概述说明: 无连接网络协议
特点说明: 传输效率较高协议 传输过程验证机制
应用场景: DNS解析 语音 视频
预备知识: TCP报文结构
端口: 1 ~ 65535 2*16次方
源端口:
占用1bit 0 1 0 1 2的1次方 n占用多少个bit
占用2bit 00 01 10 11 0 1 2 3 2的2次方
占用3bit 000 001 010 011 0 1 2 3 2的3次方
100 101 110 111 4 5 6 7
占用16bit 2的16次方 65536 0号端口没有被TCP或者UDP协议使用
1 ~ 1024 含有知名服务端口号码 22 23 80 111 110 21 20
目标端口: 访问服务信息
序列号: 标识拆分后数据包序号信息
确认号: 标识下一次需要发送的数据包确认号信息
控制字段: 6个字段 实现不同控制功能 0功能未开启 1功能开启
SYN: 请求建立连接控制字段
ACK: 数据确认控制字段
FIN: 请求断开连接控制字段
TCP三次握手 四次挥手
TCP三次握手: 谈恋爱过程
第一次握手过程: 客户端发送信息 发送TCP报文信息(控制字段 syn=1 seq=X)
第二次握手过程: 服务端接收信息 发送TCP报文响应(控制字段 syn=1 ack=1 seq=y ack=x+1)
第三次握手过程: 客户端发送信息 发送TCP报文信息(控制字段 ack=1 seq=x+1 ack=y+1)
TCP四次挥手: 离婚过程
第一次挥手过程: 主动方发送信息 发送TCP报文信息(控制字段 fin=1 ack=1)
第二次挥手过程: 被动方发送信息 发送TCP报文信息(控制字段 ack=1)
第三次挥手过程: 被动方发送信息 发送TCP报文信息(控制字段 fin=1 ack=1)
第四次挥手过程: 主动方发送信息 发送TCP报文信息(控制字段 ack=1)
PS: TCP协议可以保证数据可靠传输
1) 拥有ACK确认控制字段: 保证数据包是否被对端接收
2) 拥有SEQ和ACK字段信息: 确认数据包可以进行拆分/有效重组
TCP十一种状态集转换 优化准备
实现网络通讯要素
1) 满足物理通讯需求
2) 满足逻辑通讯需求
三次握手状态转换
1) 初始状态信息 客户端(closed) 服务端(closed)
2) 准备状态信息 服务端创建socket 服务端(closed-listen)
3) 握手状态信息 客户端发送syn 客户端(closed-syn_sent)
服务端接收syn 服务端(listen-syn_rcvd)
发送ack syn
客户端接收ack syn 客户端(syn_sent-established)
发送ack
服务端接收ack 服务端(syn_rcvd-established)
四次挥手状态转换
1) 初始状态信息 客户端(established) 服务端(established)
2) 挥手状态信息 主动端发送fin 主机端(established --> fin_wait1)
被动端接收fin 被动端(established --> close_wait)
发送ack
主动端接收ack 主动端(fin_wait1 --> fin_wait2)
被动端发送ack fin 被动端(close_wait --> last_ack)
主动端接收ack fin 主动端(fin_wait2 --> time_wait)
发送ack
被动端接收ack 被动端(last_ack --> closed)
主动端等待2MSL 90s 主动端(time_wait --> closed)
问题
问题1: 为什么要有time_wait状态
确保服务端可以接收到第四次挥手ack信息, 使连接可以进行释放
问题2: 为什么是四次挥手
传输层--上面--会话层(负责建立或断开)
确认被动端数据是否传输完毕,才能发送fin
可以三次挥手吗 可以三次
注意
服务端可以被访问进行通讯, 必须创建socket
五元组概念: 协议 源IP地址 源端口 目标IP 目标端口
多个socket条目信息不能出现一致
网络通讯限制并发连接数 设置连接超时时间