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

计算机网络八股文--day4 --传输层TCP与UDP

这是面试中最常考到的一层:端到端(也就是进程之间)的透明数据传输服务,差错控制和流量控制
该层呈上启下,像上面的资源子网提高服务,并使用下面通信子网的服务

端口,用于唯一标识主机上进程的,只有本地意义,通常与IP配合形成socket(套接字)
这里举出一些常用端口号(熟知端口号)
    FTP:文件传输协议 21
    TELNET:远程登录协议 23
    SMTP:邮件协议 25
    DNS:域名解析协议 53
    TFTP:简单文件传输协议 69
    HTTP:超文本传输协议 80

主要协议只有两个,TCP和UDP
UDP较为简单:通常考的是TCP和UDP的区别
这里先简要介绍一下UDP

1. UDP:无连接,不可靠,开销小,实时好:数据传输可靠性由应用层负责
    8B首部:包含源端口,目的端口,UDP长度,16位校验和(二进制反码求和),每个16位
    由于头部简单,故没有什么偏移量的东西,所以UDP传输的数据不可拆分。
    如果在接收端发现UDP出现差错,直接丢弃就可以了
    那这里就就需要讲解以下UDP校验和的机制了
        首先会给UDP报文段添加一个伪首部
        这个内部包括源IP,目的IP,一字节0,自己使用的端口17,以及UDP长度
        然后进行二进制反码求和再取反,(三部分一起,包括伪首部,首部,数据部分)
        数据部分不足,补0,如果校验和结果为0,那么用全1填充,不想使用校验和,该段为全0
    


然后就是传输层的难点,TCP了
2. TCP:面向连接服务,面型字节流,开销大,可靠,可以保证按序的交付
    头部为20B(固定长度)(最大可为60字节(可变部分最大为40字节)):
        源端口,目的端口
        序号:当前报文的序号
        确认号:期待下次发送的报文
        数据偏移:以4字节为单位,标识首部长度,就是数据相对于起始位置的长度
        URG:紧急位,当URG等于1时表示紧急指针有效
        ACK:表示确认号有效
        PSH:表示接收方立即将数据传递给上层应用
        RST:当RST=1时,表示TCP连接出现严重差错,需要重新建立连接
        SYN:同步位
        FIN:终止位
        窗口:指明自己的接收窗口大小,以字节为单位
        校验和:这个和UDP用法一致,这里不再做介绍
        紧急指针:同URG配合使用,指向紧急数据

然后就是TCP最常考的问题
TCP三次握手和四次挥手:具体流程用图片展示,这里为解释
    1.三次握手
        最初服务器和客户端都处于关闭状态,随后服务器开启,监听连接请求
        客户端主动开启,向服务器发送连接请求,发送后状态为同步已发送(syn-sent)
        服务器接收到连接请求,发送响应,状态转为同步已收到(syn-rcvd)
        客户端收到响应,进行回复,状态转为连接建立
        服务器收到响应,状态转为连接建立
        
    2.四次挥手
        首先客户端主动关闭(双方均可)发送挥手请求,状态转为终止等待1(fin-wait1)
        服务器收到请求,发送响应,转为关闭等待(close-wait),此时服务器仍然可以向客户端发送没有发完的数据
        客户端收到回复,进入终止等待2
        服务器发完数据,进入最后确认(last-ack)
        客户端收到服务器最后发完的数据,进行回复确认,随后进入时间等待(time-wait)
        服务器收到回复确认,关闭
        客户端等待2MSL(最大报文段寿命)后进行关闭

为什么要等待2MSL呢

防止旧连接报文干扰新连接​​:2MSL的等待确保网络中残留的旧连接报文(如延迟的FIN或数据包)彻底消失,避免被误认为属于新建立的同名连接。

 

http://www.xdnf.cn/news/263017.html

相关文章:

  • WebAPI项目从Newtonsoft.Json迁移到System.Text.Json踩坑备忘
  • 【项目实践】boost 搜索引擎
  • 基于 JSP 和 Servlet 的数字信息分析小应用
  • 【Linux】驱动开发方法
  • ES6/ES11知识点 续一
  • 人工智能发展史 — 物理学诺奖之 Hopfield 联想和记忆神经网络模型
  • 19:常见的Halcon数据格式
  • 优化01-统计信息
  • 深入解析 SqlSugar 与泛型封装:实现通用数据访问层
  • 图论之幻想迷宫
  • 使用Rust + WebAssembly提升前端渲染性能:从原理到落地
  • 网络安全:sql注入练习靶场——sqli_labs安装保姆级教程
  • 【tcp连接windows redis】
  • c++_2011 NOIP 普及组 (1)
  • Python Django基于小波变换的数字水印技术实现系统【附源码、文档说明】
  • (37)VTK C++开发示例 ---纹理地球
  • 多协议 Tracker 系统架构与传感融合实战 第五章 卡尔曼滤波定位算法实战
  • Linux《进程概念(下)》
  • 【Linux】Petalinux驱动开发基础
  • 物联网智能项目之——智能家居项目的实现!
  • 基于PyTorch的食物图像分类实战:从数据处理到模型训练
  • AAA GitOps详解
  • n8n工作流自动化平台的实操:本地化高级部署
  • 浙大:优化视觉模型的过度思考
  • 【Godot】生命周期详解:从节点诞生到销毁的全流程解析
  • 软件工程实践
  • sonar-scanner在扫描JAVA项目时为什么需要感知.class文件
  • Redis持久化:
  • 栈系列一>基本计算器II
  • 数据库介绍以及windows下mysql安装