一、什么是TCP/IP协议?
指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
简单来说:互联网相关各类协议族的总称称为TCP/IP协议。
TCP和UDP各自的特点和应用场景
TCP应用场景:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录,视频。 UDP应用场景:qq聊天、直播、网络语音电话、广播通信(广播、多播)。
十一、什么是粘包?如何解决粘包带来的问题
TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。主要原因是来自接收方。
发送方会将连续发送的数据包使用Nagle算法拼接到一起发送,针对发送方可以设置套接字属性关闭此算法,不过我们一般不使用此方法解决该问题。
接收方收到数据如果没有来的及读,那么大量数据会堆积到读缓存中,读取时会一次读取多个数据包数据(也有可能是半个数据包数据),接收方发生粘包时无法在传输层解决,只能在应用层解决。
解决方法:
格式化数据:每条数据有固定的格式(开始符,结束符),这种方法简单易行,但是选择开始符和结束符时一定要确保每条数据的内部不包含开始符和结束符。
发送长度:发送每条数据时,将数据的长度一并发送,例如规定数据的前4位是数据的长度,应用层在处理时可以根据长度来判断每个分组的开始和结束位置。
我们一般使用发送长度的
TCP 首部包含以下关键字段: 源端口和目的端口(各 16bit):标识发送和接收应用程序。
序号(32bit):标识数据段在发送方字节流中的起始位置。
确认号(32bit):期望接收的下一个字节的序号,用于确认已接收数据。
4数据偏移(4bit):表示首部长度,以 4 字节为单位,计算数据起始位置。
标志位(6bit):
SYN:同步标志,用于连接建立。
ACK:确认标志,确认号有效。
FIN:结束标志,请求关闭连接。
URG:紧急标志,紧急指针有效。
PSH:推送标志,要求立即处理数据。
RST:重置标志,重置连接。
窗口大小(16bit):接收方接收缓冲区容量,单位字节,用于流量控制。
校验和(16bit):校验首部、数据及伪首部,确保传输完整性。
紧急指针(16bit):URG 有效时,标识紧急数据结束位置。
TCP/IP 协议的数据封装过程如下:
应用层: 生成应用数据(如 HTTP 请求),添加应用层首部(如 HTTP 头)。
传输层: 将应用数据分段,添加 TCP 首部(源 / 目的端口、序号等),形成 TCP 段。 TCP 段长度超过 MTU 时,后续由 IP 层分片。
网络层: 添加 IP 首部(源 / 目的 IP、协议等),形成 IP 数据报。 若 IP 数据报长度超过链路层 MTU,进行分片,每个分片包含 IP 首部。
数据链路层: 添加以太网首部(源 / 目的 MAC、类型字段)和尾部(CRC 校验),形成以太网帧。 帧通过物理层传输。


