提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- [1. 应用层](#1. 应用层)
- [2. 传输层TCP/UDP](#2. 传输层TCP/UDP)
-
- [2.1 UDP协议](#2.1 UDP协议)
- [2.2 TCP协议](#2.2 TCP协议)
- [2.3 TCP核心机制](#2.3 TCP核心机制)
-
- [2.3.1 超时重传,确认应答](#2.3.1 超时重传,确认应答)
- [2.3.2 三次握手,四次挥手](#2.3.2 三次握手,四次挥手)
- [2.3.3 滑动窗口](#2.3.3 滑动窗口)
- [2.3.4 流量控制](#2.3.4 流量控制)
- [2.3.5 拥塞控制](#2.3.5 拥塞控制)
- [2.3.6 延迟应答](#2.3.6 延迟应答)
- [2.3.7 捎带应答](#2.3.7 捎带应答)
- [2.3.8 面向字节流](#2.3.8 面向字节流)
- [2.3.9 异常处理](#2.3.9 异常处理)
- [2.4 TCP协议段格式](#2.4 TCP协议段格式)
- [3. TCP/UDP对⽐](#3. TCP/UDP对⽐)
- 总结
前言
简历上写:熟悉TCP协议的常见特性
1. 应用层
互联网中,主流的是TCP/IP五层协议
5G速度再快,也快不过有线网

组织数据的格式:xml,json,yml,google protobuffer(关注性能,用二进制来组织数据的,不关注可读性)
自定义应用层
1.确定传递的信息
2.确定传输的数据格式
2. 传输层TCP/UDP
在TCP/IP协议中, ⽤ "源IP", "源端⼝号", "⽬的IP", "⽬的端⼝号", "协议号" 这样⼀个五元组来标识⼀个通信(可以通过netstat -n查看);
端⼝号(Port)标识了⼀个主机上进⾏通信的不同的应⽤程序;
端⼝号范围划分
• 0 - 1023: 知名端⼝号, HTTP, FTP, SSH等这些⼴为使⽤的应⽤层协议, 他们的端⼝号都是固定的.
1024 - 65535: 操作系统动态分配的端⼝号. 客⼾端程序的端⼝号, 就是由操作系统从这个范围分配的.
• ssh服务器, 使⽤22端⼝
• ftp服务器, 使⽤21端⼝
• telnet服务器, 使⽤23端⼝
• http服务器, 使⽤80端⼝
• https服务器, 使⽤443
我们⾃⼰写⼀个程序使⽤端⼝号时, 要避开这些知名端⼝号
⼀个进程可以bind多个端⼝号
⼀个端⼝号不可以被多个进程bind


2.1 UDP协议
UDP协议端格式

• 16位UDP⻓度, 表⽰整个数据报(UDP⾸部+UDP数据)的最⼤⻓度;
• 如果校验和出错, 就会直接丢弃;
校验和:CRC循环冗余校验,MD5,SHA1

SHA1的特点和Md5是差不多的

UDP的特点
UDP传输的过程类似于寄信.
• ⽆连接: 知道对端的IP和端⼝号就直接进⾏传输, 不需要建⽴连接;
• 不可靠: 没有确认机制, 没有重传机制; 如果因为⽹络故障该段⽆法发到对⽅, UDP协议层也不会给应⽤层返回任何错误信息;
• ⾯向数据报: 不能够灵活的控制读写数据的次数和数量;
报文长度就是报头和正文的长度
2.2 TCP协议
TCP全称为 "传输控制协议(Transmission Control Protocol").

首部长度就是报头的长度
UDP协议的报头长度就是固定的8个字节
TCP报头长度可以变化



2.3 TCP核心机制
2.3.1 超时重传,确认应答
- 确认应答,感知对方是否收到,感知对方收到,要靠对方告诉你一声





















2.3.2 三次握手,四次挥手

三次握手和四次挥手是高频面试















2.3.3 滑动窗口









2.3.4 流量控制








2.3.5 拥塞控制









2.3.6 延迟应答



2.3.7 捎带应答






2.3.8 面向字节流









2.3.9 异常处理










2.4 TCP协议段格式

6位标志位:
◦ URG: 紧急指针是否有效
◦ ACK: 确认号是否有效
◦ PSH: 提⽰接收端应⽤程序⽴刻从TCP缓冲区把数据读⾛
◦ RST: 对⽅要求重新建⽴连接; 我们把携带RST标识的称为复位报⽂段
◦ SYN: 请求建⽴连接; 我们把携带SYN标识的称为同步报⽂段
◦ FIN: 通知对⽅, 本端要关闭了, 我们称携带FIN标识的为结束报⽂段

16位紧急指针: 标识哪部分数据是紧急数据


16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含
TCP⾸部, 也包含TCP数据部分.
• 4位TCP报头⻓度: 表⽰该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最⼤⻓度是15 *
4 = 60
3. TCP/UDP对⽐
TCP⽤于可靠传输的情况, 应⽤于⽂件传输, 重要状态更新等场景;
• UDP⽤于对⾼速传输和实时性要求较⾼的通信领域, 例如, 早期的QQ, 视频传输等. 另外UDP可以⽤
于⼴播;
⽤UDP实现可靠传输(经典⾯试题):参考TCP
参考TCP的可靠性机制, 在应⽤层实现类似的逻辑;
例如:
• 引⼊序列号, 保证数据顺序;
• 引⼊确认应答, 确保对端收到了数据;
• 引⼊超时重传, 如果隔⼀段时间没有应答, 就重发数据;
