tcp特点
- 使用tcp双方的链接分配必要的内核资源,以管理连接的状态和连接上的数据的传输。全双工,即双方的数据读写可以通过一个连接进行。完成数据交换后,需要断开连接以释放系统资源。因为是一对一,所以基于广播和多播的协议不能使用tcp程序。tcp模块发送数据时,涉及到发送缓冲区可能被封装成一个或者多个tcp报文段发出。由此可见,tcp模块发送出的tcp报文段的个数和应用程序执行写的操作次数之间没有固定的数量的关系。
- 当接收端收到一个或者多个tcp报文段后,tcp模块将他们携带的应用的程序数据按照tcp报文段的序号依次放入到tcp接收缓冲区中。并通知应用程序去读取数据,接收端应用程序可以一次性将tcp接受缓冲区的数据全部取出,也可以分多次读取。这个取决于用户指定的应用程序缓冲区的大小。由此可见,应用程序执行的读操作次数和tcp模块接收到tcp报文段个数之间也没有固定的数量关系。
- 字节流的概念:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何的数量关系,这就是字节流的概念。应用程序对数据的发送和接收是没有唯一边界限制的。而udp发送端应用程序每执行一次写,udp模块就将其封装成一个udp数据报并发送,接收端必须及时接收每个udp数据报进行读操作(recvfrom),否则就会丢包。此外,如果用户没有指定足够的应用程序缓冲区来读取udp数据,则udp数据将被截断。
- 一些机制
- 定时器
- 未收到回应后重发(定时器)
- RWND:receiver window:接收通告窗口
- tcp对ip数据报进行重排,整理,再交付给上层