当前位置: 首页 > java >正文

计算机网络学习20250527

传输层

传输层探究的问题

  • 建立在不可靠网络上的可靠通信
  • 连接建立和拆除,握手
  • 拥塞和流量控制以及多路复用和分解
    传输层协议:为运行在不同主机上的应用进程之间提供逻辑通信
    TCP特点:有序交付,可靠,面向连接,流量拥塞控制
    UDP特点:无序交付,不可靠,无连接

多路复用和多路分解

多路复用:从不同套接字中收集数据块,封装首部信息,生成数据段送给网络层
多路分解:将传输层数据段中的数据交付到正确的套接字
端口号:16bit,0-65535
0-1023:周知端口号,保留给周知应用层协议使用
1024-65535:可以随意使用

端口分配给进程:
客户端——随机在1024-65535中分配未使用的
服务器端——若为周知应用,则分配特定的0-1023之间的端口号

UDP

  • UDP套接字:目的IP地址,目的端口号
  • UDP应用:流多媒体应用,DNS,SNMP,RIP路由选择表更新
  • 优点
    (1)无需建立连接,不会引入相应时延
    (2)简单,无需维护连接状态
    (3)分组首部开销小,TCP 20字节,UDP 8字节
    (4)无拥塞控制机制
  • 数据段结构
  • 首部:8字节,4个字段,每个字段2字节
    源端口号
    目的端口号
    长度:包括首部在内的UDP数据段长度
    (http响应报文中的长度指文件长度,不包括首部)
    校验和:实现端到端的检错

TCP

  1. TCP报文结构
    首部字段:20字节固定长度+可选
    数据字段:应用层数据小于等于MSS 1460字节
    首部
  • 源端口号 目的端口号
  • 序号字段(32bit)seqnum:数据字段第一个字节的序号
  • 确认号字段(32bit)Ack:期望收到的第一个字节的序号
  • 接收窗口字段(16bit):用于流量拥塞控制,告知对方自己愿意接收的字节数,让对方调节发送窗口
  • 首部长度字段(4bit)
  • 校验和字段(16bit)
  • 选项字段
  • 标志字段(6bit)
    ACK:表示确认号字段有效
    SYN:同步
    FIN:终止,释放TCP连接
    URG:紧急指针标志位
    PSH:推送标志位,置1时尽快将数据交付,不等待缓冲区填满
    RST:复位标志位,置1时TCP连接发生严重错误,需重新建立连接
  1. 流量控制
    消除发送方使接收方缓存溢出的可能性,使发送方和接收方速率匹配
    接收方为每个TCP连接分配接收缓存rcvbuffer,空闲空间=rcvbuffer-已缓存TCP数据=接收窗口round
    接收方通过TCP首部中接收窗口round告知对方自己愿意接收的字节数,使对方的发送窗口N小于round,限制发送方发送的速率
  2. TCP连接管理
    建立连接——TCP三次握手
    (1)客户端发送SYN报文给服务器,表示希望建立连接,并随机生成一个初始序列号seq=x
    (2)服务器收到SYN报文后,会发送SYN,ACK报文作为回应,确认收到客户端的请求,并生成自己的序列号seq=y,ack=x+1
    (3)客户端收到服务器的SYN,ACK报文后,发送一个ACK报文作为回应,确认服务器的序列号,完成三次握手过程,连接建立seq=x+1,ack=y+1
    SYN报文不可以带数据,ACK报文可以带数据
    关闭连接——TCP四次挥手
    (1)一方发送一个FIN报文,表示希望关闭这个方向的连接
    (2)另一方收到FIN报文后,发送一个ACK报文作为回应,确认收到关闭请求
    (3)另一方再发送一个FIN报文,表示希望关闭另一个方向的连接
    (4)第一次发送FIN报文的一方收到FIN报文后,发送一个ACK报文作为回应,确认连接的关闭
http://www.xdnf.cn/news/9173.html

相关文章:

  • pycharm终端遇不显示虚拟环境的问题
  • Windows版本的postgres安装插件http
  • java的vscode扩展插件
  • 【】20250527PDF文件拆分成多个pdf(两页一份,用幼儿班级姓名命名文件)
  • CentOS 7 下 Redis 从 5.0 升级至 7.4.3 全流程实践
  • 基线配置管理:为什么它对网络稳定性至关重要
  • RabbitMQ搭建集群
  • Odoo 财务模块全面深度解读(VIP15万字版)
  • xcode手动安装iOS Simulator Runtime
  • 2.4GHz 射频前端芯片AT2401C
  • 【Elasticsearch】PUT` 请求覆盖式更新
  • GitHub push失败解决办法-fatal: unable to access ‘https://github.com/xxx
  • 【node】Express创建服务器
  • leetcode hot100刷题日记——19.买卖股票的最佳时机
  • `sysctl`命令深度剖析:如何优化内核参数以提升服务器网络/IO性能?
  • 百度ocr的简单封装
  • html5视频播放器和微信小程序如何实现视频的自动播放功能
  • 优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草·卓伊凡
  • MicroPython 开发ESP32应用教程 之 线程介绍及实例分析
  • Android 启动优化
  • 使用堡塔和XShell
  • C++ STL stack容器使用详解
  • IoT/HCIP实验-1/物联网开发平台实验Part1(快速入门,MQTT.fx对接IoTDA)
  • 大型三甲医院更换HIS系统全流程分析与经验考察(上)
  • 【教程】给Apache服务器装上轻量级的防DDoS模块
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十七) -> 开发云函数
  • 基于 SpringBoot 与 VueJS 的智慧就业服务平台构建:技术融合与实践创新
  • jsAPI:Intl.DateTimeFormat 属性含义
  • 尚硅谷redis7 37-39 redis持久化之AOF简介
  • Vuex 模块化和命名空间:管理大型应用的状态