TCP服务:可靠的 面向连接的流式服务 进行一对一的连接比较方便
必须先建立连接 ,在发送数据 依靠三次握手建立连接
利用滑动窗口进行流量的控制
采用发送应答机制,发送端发送每个TCP数据报服务必须收到接收端的应答,才认为此数据报发送成功
TCP报文最终以IP数据报发送,IP数据报到达接收端有可能乱序,重复,所以TCP协议对接收到的IP报文重排,整理,再交付应用层。
TCP协议使用超时重传、数确认等方式确保数据被正确的发送至目的端 TCP服务时可靠的
TCP和UDP可以同时使用一个端口
TCP服务是基于流式套接字的,基于流的套接字没有数据长度的限制,源源不断的从通信的一端流入另外一端,发送端可以逐个字节的向数据流中写入数据,接收端也可以逐个字节的将他们读出
TIME_WAIT状态存在的原因有两点:
可靠的终止TCP连接
保证让迟来的TCP报文有足够的时间被识别并丢弃
UDP服务:
不可靠 无连接和基于数据报的UDP服务 可以进行一对多的连接
不可靠表示UDP协议无法保证数据从发送端到正确的传输到目的段端
对于数据只进行一次读取,若一次没读完 ,下次不进行读取,进行下一个数据的读取(每个UDP数据报都有一个长度,接收端必须以该长度的最小单位将其所有内容进行一次性的读取,否则数据将被截断
先建立连接 才能收发数据
connect() 发起连接(开始三次握手)
依靠三次握手建立连接
listen() 创建监听队列
Linux-> 已完成三次握手队列的大小
TCP与DUP的传包区别:一个不封装(TCP)一个封装(UDP)
TCP报文段和UDP数据报通过其头部的16位端口号字段来区分上层应用程序,DNS协议对应的端口号是53,HTTP 协议对应的端口号是80
粘包的解决方式:
加标记 将字符分隔开,便于辨认
send recv 交替执行 将粘包分隔开 ,不用解析
发送端判断拥塞的依据有如下两个:
传输超时,或者说TCP重传定时器溢出
接收到重复的确认报文段