网络协议---TCP和UDP及其比较

IP协议仅仅将数据报文送至目标主机,并没有交给具体进程
端口号用于确定具体进程

运输层2个协议:

1、UDP(User Datagram Protocol,用户数据报协议)

1、发送前无需建立连接,接受者也无需确认
	机制(开销)少,速度快
	适用于实时性要求较高,可靠性高俅不高的服务
2、传输大小限制在64K以下
3、对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等
4、可实现多播

1、TCP(Transmission Control Protocol,传输控制协议)

1、提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。
	可靠的的运输服务,
	开销大(确认,流量控制等)
2、传输大小无限制
3、对应的应用层的协议主要有 SMTP,TELNET,HTTP,FTP 等。
4、单播//TCP仅限一对一通信

应用程序—端口号—传输层协议

常用的熟知端口号
应用程序	    FTP		TFTP	TELNET	SMTP	DNS		HTTP	SSH		MYSQL
熟知端口	    21,20	69	    23	   	25		53	    80	    22	   	3306
传输层协议	TCP	    UDP		TCP	  	TCP		UDP	   	TCP	   	TCP	   	TCP

2、区别

1、TCP是面向连接的,UDP是无连接的//不知道有没有人接收 将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制
2、TCP提供可靠的服务(无差错,不丢失,不重复,按序到达),UDP不可靠(可能丢包乱序)
3、TCP:点到点		UDP支持一对一,一对多,多对一和多对多
4、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流
	UDP是面向报文的
5、TCP的开销大于UDP
6、TCP:全双工的可靠信道			UDP的是一条不可靠信道。
7、TCP要求资源多,实现复杂
8、TCP首部开销20字节;UDP的首部开销小,只有8个字节
9、TCP有丢包重发、滑动窗口、流量控制和拥塞控制,而UDP不会因网络拥堵而降低发送速度

//UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。
//UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。

TCP和UDP对应的各种应用层协议和应用如下图示:
在这里插入图片描述

具体编程时的区别
1.socket()的参数不同
   2.UDP Server不需要调用listen和accept
   3.UDP收发数据用sendto/recvfrom函数
   4.TCP:地址信息在connect/accept时确定
   5.UDP:在sendto/recvfrom函数中每次均 需指定地址信息
   6.UDP:shutdown函数无效

基于上述不同,UDP和TCP编程步骤也有些不同,如下:

TCP:
TCP编程的服务器端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt(); * 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、开启监听,用函数listen();
  5、接收客户端上来的连接,用函数accept();
  6、收发数据,用函数send()和recv(),或者read()和write();
  7、关闭网络连接;
  8、关闭监听;

TCP编程的客户端一般步骤是:
  1、创建一个socket,用函数socket(); //socket(PF_INET, SOCK_STREAM, 0)
  2、设置socket属性,用函数setsockopt();* 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
  4、设置要连接的对方的IP地址和端口等属性;
  5、连接服务器,用函数connect();
  6、收发数据,用函数send()和recv(),或者read()和write();
  7、关闭网络连接;

UDP:
与之对应的UDP编程步骤要简单许多,分别如下:
  UDP编程的服务器端一般步骤是:
  1、创建一个socket,用函数socket(); //socket(PF_INET, SOCK_DGRAM, 0)
  2、设置socket属性,用函数setsockopt();* 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();
  4、循环接收数据,用函数recvfrom();
  5、关闭网络连接;

UDP编程的客户端一般步骤是:
  1、创建一个socket,用函数socket();
  2、设置socket属性,用函数setsockopt();* 可选
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
  4、设置对方的IP地址和端口等属性;
  5、发送数据,用函数sendto();
  6、关闭网络连接;

适用UDP的场合:

1、多播//必须UDP TCP仅限一对一通信
2、大多是简短的信息,适合用udp实现,因为udp是基于报文段的,它直接对上层应用的数据封装成报文段,然后丢在网络中,
	如果信息量太大,会在链路层中被分片,影响传输效率。
3、注重完整性和安全性,不在意一两帧丢失,但在意速度;
4、要求快速响应

既要快速响应又要可靠传输👉UDP+上层引用制定规则

常见的使用udp的例子:ICQ,QQ的聊天模块。
登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。总来的说:
1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值