HTTP三次握手四次挥手面试题
学习资源 小林coding 2022.4.6 哇 好多 QAQ
TCP基本认识
TCP格式
-
源端口号 目的端口号 各2字节 确定发送的起始和目标结束位置
-
序列号 建立连接时间由计算机生成的随机数作为其初始值 通过SYN包传给接收端的主机
每发送一次数据 就累加一次该数据字节数的大小 解决网络包乱序的问题
-
确认应答号 指下一次期望收到的数据的序列号 发送端收到这个确认应答之后可以认为在这个序号之前的数据都已经被正常接受 用来解决丢包的问题
-
控制位
- ACK: 位为1时 确认应答的字段变的有效 TCP规定除了最开始建立连接时的SYN包之外该位必须为1
- RST: 位为1时 表示TCP连接中出现异常必须强制断开连接
- SYN: 位为1时 希望表示建立连接 并在其序列号的字段中进行序列号初始化值的设置
- FIN:该位为1时 表示今后不会再有数据发送 希望断开连接 通信结束希望断开连接时 通信双方的主机之间就可以相互交换FIN位为1的TCP段
为什么需要TCP协议 TCP工作在哪一层?
IP层是不可靠的 不保证网络包的交付 不保证网络包的按序交付 也不保证数据的完整性
OSI参考模型(七层)
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP网络模型(四层)
- 应用层
- 传输层
- 网络层
- 网络接口层
如果要保障网络数据包的可靠性 那么就需要由上层(传输层)的TCP协议来负责
TCP是一个工作在传输层的可靠的数据传输的服务 确保接收端接受的网络包是无损坏 无间隔 非冗余 按序的
什么是TCP
TCP是面向连接的可靠的 基于字节流的传输层通信协议
- 面向连接 一对一 不能像UDP协议 一个主机同时向多个主机发送消息
- 可靠的 无论网络链路中出现了怎样的链路变化 TCP都可以保证一个报文一定能到达接收端
- 字节流 消息是没有边界的 无论消息多大都可以传输 而且消息是有序的 当前一个消息没有收到的时候 即使先收到了后面的字节 也不能扔给应用层去处理 同时对重复的报文会自动丢弃
什么是TCP连接
用于保证可靠性和流量控制维护的某些状态信息 这些信息的组合 包括Socket 序列号 窗口大小 称为连接
- Socket IP地址 和 端口号组成
- 序列号 解决乱序问题
- 窗口大小 流量控制
如何唯一确定一个TCP连接
TCP四元组
- 源地址 IP头 主机
- 源端口 TCP头 进程
- 目的地址 IP头
- 目的端口 TCP头
由一个IP的服务器监听了一个端口 他的TCP最大连接数是多少
服务器通常固定在某个本地端口上监听 等待客户端的连接请求
因此 客户端IP和端口都是可变的
最大TCP连接数 = 客户端的IP数目 * 客户端的端口数
对于IPV4 IP数最大 232 客户端端口数最多为 216 最大连接数 2 48
服务器最大并发限制
- 文件描述符限制 每个TCP连接都是一个文件 如果文件描述符被占满了 too many open files
- 系统级 当前系统可打开的最大数量 cat /proc/sys/fs/file-max
- 用户级 指定用户可打开的最大数量 cat /etc/security/limits.conf
- 进程级 单个进程可以打开的最大数量 cat /proc/sys/fs/nr_open
- 内存限制 OOM
UDP和TCP的区别 应用场景
- 目标/源端口 告诉发送给哪个进程
- 包长度 保存了UDP首部的长度跟数据的长度之和
- 校验和 校验和为提高可靠的UDP首部和数据而设计 防止收到在网络传输中受损的UDP包
TCP和UDP区别
- 连接
- TCP是面向连接的传输层协议 传输数据之前要先建立连接
- UDP是不需要连接 即刻传输书数据
- 服务对象
- TCP 面向连接 一对一
- UDP 一对一 一对多 多对多
- 可靠性
- TCP可靠交付数 无差错 不丢失 不重复 按需到达
- UDP尽最大努力交付 不保证可靠交付数据
- 拥塞控制 流量控制
- TCP由拥塞控制和流量控制机制 保证数据传输的安全性
- UDP没有 即使网络非常拥堵 不会影响UDP的发送速率
- 首部开销
- TCP首部长 不使用选项 20字节
- UDP首部 8字节 固定
- 传输方式
- TCP流式传输 没有边界 保证顺序和可靠
- UDP是一个包一个包的发送 有边界 可能会丢包乱序</