TCP协议,TCP报头及特点基础介绍

目录

TCP协议

TCP协议特点

TCP协议适用场景

TCP包首部

什么是TCP连接

如何唯一确定一个TCP连接

有一个 IP 的服务器监听了一个端口,它的 TCP 的最大连接数是多少

TCP与UDP的区别


TCP协议

TCP是一种面向字节流,有连接,可靠传输的传输层协议.

TCP协议特点

  • 有连接

一般是指两方进行交互==>客户端-服务器,TCP协议不能进行多对多,一对多,多对一这种交互,在实际应用场景下一般不适合用于广播,而UDP就非常适合.

  • 可靠传输

可靠传输是TCP协议最重要的特点,TCP协议根据 确认应答,序列号/确认序号,超时重传,流量控制,拥塞控制,连接管理,校验和来保证TCP协议可靠性传输.同时TCP还增加了提高效率的机制 滑动窗口,快速重传,捎带应答,延迟应答,同时也会增加处理TCP异常情况并且针对TCP协议面向字节流来解决"粘包问题".

  • 面向字节流

面向字节流是在应用层角度来看的,接收方收到数据后会将数据放到接收缓冲区里面,然后再应用层通过应用程序代码确定取得多少字节合适.当然这里还会出现"粘包问题",也就是由于是面向字节流,无法找到消息的边界=>无法确定从哪到哪是一个完整的数据,这时可以根据分隔符/固定长度/自定义数据报来解决==>后面详细讲.

  • 全双工

对于接收方A和发送方B,既可以A-->B发送数据,也可以B->A发送数据.(这就相当于一个管道一样既可以A->B流通又可以B->A流通).而相反半双工只能向一边流通.

TCP协议适用场景

TCP是有连接的又保证可靠性一般用于FTP文件传输,HTTP/HTTPS.

而相对于UDP而言,UDP是面向无连接的,不保证可靠性,简单高效一般用于包总量较少的通信如DNS,SMTP,还有视频,音频多媒体通信,和广播通信等.

TCP包首部

TCP协议,TCP报头及特点基础介绍_第1张图片

  • 源端口号 : 表示从哪个进程发来的
  • 目的端口号 : 表示要发给哪个进程

源端口号和目的端口号就代表将数据从哪里发到哪里.

  • 序列号
  • 在发送信息时使用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连接是保证TCP可靠性和流量控制维护的某些状态信息,这些信息的组合包括 socket(IP地址+端口号),序列号(用于解决网络数据报乱序的情况),窗口大小(用于流量控制)

如何唯一确定一个TCP连接

通过TCP四元组来确定 : 源端口号,源IP地址,目的端口号,目的IP地址

有一个 IP 的服务器监听了一个端口,它的 TCP 的最大连接数是多少

最大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传输速度快
  • TCP和UDP都是全双工的
  • UDP没有数据首部固定大小8字节,首部开销小,而TCP没有[选项]字段时默认是20字节首部开销大.
  • UDP没有流量控制,拥塞控制机制,出现网络拥堵不影响发送效率,而TCP有对应的机制.
  • UDP首部没有序列号,所以传输数据时无序的,而TCP首部有序列号保证数据报不乱序.
  • TCP是有连接的又保证可靠性一般用于FTP文件传输,HTTP/HTTPS.
  • 而相对于UDP而言,UDP是面向无连接的,不保证可靠性,简单高效一般用于包总量较少的通信如DNS,SMTP,还有视频,音频多媒体通信,和广播通信等.

你可能感兴趣的:(JavaEE,tcp/ip,网络,服务器)