文章目录
简介
传输层包括:TCP、UDP和SCTP(stream control transmission protocal,流控制协议)。绝大多数的客户端、服务器网络应用使用TCP和UDP。SCTP是为跨因特网传输电话信令而设计的一个交新的协议。这些协议的底层都使用IPV4或IPV6。
- UDP:一个简单的、不可靠的数据报协议。
- TCP:一个复杂的、可靠的字节流协议。
- SCTP:可靠的传输协议,提供消息边界、传输级别的多数组支持以及将头端阻塞减少到最小的一种方法。
关于传输层主要关注的原理:
- TCP的三路握手
- TCP的四次挥手
- TCP的连接终止序列
- TCP的TIME_WAIT状态
- 由套接字层提供的TCP、UDP、SCTP缓冲机制
- SCTP的四路握手
- SCTP的连接终止
UDP(用户数据报文协议)
使用UDP传输数据时,应用程序通过向一个UDP套接字写入数据,然后该数据被封装到一个UDP数据报中,最终该数据报以IP报文的形式被发往目的地。UDP不可靠的原因:
- UDP不保证UDP数据报会到达其最终的目的地
- 不保证各个数据包的先后顺序
- 不保证每个数据报文只到达一次(在传输阶段被复制),或者一定到达目的的
- UDP是无连接的服务
- UDP不进行数据校验
- UDP无三次握手、无超时与重传机制、没有对端的响应机制
和TCP不一样,每个UDP报文都有一个数据包的长度,如果一个数据报正确的到达其目的地,那么该数据报的长度将随数据一起传递给接收端应用程序。
TCP(传输控制协议)
TCP简介
TCP提供客户端与服务器之间的连接,通过TCP传输数据是可靠的:
- 三次握手:三次握手不仅是用来建立连接,还计算来初始的RTT值
- 数据重传:在RTT时间内如果没有接收到响应,则进行数据重传,该重传机制可能持续好几分钟才最终失败。
- 有序:通过给传输的每个字节关联一个序列号对所发送的数据进行排序
- 去重:如果接收到重复的数据,TCP可以根据序列号判断出数据是否重复,从而丢弃重复数据
- 流量控制:TCP总是告知对端在任何时候它一次能够从对端接收多少字节的数据,称为通告窗口。在任何时刻,该窗口指出接收缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。这个窗口大小就是MSS,可以使用TCP_MAXSEG套接字选项来设置和获取这个值。
- 全双工:在给定的连接上应用可以在任何时刻在进出两个方向上既发送数据又接收数据
- 数据的可靠性:保证传输的数据不会出错
TCP选项
- MTU:表示接收方当前的接收缓冲区的大小。可以使用SO_RECVBUF来设置。
- MSS:表示接收方可以接收的最大分节大小。可以使用TCP_MAXSEG来合适和获取。
- 时间戳选项:主要是在高速网络中防止失而复现的分节对数据造成损坏。编程人员不需要考虑。
滑动窗口
所谓滑动窗口,实际上就是一个由左右2个游标所确定的窗口。左边的游标只能往右滑动,右边的游标可以自由滑动但是不能滑到左边游标的左边。只有处于2个游标之间的数据才能被发送。那么,可以分以下几个情况来讨论:
- 左游标不动,右游标左移ÿ