16位源端口号 | 16位目的端口号 | |||||||
32位序号 | ||||||||
32位确认号 | ||||||||
4位头部长度 | 6位保留 | URG | ACK | PSH | RST | SYN | FIN | 16位窗口大小 |
16位校验和 | 16位紧急指针 | |||||||
选项(长度可变) | ||||||||
填充 |
TCP是面向连接
的运输层协议
点对点
,每一条TCP连接只能有两个端点
TCP提供可靠交付
的服务
TCP提供全双工通信
面向字节流
基于连接,可靠的,有序的,双向的一种字节流传输方式,TCP要发送的数据先放入缓冲区内,在通信的时候TCP会从缓冲区内取出对应的数据,在进行头部的封装进行发送
好处:传输比较灵活
坏处:
- 会产生粘包问题——将多条数据当做一条进行处理,无法分辨数据边界
- 本质原因:TCP并不维护数据边界
- 解决方案:需要程序员在应用层进行数据边界管理,区分数据边界
- 具体技术:特殊字符,数据定长,应用层头部加上数据长度字段
TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。
TCP提供可靠的服务;UDP不保证可靠交付。
- TCP的连接是基于
三次握手
,断开是基于四次挥手
。确保连接和断开的可靠性TCP有状态
;记录哪些数据发送了,哪些数据被接收了,哪些没有被接收,并且保证数据包按序到达,保证数据传输不会出差错可控制
:有数据包校验、ACK应答、超时重传(发送方)、失序数据重传(接收方)、丢弃重复数据、流量控制(滑动窗口)和拥塞控制等机制
TCP面向字节流,把数据看成一连串无结构的字节流;UDP是面向报文的。
TCP有拥塞控制;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如实时视频会议等)。
每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的通信方式。
TCP首部开销20字节;UDP的首部开销小,只有8个字节。
TCP是面向流,没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 TCP会话的双方都各自维护一个发送窗口和一个接收窗口。接收窗口大小取决于应用、系统、硬件的限制。发送窗口则取决于对端通告的接收窗口。接收方发送的确认报文中的window字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将接收方的确认报文window字段设置为 0,则发送方不能发送数据。
于对端通告的接收窗口。接收方发送的确认报文中的window字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将接收方的确认报文window字段设置为 0,则发送方不能发送数据。
[外链图片转存中…(img-K6LdSSp7-1705311813516)]
TCP头包含window字段,16bit位,它代表的是窗口的字节容量,最大为65535。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。接收窗口的大小是约等于发送窗口的大小。