考研408--计算机网络--day10--传输层&UDP&TCP

(以下内容全部出自上述课程)

目录

  • 传输层提供的服务
    • [1. 总结概述](#1. 总结概述)
    • [2. 端口](#2. 端口)
      • [2.1 传输层端口号的概念](#2.1 传输层端口号的概念)
      • [2.2 进程、端口号、传输层协议之间的关系](#2.2 进程、端口号、传输层协议之间的关系)
      • [2.3 熟知端口号](#2.3 熟知端口号)
      • [2.4 端口号的分类](#2.4 端口号的分类)
    • [3. 传输层的功能](#3. 传输层的功能)
  • UDP数据报
    • [1. 有连接的传输 vs 无连接的传输](#1. 有连接的传输 vs 无连接的传输)
    • [2. 可靠的传输 vs 不可靠的传输](#2. 可靠的传输 vs 不可靠的传输)
    • [3. UDP协议、UDP数据报、UDP首部](#3. UDP协议、UDP数据报、UDP首部)
    • [4. TCP协议、TCP报文段、TCP首部](#4. TCP协议、TCP报文段、TCP首部)
    • [5. UDP数据报格式](#5. UDP数据报格式)
    • [6. 小结](#6. 小结)
  • UDP检验
    • [1. 一种新的差错检验方法](#1. 一种新的差错检验方法)
    • [2. UDP检验](#2. UDP检验)
    • [3. 小结](#3. 小结)
  • TCP协议的框架梳理
  • TCP报文段
    • [1. 端口](#1. 端口)
    • [2. 序号、确认号、ACK⭐](#2. 序号、确认号、ACK⭐)
    • [3. 数据偏移、保留](#3. 数据偏移、保留)
    • [4. URG、PSH、RST、紧急指针](#4. URG、PSH、RST、紧急指针)
    • [5. SYN、FIN⭐](#5. SYN、FIN⭐)
    • [6. 窗口⭐](#6. 窗口⭐)
    • [7. 检验和](#7. 检验和)
    • [8. 选项⭐](#8. 选项⭐)
    • [9. 小结](#9. 小结)
  • TCP连接管理
    • [1. 建立连接(三次握手)](#1. 建立连接(三次握手))
      • [1.1 序号变化](#1.1 序号变化)
      • [1.2 TCP变化](#1.2 TCP变化)
      • [1.3 建立连接阶段耗时分析](#1.3 建立连接阶段耗时分析)
    • [2. 释放连接(四次挥手)](#2. 释放连接(四次挥手))
      • [2.1 序号变化](#2.1 序号变化)
      • [2.2 TCP变化](#2.2 TCP变化)
      • [2.3 释放连接阶段耗时分析](#2.3 释放连接阶段耗时分析)
    • [3. 小结](#3. 小结)

传输层提供的服务

1. 总结概述

2. 端口

2.1 传输层端口号的概念

IP地址+端口号=网络上一台主机的特定进程(可以理解为你手机上的一个软件)

2.2 进程、端口号、传输层协议之间的关系

  • 进程:手机上的软件,比如微信
  • 端口号:微信的输入框
  • 传输层协议:文字聊天(TCP)or语音聊天(UDP)
  • 套接字:我的手机上的微信可以选择文字聊天和语音聊天(绑定路径了,你和这个人的下一次聊天还是这个聊天页面)
  • 微信文字聊天 → 用 TCP:不能丢消息,顺序不能乱。
  • 微信语音/视频通话 → 用 UDP:允许偶尔丢包(声音卡一下),但要求低延迟。

注意:

  • 你的手机和我的手机的端口号是可以重名的-->两台主机的端口号是相互独立的
  • 文字聊天和语音聊天的端口号也是可以重名的-->TCP和UDP的端口号是相互独立的

2.3 熟知端口号

因为下面的应用程序都是装机必备的,所以都会分配固定的端口号给他们。

2.4 端口号的分类

  • 客户端:主动发起通信
  • 服务器:被动通信
  • ps :分类只是建议,而不是强制

3. 传输层的功能

  • 复用:比如微信和qq都可以文字聊天和视频通话
  • 分用 :微信只能接到微信的聊天和通话,qq只能接到qq的聊天和通话

UDP数据报

1. 有连接的传输 vs 无连接的传输

  • TCP:有连接的传输
  • UDP:无连接的传输

2. 可靠的传输 vs 不可靠的传输

  • TCP:可靠的传输
  • UDP:不可靠的传输

3. UDP协议、UDP数据报、UDP首部

可以和下方的TCP做对比

  • 首部只有8B:毕竟都无连接不可靠传输了,也不可能装太多东西
  • 不支持报文自动拆分、重装:所以如果有长报文,就只能手动分好了再用UDP传输
  • 无连接不可靠、不支持拥塞控制:堵了就是堵了,它没有告诉别人堵了的能力
  • 支持一对一、一对多:可以传输到很多台主机的同一个UDP端口上

4. TCP协议、TCP报文段、TCP首部

  • 首部20~60B:可靠有连接,自然占的就大一点儿(因为要装好多东西,源地址目的地址blabla...)
  • 支持报文自动拆分、重装:方便√
  • 可靠有连接、支持拥塞控制:它可以告诉自己来的地儿有点儿堵,让它发货发慢一点儿
  • 仅支持一对一:因为需要先建立连接

5. UDP数据报格式

首部只有8B,也就是88=64bit=164,也就是下面的四块

  • 源端口号:匿名不用回复就不告诉自己是谁,想要回复就写自己的
  • 目的端口号:必备,因为要给对方发送这个数据
  • UDP长度:必备,包含首部,以字节为单位
  • UDP检验和:必备,看自己发过去的数据有没有错
  • UDP数据报 :理论是65535B,但是受IP协议的限制,所以实际上是65515B


6. 小结

UDP检验

1. 一种新的差错检验方法

16+16+16 得到的结果取反

检验的时候再全部加回去,因为是取反后的(红色),和正常取反前的结果(黑色的加在一起)加在一起,没出错的话结果肯定都是1

溢出一位就另起一行,在最后给它加回去

2. UDP检验

  • 伪首部:用于计算检验,无其他实际作用

3. 小结

IP的首部检验和UDP的大差不差,只是有些细节不太一样:

  • IP检验不需要伪首部,仅IP首部16bit16bit地相加

TCP协议的框架梳理



TCP报文段

1. 端口

发送肯定有发送方(源端口)和接收方(目的端口)

2. 序号、确认号、ACK⭐

  • 序号seq :用于标记数据部分第一个字节原始字节流 中的位置,发送方自己设置
  • 确认号ack_seq :用于反馈,表示序号该确认号之前 的所有字节都已正确收到
  • ACK :和确认号ack绑定的,0的话确认号就无效,1的话确认号就有效
  • 序号 :可以看到图中发送方将起始序号设置为500,按照传输数据长度依次往下排序号
  • ACK和ack只有握手1的ACK=0 ,其他的ACK都为1
  • 确认号ack_seq :用于反馈,表示序号该确认号之前 的所有字节都已正确收到

    接受方只接收到了1、2、4的报文,但是因为ack表示的是累加确认 ,就是到谁之前都正确收到了
    1、2、4都受到了,但是也只能说明3之前的都正确收到了,所以ack_seq=2500(3的序号)

3. 数据偏移、保留

  • 数据偏移:TCP首部长度
  • 保留 :没用

4. URG、PSH、RST、紧急指针

  • URG:紧急位,加急插队
  • PSH:推送位,希望对方快速回复
  • RST:复位位,表示出现严重错误,必须释放连接。
  • 紧急指针 :也是序号,但是是另起的序号,和上面的序号一点儿关系都没。
  • 紧急指针 :也是序号,但是是另编的序号,和上面的序号一点儿关系都没。

5. SYN、FIN⭐

  • SYN :同步位,表示这是一个连接请求连接接受报文。(用于握手)
  • FIN :终止位,表示此报文段的发送方的数据已发送完毕 ,要求释放传输连接。(用于挥手)

6. 窗口⭐

  • 窗口 :流量控制

    接收缓冲区已经接收了1、2也就是2000B,窗口设置的大小是2500B,所以就只剩500B的剩余空间,就不可能放得下3了。

7. 检验和

和UDP的校验相同。

8. 选项⭐

主要考MSS

  • 握手1和握手2会在选项中协商MSS

9. 小结

TCP连接管理




1. 建立连接(三次握手)

1.1 序号变化

  • SYN :同步位,表示这是一个连接请求连接接受报文 。(用于握手)
    握手1发出请求,握手2接受,所以就这两个为1.
  • ACK :和确认号ack绑定的,0的话确认号就无效,1的话确认号就有效
    握手1是第一次发出的请求,之前也没有进行字节传输,所以只有握手1是0.
  • 确认号ack_seq :用于反馈,表示序号该确认号之前 的所有字节都已正确收到
    握手1ACK=0,所以ack无效;
  • FIN :终止位,表示此报文段的发送方的数据已发送完毕 ,要求释放传输连接。(用于挥手)
    finish,这才刚刚开始,根本用不到,所以都是0
  • 序号seq :用于标记数据部分第一个字节原始字节流 中的位置,发送方 自己设置
    客户设置自己的序号,服务器也设置自己的序号,互不干涉。

  • 确认号ack_seq :用于反馈,表示序号该确认号之前 的所有字节都已正确收到
    seq-->ack,发送方的seq序号转化为接收方的ack序号+1
  • 序号seq :用于标记数据部分第一个字节原始字节流 中的位置,发送方 自己设置
    握手1、握手2不能携带数据,但是要消耗一个序号
  • 握手1、2不能携带数据,握手3可以携带数据
  • 握手1、2固定消耗一个序号
  • 握手3如果不携带数据就不消耗序号

1.2 TCP变化

  • 客户 :连接关闭-->发送握手1-->同步已发送 -->接受握手2-->发送握手3-->已建立连接
  • 服务器 :连接关闭-->监听 -->接受握手1-->发送挥手2-->同步已收到 -->接受握手3-->已建立连接
  • 总结 :握手1之后的就是同步XX状态,连接3之后就是已建立连接状态

1.3 建立连接阶段耗时分析

  • 客户端:1RTT
  • 服务器端 :1.5RTT

2. 释放连接(四次挥手)

2.1 序号变化

  • SYN :同步位,表示这是一个连接请求连接接受报文 。(用于握手)
    用于握手的,自然在挥手的时候就没用了
  • ACK :和确认号ack绑定的,0的话确认号就无效,1的话确认号就有效
    只有握手1是0.
  • FIN :终止位,表示此报文段的发送方的数据已发送完毕 ,要求释放传输连接。(用于挥手)
    发送方,自然是谁先发送谁就是1,挥手1先发送所以为1,挥手2是回应挥手1所以为0,挥手3是服务器发送所以为1,挥手4是回应为0
  • 确认号ack_seq :用于反馈,表示序号该确认号之前 的所有字节都已正确收到
    seq-->ack,发送方的seq序号转化为接收方的ack序号+1(发送+回应,有来有回)
  • 序号seq :用于标记数据部分第一个字节原始字节流 中的位置,发送方 自己设置
  • 序号seq :用于标记数据部分第一个字节原始字节流 中的位置,发送方 自己设置
    中间又传送了一次数据,所以要算上数据的长度

2.2 TCP变化

  • 客户:已建立连接 -->发送挥手1-->终止等待1 -->接受挥手2-->终止等待2 -->接受挥手3-->发送挥手4-->时间等待-->连接关闭
  • 服务器:已建立连接 -->接受挥手1-->发送挥手2-->关闭等待 -->发送挥手3-->最后确认 -->接受挥手4-->连接关闭

2.3 释放连接阶段耗时分析

如果在客户的时间等待状态 中又接收到挥手3,就会重新发送挥手4,直到时间等待状态可以平安无事地过去。

  • 客户:1RTT+2MSL
  • 服务器 :1.5RTT

3. 小结

相关推荐
速易达网络3 小时前
基于Java TCP 聊天室
java·开发语言·tcp/ip
_F_y6 小时前
Socket编程TCP
网络·网络协议·tcp/ip
阿恩.7708 小时前
前沿科技计算机国际期刊征稿:电子、AI与网络计算
人工智能·经验分享·笔记·计算机网络·考研·云计算
Json_8 小时前
springboot框架对接物联网,配置TCP协议依赖,与设备通信,让TCP变的如此简单
java·后端·tcp/ip
梁辰兴9 小时前
计算机网络基础:以太网的 MAC 层
网络·计算机网络·macos·计算机·mac·以太网·梁辰兴
刺客xs10 小时前
TCP网络通信
网络·网络协议·tcp/ip
ikkkkkkkl11 小时前
计算机网络:网络层
计算机网络·路由·网络层·转发
不染尘.12 小时前
TCP客户服务器编程模型
linux·服务器·网络·网络协议·tcp/ip·计算机网络·ssh
Ccjf酷儿12 小时前
计算机网络 (郑烇) 4 网络层:数据平面
网络·计算机网络·平面