【网络】传输层--趣谈网络协议(二)

课程链接: 趣谈网络协议_网络协议_网络编程-极客时间

目录

一、UDP协议

1、TCP和UDP的区别

2、UDP包头

3、UDP的特点

4、UDP使用场景

5、基于UDP的例子

二、TCP协议

1、TCP包头

2、三次握手、四次挥手

3、 顺序问题与丢包问题

确认与重发机制

流量控制问题

拥塞控制问题

三、Socket

1、基于 TCP 协议的 Socket 程序函数调用过程

2、基于 UDP 协议的 Socket 程序函数调用过程

3、服务器如何连接更多的端口 

方式一:多进程

方式二:多线程

方式三、IO 多路复用,一个线程维护多个 Socket

方式四、IO多路复用,事件通知

一、UDP协议

传输层有两个比较重要的协议,一个是TCP,一个是UDP。

1、TCP和UDP的区别

  1. TCP是面向连接的协议,在互通之前会先建立连接,属于有状态服务。所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。而UDP是面向无连接的,是无状态服务。
  2. TCP提供可靠交付。通过TCP连接传输的数据,无差错、不丢失、不重复且按序到达。而UDP继承了IP包的特性,不保证不丢失,不保证按序到达。
  3. TCP是面向字节流的,发送的时候发的是一个流。UDP继承IP包的特性,是基于数据包,一个一个地发,一个一个地收。
  4. TCP可以有堵塞控制,它意识到包被丢弃了或网络环境不好了,就会根据情况调整自己的行为(降低发送速度之类)。UDP不会。

2、UDP包头

3、UDP的特点

  • 首部开销小,只有8个字节,比 TCP 的20个字节的首部要短
  • 面向报文,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。
  • 无拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。
  • 支持一对一、一对多、多对一和多对多的交互通信

4、UDP使用场景

(1)需要资源少,网络情况比较好的内网,或者对于丢包不敏感的应用。DHCP就是基于UDP协议的。一般的获取IP地址都是内网请求,而且,一次获取失败还可以继续获取。PXE启动时自动安装操作系统,操作系统镜像下载所使用的TFTP也是基于UDP协议的。

(2)无需一对一沟通,无需建立连接,可以广播的应用。UDP 的不面向连接的功能,可以使得可以承载广播或者多播的协议。DHCP 就是一种广播的形式,就是基于 UDP 协议。对于多播,32位 IP 地址中的 D 类地址(组播地址),可以将包组播给一批机器。当一台机器上的某个进程想监听某个组播地址的时候,需要发送 IGMP 包,所在网络的路由器就能收到这个包,知道有个机器上有个进程在监听这个组播地址。当路由器收到这个组播地址的时候,会将包转发给这台机器,这样就实现了跨路由器的组播。云中网络部分的 VXLAN协议,也是需要用到组播,也是基于 UDP 协议的。

(3)需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的应用。如果应用本身实现了自己的连接策略、可靠保证和时延要求,也可以使用UDP代替TCP。

5、基于UDP的例子

(1)网页或APP的访问

起初访问网页和手机 APP 都是基于 HTTP 协议的。HTTP 协议是基于 TCP 的,建立连接都需要多次交互,对于时延比较大的目前主流的移动互联网来讲,建立一次连接需要的时间会比较长,然而既然是移动中,TCP 可能还会断了重连,也是很耗时的。而且目前的 HTTP 协议,往往采取多个数据通道共享一个连接的情况,这样本来为了加快传输速度,但是 TCP 的严格顺序策略使得哪怕共享通道,前一个不来,后一个和前一个即便没关系,也要等着,时延也会加大。而 QUIC( Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google 提出的一种基于 UDP 改进的通信协议,在应用层上,会自己实现快速建立连接,减少重传时延、自适应拥塞控制。提供了更好的用户互动体验。

(2)流媒体协议

直播协议多采用RTMP,RTMP协议也是基于TCP的。TCP 的严格顺序传输要保证前一个收到了,下一个才能确认,如果前一个收不到,下一个包就算已经收到了,在缓存里面,也需要等着。对于直播来讲,这显然是不合适的,因为老的视频帧丢了其实也就丢了,就算再传过来用户也不在意了,他们要看新的了,如果老是没来就等着,卡顿了,新的也看不了,那就会丢失客户,所以直播,实时性比较比较重要,宁可丢包,也不要卡顿的。另外,对于丢包,其实对于视频播放来讲,有的包可以丢,有的包不能丢,因为视频的连续帧里面,有的帧重要,有的不重要,如果必须要丢包,隔几个帧丢一个,其实看视频的人不会感知,但是如果连续丢帧,就会感知了,因而在网络不好的情况下,应用希望选择性的丢帧。还有就是当网络不好的时候,TCP 协议会主动降低发送速度,这对本来当时就卡的看视频来讲是要命的,应该应用层马上重传,而不是主动让步。因而,很多直播应用,都基于 UDP 实现了自己的视频传输协议。

(3)实时游戏

游戏有一个特点,就是实时性比较高,因而,实时游戏中客户端和服务端要建立长连接,来保证实时传输。但是游戏玩家很多,服务器却不多。由于维护 TCP 连接需要在内核维护一些数据结构,因而一台机器能够支撑的 TCP 连接数目是有限的,然后 UDP 由于是没有连接的,在异步 IO 机制引入之前,常常是应对海量客户端连接的策略。另外还是 TCP 的强顺序问题,对战的游戏,对网络的要求很简单,玩家通过客户端发送给服务器鼠标和键盘行走的位置,服务器会处理每个用户发送过来的所有场景,处理完再返回给客户端,客户端解析响应,渲染最新的场景展

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值