网络编程TCP和UDP相关


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重传定时器溢出

接收到重复的确认报文段

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章