目录
TCP协议
TCP协议特点
TCP协议适用场景
TCP包首部
什么是TCP连接
如何唯一确定一个TCP连接
有一个 IP 的服务器监听了一个端口,它的 TCP 的最大连接数是多少
TCP与UDP的区别
TCP是一种面向字节流,有连接,可靠传输的传输层协议.
一般是指两方进行交互==>客户端-服务器,TCP协议不能进行多对多,一对多,多对一这种交互,在实际应用场景下一般不适合用于广播,而UDP就非常适合.
可靠传输是TCP协议最重要的特点,TCP协议根据 确认应答,序列号/确认序号,超时重传,流量控制,拥塞控制,连接管理,校验和来保证TCP协议可靠性传输.同时TCP还增加了提高效率的机制 滑动窗口,快速重传,捎带应答,延迟应答,同时也会增加处理TCP异常情况并且针对TCP协议面向字节流来解决"粘包问题".
面向字节流是在应用层角度来看的,接收方收到数据后会将数据放到接收缓冲区里面,然后再应用层通过应用程序代码确定取得多少字节合适.当然这里还会出现"粘包问题",也就是由于是面向字节流,无法找到消息的边界=>无法确定从哪到哪是一个完整的数据,这时可以根据分隔符/固定长度/自定义数据报来解决==>后面详细讲.
对于接收方A和发送方B,既可以A-->B发送数据,也可以B->A发送数据.(这就相当于一个管道一样既可以A->B流通又可以B->A流通).而相反半双工只能向一边流通.
TCP是有连接的又保证可靠性一般用于FTP文件传输,HTTP/HTTPS.
而相对于UDP而言,UDP是面向无连接的,不保证可靠性,简单高效一般用于包总量较少的通信如DNS,SMTP,还有视频,音频多媒体通信,和广播通信等.
源端口号和目的端口号就代表将数据从哪里发到哪里.
- 在发送信息时使用TCP协议会将信息拆分成多个数据报发送给接收方,发送数据时会对每个字节的数据进行编号,等数据到达接收端是会对数据进行重新排序,避免网络数据报乱序.==>防止出现"后发先至"这种情况.
- 当触发TCP超时重传机制时,有可能造成接收方接收重复数据,这时接收方会根据接收到的数据序号进行去重.==>如果之前收到了这个序号的数据就进行去重.
确认序号的作用就是接收方给发送方返回一个ACK报文/确认序号,就代表确认序号之前的数据接收方已经接收到了,同时接收方告诉发送方接下来你可以发送确认序号之后的数据了.
- SYN:同步报文段,会在建立连接时发送此报文段,:该位为1时请求建立连接
- FIN : :该位为1时发送FIN报文段代表请求断开连接.
- ACK : 确认报文段,当ACK为1时代表确认应答报文是有效的,TCP规定除了第一次建立连接的SYN报文以外,其他数据包的ACK均为1.
- RST :该位为1时代表TCP连接出现了异常,强制断开连接.
- URG :紧急指针是否有效
- PSH :提示该接收端应用程序要立刻将数据从接收缓冲区里面取走.
表示接收方能够接纳发送方发送的数据量.
TCP在没有[选项]时,TCP数据报长度默认是20字节,在有选项时,TCP数据报长度可以变长,最多为60字节.
TCP在没有[选项]时,TCP数据报长度默认是20字节,在有选项时,TCP数据报长度可以变长,最多为60字节.
- 为什么UDP没有首部长度,而TCP有首部长度
TCP有可变长的[选项]字段,而UDP没有,UDP头部不会发生变化,不需要多添加个首部长度.
- 为什么UDP有包长度,而TCP没有包长度
TCP的包长度是根据IP来计算的 TCP包长度 = IP数据报总长度 - IP数据包头 - UDP数据报头.
而UDP有包长度是因为为了网络硬件设备设计方便,长度要是4的整数倍
紧急指针用来标识哪些是紧急数据.
发送方在发送数据之前会根据CRC算法来计算校验和(将每个字节都相加,超出2个字节舍去,然后取反码计算),接收方在接收数据时要重新计算校验和,然后取出TCP报头校验和字段进行比较,如果校验不成功,证明数据报损坏,将包丢弃.
TCP连接是保证TCP可靠性和流量控制维护的某些状态信息,这些信息的组合包括 socket(IP地址+端口号),序列号(用于解决网络数据报乱序的情况),窗口大小(用于流量控制)
通过TCP四元组来确定 : 源端口号,源IP地址,目的端口号,目的IP地址
最大TCP连接数 = 客户端IP数 * 客户端端口数 .
对于IPV4而言 客户端IP数为2^32,客户端端口数为2^16 所以服务器单机最大TCP连接数约为2^48.
服务端最大并发TCP连接数远不能达到理论上限.会受到文件描述符的限制,每个TCP连接都是一个文件,当文件过多时就会报异常 too many open fies,太多的打开文件.而文件描述符的数量取决于系统级,用户级,进程级,当然还会收到内存的限制.每个TCP连接都要占一块内存空间,如果超出限制就会出现OOM(内存溢出)
- TCP面向字节流,UDP面向数据报
- TCP有连接,UDP无连接
- TCP可靠性传输,UDP是不可靠性传输
- TCP传输速度没有UDP传输速度快
- TCP和UDP都是全双工的
- UDP没有数据首部固定大小8字节,首部开销小,而TCP没有[选项]字段时默认是20字节首部开销大.
- UDP没有流量控制,拥塞控制机制,出现网络拥堵不影响发送效率,而TCP有对应的机制.
- UDP首部没有序列号,所以传输数据时无序的,而TCP首部有序列号保证数据报不乱序.
- TCP是有连接的又保证可靠性一般用于FTP文件传输,HTTP/HTTPS.
- 而相对于UDP而言,UDP是面向无连接的,不保证可靠性,简单高效一般用于包总量较少的通信如DNS,SMTP,还有视频,音频多媒体通信,和广播通信等.