初识网络原理之传输层UDP、TCP

17 篇文章 0 订阅

回顾

传输层:管理源地址和目标地址的数据传输(确定路线)
网络层:管理选择路由(决定交通工具的类型 :IP协议)
数据链路层:进行相邻节点的数据传输,规划最近运输路线


传输层

端口号(0-65535):找到应用程序

分类:

  1. 知名端口号:0-1023,FTP:21,SSH:22,Telnet:23,HTTP:80,HTTPS:443,DNS:53(MySQL:3306,Tomcat:8080)
  2. 动态端口号:1024-65535

一个进程可以绑定多个端口吗?

  • 可以

一个端口号可以被多个进程使用吗?

  • 不可以

助记:一个人可以有多个手机号,一个手机号不可以被多个人使用!


UDP:

在这里插入图片描述
16位UDP长度 = UDP头部长度(8个字节)+ 数据长度

UDP 一个包的最大理论长度 = 2^16 = 65536 = 65536/1024 = 64KB

如果UDP编程时数据大小>64KB会怎样?

  1. 在应用层进行数据包的拆分和组合
  2. 交给TCP/IP协议处理,他会在网络层进行分包和组包(不使用这种方法,不保证数据的完整:一个包丢失,那么所有包都会丢失)

校验和:是用来确定数据在传输过程中是否被篡改,用来判断数据的正确性。

如何判断数据的正确性 ?

  • 假设数据是以MD5进行校验和的计算,那么原始的数据会先进行MD5得到一个值,把这个值存储在16位的校验和当中
  • 接收端接收到内容后 ,按照通过的规则加密数据得到一个校验和,用这个计算出来的校验和,和UDP头中的16位校验和对比
  • 如果相等,说明数据是正确的

全双工:发送端或者接收端,既能发送消息,又能接收消息(UDP、TCP)

半双工:发送端只能发送消息,不能接收消息;接收端只能接收消息,不能发送消息

UDP的使用场景:

DNS(域名解析服务)[域名和IP的映射]

基于UDP的应用层协议:

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议(用于无盘设备启动)
  • DNS:域名解析协议

TCP:

在这里插入图片描述

  • URG:当是1时,表示紧急指针
  • ACK:是否是确认应答消息,如果是1,表示确认应答消息
  • PSH:用来表示是否立即从缓冲区取走数据
  • RST:复位标识
  • SYN:同步序列号标识(TCP连接时使用)
  • FIN:结束序列号标识(TCP断开连接时使用)

16位校验和:用来确定数据在传输过程中是否被篡改,用来判断数据的正确性。
16位窗口大小不等于滑动窗口的大小,因为滑动窗口的大小是固定不变的,所有无需在信息传输中代入
如果16位的滑动窗口为0,那么发送端不会发消息给接收端

TCP的八大机制

快戳进来

TCP面向数据流

流没有明确边界 --> 可能会造成粘包和半包问题

粘包
AB
ABCD
CD
半包
ABCD
AB
CD

粘包和半包都是用来指得到的数据不是预期的数据

解决方案

  1. 使用\n作为流的结束符,流就会有边界,就可以正常的收发消息了(更优)
  2. 每次发送固定大小的流信息,确定每个数据边界,就可以正常的收发消息了

TCP异常

  1. 可以挽救:
  • 进程终止/机器重启: 进程终止会释放文件描述符,仍然可以发送FIN. 和正常关闭没有什么区别
  1. 不能挽救:
  • 机器掉电/网线断开:接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就会进行reset,即使没有写入操作,TCP内置了保活定时器,会定期询问对方是否还在,如果对方不在,会直接把连接释放

TCP小结

保证稳定性

  1. 确认应答
  2. 超时重传
  3. 连接管理
  4. 流量控制
  5. 拥塞控制

保证性能

  1. 滑动窗口
  2. 捎带应答

如何使用TCP实现稳定的消息传输?

  • 在应用层参考TCP实现稳定性的特性来设计TCP,保证稳定性
  • 确认应答、超时重传、连接管理、流量控制、拥塞控制

总结

UDPTCP
无连接有连接
不稳定稳定
面向数据报面向数据流
有接收缓冲区有接收缓冲区
无发送缓冲区有发送缓冲区
消息丢失不敏感,要求性能高时使用稳定性要求高时使用

本节内容就到这里啦,主要总结了TCP协议的内容

下节内容戳这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值