TCP和UDP是tcp/ip协议栈中传输层放入两个协议。他们使用IP路由功能,把数据包发送到目的地,从而为应用程序和应用层协议(HTTP超文本传输协议,SNMP网络管理,TFTP文件传输和Telnet远程登录)提供网络服务。
区别;
- TCP是面向连接的,UDP是无连接的传输
- TCP有流量控制,阻塞控制,监测数据按时到达,而UDP没有
- TCP的路由选择只发生在建立连接的时候,而UDP每次报文都要进行
- TCP是可靠的有超时重发,而UDP没有
UDP因为少很多控制信息,所以传输慢
TCP/UDP编程步骤不同
TCP:
TCP编程放入服务端一般步骤是:
1.创建一个Socket,用函数socket();
2.设置socket属性,用函数setsocket(); *可选
3.绑定IP地址,端口等信息到socket上,用函数bind();
4.开启监听,用函数listen();
5.接收客户端上来的连接,用函数accept();
6.收发数据,用函数send()和recv(),或者read()和write();
7.关闭网络连接
8.关闭监听TCP编程的客户端一般步骤
1.创建一个socket,用函数socket();
2.设置socket属性,用函数setsocket(); *可选
3.绑定IP地址,端口等信息到socket上。用函数bind(); *可选
4.设置要连接诶的对方的IP地址和端口属性
5.连接服务器,用函数connect()
6.收发数据,用函数send()和recv(),或者read()和write();
7.关闭网络连接
UDP
UDP编程的服务器一般步骤是:
1.创建一个socket,用函数socket();
2.设置socket属性,用函数setsocket(); *可选
3.绑定IP地址,端口等信息到socket上,用函数bind();
4.循环接收数据,函数recvfrom();
5.关闭网络连接
UDP的客户端一般步骤:
1.创建一个socket,用函数socket();
2.设置socket属性,用函数setsocket(); *可选
3.绑定IP地址,端口等信息到socket上,用函数bind(); *可选
4.设置对方的IP地址和端口属性;
5.发送数据,函数sendto();
6.关闭连接网络;
为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。