网络编程--TCP和UDP简介

TCP 和 UDP


TCP特点:(Transmission Control Protocol,传输控制协议)是一种面向连接、可靠、有回复,不易阻塞的传输协议。适合一次传输大量数据并要求有回复的通信任务。
UDP特点:(User Datagram Protocol,用户数据包协议)是一种不可靠,无回复,无流量控制的传输协议。适合每次传输少量数据,且要求高实时性的通信任务。


TCP 协议


TCP 协议具有的特点是:面向连接可靠数据传输报文序列号积极确认重传变长滑动窗口等。

  • 面向连接: 在数据传输之前,TCP 协议要求两方进行三次握手连接,确认连接后,才开始发生数据。
  • 可靠数据传输: TCP 协议可以保证每一个报文数据能被对方正确的接收一次。
  • 报文序列号: 每个发出的报文都有一个序列号;
  • 积极确认重传: 发送方发出一段 TCP 报文后,会把此段报文存入缓存,并启动定时器;
    • 如果在定时器内,收到确认报文后,发送方丢弃缓存中的报文,接着发送下一个报文;
    • 如果定时器满,还没有收到对方的确认报文,则提取缓存中的报文,再次发送。
  • 变长滑动窗口: 变长滑动窗口用来进行流量控制,避免网络阻塞。 发送端与接收端可以根据自己CPU和数据缓存资源调整对数据发送和接收能力进行动态调整滑动窗口大小。

三次握手


发送端与接收端进行通信之前,两者必须先成功建立连接,确认同步信息,才能进行数据发送。连接是通过 三次握手 实现的。

在这里插入图片描述

  1. 连接请求报文源主机A目标主机B 发送 连接请求报文。其中:
    • SYN = 1 :表示设置同步标志为 1 1 1
    • seq = x(假设为100) :表示源主机发送报文序号为 x ( 100 ) x(100) x(100)
  2. 确认报文目标主机B 收到 TCP 请求报文后,如果同意连接,则发送确认报文。其中:
    • SYN = 1 :表示设置同步标志为 1 1 1
    • ACK = 1 :表示确认号是合法的;
    • seq = y(假设50) :表示目标主机发送的报文序列号(与源主机报文序列号不同);
    • ACK = x+1(101) :表示确认号,即表示对源主机A 的报文 100 100 100 号的确认(对方报文号的回复);
  3. 回复确认报文源主机A 回复 目标主机B确认报文,告知目标主机B 我已经收到你发送的确认报文了。其中:
    • ACK = 1:表示后面的 确认号 是有效的;
    • seq = x+1(101): 表面源主机A 发送的报文号是 100 100 100(自己发送报文号的顺序);
    • ACK=y+1(51): 表示是对 目标主机B 确认报文号 50 50 50 号的回复(对方报文号的回复)。

TCP 标志规定,三次握手 只会消耗一个报文序号。以上面的例子为例,接下来,从源主机A 端发出的报文序号以 x+1 = (101) 开始。

当三次握手建立之后,两端可以进行通信了。


TCP 数据报头


TCP 头信息如下:

在这里插入图片描述

  1. 源端口、目标端口: 16 16 16 位长,标识出远端和本地的端口号;
  2. 顺序号: 32 32 32 位长,表示报文序号;
  3. 确认号: 32 32 32 位长,表示确认号;
  4. TCP头长: 4 4 4 位长,表示 TCP 头信息包含多个 32 32 32 位;
  5. ACK: 确认标志,如果为 1 1 1,表示 确认号 是合法的;如果为 0 0 0,表示数据报不包含确认信息;
  6. PSH: 如此标志为 1 1 1,则表示接收方一接收到数据报即可送往应用程序,不必等缓冲区满;
  7. RST: 用于复位。由于主机崩溃或其他原因出现的错误的连接,可以用于拒绝非法的数据报或拒绝连接请求。
  8. SYN: 用于建立连接;
  9. FIN: 用于释放连接;
  10. 窗口大小: 16 16 16 位长,表示在确认了字节之后还可以发送多少个字节
  11. 校验和: 16 16 16 位长,校验头部、数据和伪TCP头部之和;
  12. 紧急指针: 哈哈,还不知道;
  13. 可选项: 0 0 0 个或多个 32 32 32 位自,包括最大TCP载荷,窗口比例,选择重复数据报等选项。

UDP协议


UDP 无连接协议,因此不需要向TCP那样建立一个连接。UDP 比 TCP 更加高效,能更好的解决实时性的问题。包括网络视频等在内的众多客户/服务器模式的网络协议都是UDP协议。

在这里插入图片描述


协议的选择


  1. 对数据和网络 可靠性 有要求:选择 TCP;例如,密码和验证码传输不能出错;
  2. 对数据 实时性 有要求:选择 UDP;例如,视频监控;

IP 和端口号


  • 端口号: 每个应用程序都可以分配一个唯一性的端口号。
    • 端口号的范围位 [ 0 , 65535 ] [0, 65535] [0,65535],其中 [ 0 , 1023 ] [0, 1023] [0,1023] 被常用的应用程序已经占用;
    • 另外的一类就是用户自定义的。
  • IP 地址: 通常 IP 地址采用 点分十进制表示法 发表示,但是在 Socket 编程中使用的是 二进制法,这就需要将两种数值进行转化。
    • 例如:点分十进制: 128.11.3.31 128.11.3.31 128.11.3.31
    • IP地址的二进制位 10000000 , 00001011 , 00000011 , 00011111 10000000,00001011,00000011,00011111 10000000,00001011,00000011,00011111
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值