TCP/UDP与connect系统调用
2015-04-28 20:53
260 查看
一、TCP与UDP区别
TCP保证数据正确性,UDP可能丢包;TCP保证数据顺序,UDP不保证。
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
二、TCP中connect操作与UDP中connect操作的区别
1)TCP中调用connect会引起三次握手,client与server建立连接。UDP中调用connect时内核仅仅把对端ip&port记录下来。
2)TCP只能调用一次connect,UDP中可以多次调用connect。
三、UDP多次调用connect的两种用途
UDP是一个无连接的协议,因此socket函数connect()似乎对UDP是没有意义的,然而事实不是这样。它可以用来指定本地端口和本地地址,来建立虚拟连接。
1)指定一个新的ip&port连接。(直接设置connect第二个参数即可)
2)断开和之前的ip&port的连接。(将connect第二个参数中的sin_family设置成
AF_UNSPEC即可)
四、UDP调用connect的作用:提高效率
普通的UDP发送两个报文时内核操作如下:建立连接--->发送报文--->断开连接--->建立连接--->发送报文--->断开连接;
采用connect方式的UDP发送两个报文时内核操作如下:建立连接--->发送报文--->发送报文。另外一点,每次发送报文内核都有可能要做路由查询。
五、UDP中使用connect的好处
1)提高效率,如上;
2)高并发服务中会增加系统稳定性。原因:假设client A 通过非connect的UDP与server B,C通信。B,C提供相同服务。为了负载均衡,我们让A与B,C交替通信。A 与 B通信:IPa:PORTa <----> IPb:PORTb;A 与 C通信:IPa:PORTa'
<---->IPc:PORTc。假设PORTa 与 PORTa'相同了(在大并发情况下会发生这种情况),那么就有可能出现A等待B的报文,却收到了C的报文,导致收报错误。解决方法就是采用connect的UDP通信方式:在A中创建两个udp,然后分别connect到B,C。
PS:采用connect的UDP发送接受报文可以调用send,write和recv,read操作。当然也可以调用sendto,recvfrom。调用sendto的时候第五个参数必须是NULL,第六个参数是0。调用recvfrom,recv,read系统调用只能获取到先前connect的ip&port发送的报文。
TCP保证数据正确性,UDP可能丢包;TCP保证数据顺序,UDP不保证。
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
二、TCP中connect操作与UDP中connect操作的区别
1)TCP中调用connect会引起三次握手,client与server建立连接。UDP中调用connect时内核仅仅把对端ip&port记录下来。
2)TCP只能调用一次connect,UDP中可以多次调用connect。
三、UDP多次调用connect的两种用途
UDP是一个无连接的协议,因此socket函数connect()似乎对UDP是没有意义的,然而事实不是这样。它可以用来指定本地端口和本地地址,来建立虚拟连接。
1)指定一个新的ip&port连接。(直接设置connect第二个参数即可)
2)断开和之前的ip&port的连接。(将connect第二个参数中的sin_family设置成
AF_UNSPEC即可)
四、UDP调用connect的作用:提高效率
普通的UDP发送两个报文时内核操作如下:建立连接--->发送报文--->断开连接--->建立连接--->发送报文--->断开连接;
采用connect方式的UDP发送两个报文时内核操作如下:建立连接--->发送报文--->发送报文。另外一点,每次发送报文内核都有可能要做路由查询。
五、UDP中使用connect的好处
1)提高效率,如上;
2)高并发服务中会增加系统稳定性。原因:假设client A 通过非connect的UDP与server B,C通信。B,C提供相同服务。为了负载均衡,我们让A与B,C交替通信。A 与 B通信:IPa:PORTa <----> IPb:PORTb;A 与 C通信:IPa:PORTa'
<---->IPc:PORTc。假设PORTa 与 PORTa'相同了(在大并发情况下会发生这种情况),那么就有可能出现A等待B的报文,却收到了C的报文,导致收报错误。解决方法就是采用connect的UDP通信方式:在A中创建两个udp,然后分别connect到B,C。
PS:采用connect的UDP发送接受报文可以调用send,write和recv,read操作。当然也可以调用sendto,recvfrom。调用sendto的时候第五个参数必须是NULL,第六个参数是0。调用recvfrom,recv,read系统调用只能获取到先前connect的ip&port发送的报文。
相关文章推荐
- UDP socket也可以使用connect系统调用
- UDP使用connect系统调用
- 在UDP套接字上调用connect与在TCP上调用的区别
- UDP socket也可以使用connect系统调用
- TCP 系统调用序列
- 获取系统系统所有TCP以及UDP端口使用情况
- 了解 TCP 系统调用序列
- 了解 TCP 系统调用序列
- SOCKET API和TCP STATE的对应关系__三次握手(listen,accept,connect)__四次挥手close及TCP延迟确认(调用一次setsockopt函数,设置TCP_QUI
- 深度探索Linux内核之connect系统调用
- 《TCP/IP详解 卷2》 笔记: connect系统调用
- linux下端口扫描的实现(TCP connect、TCP SYN、TCP FIN、UDP四种方式)6 UDP扫描
- tcp socket上的listen系统调用
- 唯快不破:UDP套接字调用connect()函数
- UDP连接调用connect()函数
- UDP 调用 connect的作用
- 了解 TCP 系统调用序列
- 在UDP套按字上调用Connect建立连接
- Java通信编程中调用UDP协议与TCP协议之间的不同
- 使用select系统调用实现简单的TCP服务器