运输层:
TCP协议:
TCP连接
- TCP是面向连接的: 两个应用进程通过网络发送数据,必须先相互“握手”。
- TCP提供的是全双工服务(双向的):一台主机上的进程A与另一台主机上的进程B如果存在一条TCP连接,难么应用层的数据就可以从B到A,也可以从A到B。
- TCP连接是点对点的:一个发送方只能对应一个接受方。即TCP不支持一对多连接。
- TCP连接的建立的过程:--------------------------------------------------------------------------
- TCP连接的组成:一台主机上的缓存、变量和与进程连接的套接字。令一台主机上的缓存、变量和与进程连接的套接字。
图1 tcp发送缓存和接收缓存
- 最大报文长度(MSS,Maximum Segment Size):TCP从缓存中取出并放入报文段中最大的数据数量。(注意,MSS为只包含应用层数据的最大长度,不包括TCP报文首部)默认由最大传输端单元来设置。常用的值:1460字节 = 1500 - 40字节。40字节为TCP报文首部长度。1500字节为MTU常用值。
- 最大传输单元(MTU,Maximum Transmission Unit):本地发送主机发送的最大链路层帧长度。 一般为1500字节。
- 报文段: TCP为每个报文段都配置一个TCP首部,形成多个TCP报文段。
综上,图1的TCP传输过程为:进程A将通过套接字,将应用数据写入TCP的发送缓存。然后TCP根据MSS从缓存中取出数据,并给每块数据配上一个TCP首部,形成报文段。并将这些报文端下传到网络层,网络层将其分别封装在IP数据报中,将这些数据报发送到网络中。另一端接收到一个报文段后,将报文段中的数据取出放入接收缓存中,进程B通过套接字就可以读取接收缓存中的数据。
TCP报文段的结构
- 序号:TCP把数据看成一个无结构的、有序的数据流。序号就是指每个报文段中数据在数据流中的起始位置,终止位置为:起始位置+MSS。
- 确认号:主机A的确认号就是A期望接收的下一个报文段的序号。