一、UDP协议

1、概述

UDP提供不可靠的服务,无连接(不存在建立连接的时延),首部开销相对TCP小,没有拥塞控制,提供最大努力交付,面向报文(无论多长的报文UDP也只加一个头部就往下发;TCP面向字节流)。通常用于允许一些数据丢失,但不允许交较大时延、传输少量数据(DNS)。

2、UDP首部格式(8字节)

  • 源端口号:16位。
  • 目标端口号:16位。
  • UDP长度:16位。包括UDP首部和数据的总长度。最少为8。
  • 校验和: 16位。

    1、临时添加12字节UDP伪首部,设置校验和为0。

    2、按16位(不足末尾补0)为单位数字将UDP伪首部、UDP首部、UDP数据以2进制反码相加求和。

    3、将16位的和放入校验和。

    4、校验:加UDP伪首部,按16位为单位计算2进制反码的和,结果为0则正确。

二、IP协议、

references:

OSI参考模型——网络层:IPv4协议和IPv6协议详解


IP协议

1、特点

  • 无连接的、不可靠的分组传送协议;
  • 尽最大努力交付;
  • 是点对点的网络层通信协议;

2、IP首部格式(20~60字节)

  1. 版本:4位,4是IPv4,6是IPv6;
  2. 首部长度:8位。
  3. 总长度:16位。总长度=首部长度+数据长度,最大\(2^{16}-1=65535\)字节。
  4. 标识(Identification):16位,用于分片重组。属于同一个分片的ID相同。
  5. 标志(Flags):3位,用于分片重组。第一位未使用,必须为0;第二位DF不分片标志,表示能否分片,1不能分片,0能分片。若DF为1且IP分片的长度大于MTU,则放弃该分片并发送ICMP差错报文向源主机报告;第三位MF更多分片标志,表示该分片是不是最后一个分片(后面还有没有分片),1表示不是,0表示是最后一个分片。
  6. 片偏移:13位,表示分片在原始数据中的位置。单位为8字节,如片偏移10,则偏移量为80字节。最多表示偏移\(2^{13}*8=65536\)字节。
  7. 生存时间(TLL):8位,表示包可以经过多少个路由器的中转,每经过一个路由器,TLL减1。当TTL为0时,丢弃IP数据包并发送ICMP报文通知源主机。TLL可以防止数据包环路。
  8. 协议:8位,表示使用IP的高层协议类型(IP首部的下一个首部),1是ICMP,2是IGMP,6是TCP,17是UDP。
  9. 首部校验和:16位,校验IP的首部。
  10. 地址:32位。
  11. 目标地址:32位。

3、分片和重组

相关字段:标识、标志、片偏移。

1、最大传输单元(MTU)指定了网络中可传输数据包的最大尺寸,当分组的长度超过MTU,并且DF为0就要分片(DF为1且IP分片的长度大于MTU,则放弃该分片并发送ICMP差错报文向源主机报告)。每个片段的最大尺寸是MTU-IP头部长度,然后进行以下改动:总长度为当前片段大小;MF除了最后一个其他都为1;片偏移在原来片偏移基础上;首部校验和重新计算。

2、通过片偏移找到重组的顺序,MF为0表示所有分片已到达。

4、路径MTU发现

主机先发送整个数据包,并且将DF设为1。这样遇到长度大于传输单元时就会丢弃并返回ICMP报文。然后将ICMP通知中的MTU设为当前的MTU,然后根据这个MTU进行分片。然后再传输。如此往复,直到没有ICMP报文返回,则说明现在的MTU已经是真的MTU了。

三、ICMP

1、概述

ICMP协议是网络层协议。因为IP协议提供的是不可靠的服务,所以丢包后不能回复是否丢包和丢包的原因,所以通过ICMP完成。分为查询报文和差错报文。

IP数据报协议字段为1就说明协议是ICMP。

2、报文格式

  1. 类型:8位。表示报文类型。1~127是差错报文,128以上是查询报文。
  2. 代码:8位。标识对应的代码,和类型字段一起标识ICMP报文的详细类型。
  3. 校验和:16位。

3、常见报文

  1. 回显请求(类型8)、回显应答(类型0):一台主机向另一个主机发送ICMP回显请求报文,如果途中没有异常(丢失,传输失败)就返回ICMP回显应答报文,说明这台主机存在。Ping命令使用的就是ICMP回显请求和应答报文。
  2. 目标不可达(类型3):网络不可达(代码0),主机不可达(代码1),协议不可达(代码2)。
  3. 超时报文(类型11):传输超时(代码0),分段重组超时(代码1)。

计算机网络 part2的更多相关文章

  1. 计算机网络part2——物理层

    物理层概述 1.物理层基本概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 主要任务:确定与传输媒体接口有关的一些特性 特性: 机械特性 电气特性 功能特性 规 ...

  2. 秋招C++面试相关总结索引

    C++相关 C++ part1 C++ part2 C++ part3 C++ part4 C++ part5 C++ part6 C++ part6.5 C++ part7 C++ part8 C+ ...

  3. 《计算机网络 自顶向下方法》 第8章 计算机网络中的安全 Part2

    SSL(使 TCP 连接安全) SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化 HTTPS 使用 SSL,而 HTTP 不使用 SSL 通过采用机密性.数据完整 ...

  4. 《计算机网络 自顶向下方法》 第6章 链路层和局域网 Part2

    待补充完善 Web 页面的请求历程 应用层     报文.主机 运输层     报文段. 网络层     数据报.路由器.IP 地址 链路层     以太网帧.交换机.MAC 地址 步骤 1)到 4) ...

  5. 《计算机网络 自顶向下方法》 第3章 运输层 Part2

    待补充完善 TCP 相关基本点 1.面向连接 两个不同主机上的进程在通过 TCP 进行通信之前,必须先通过三次握手来建立 TCP 连接 2.全双工服务 即,如果一台主机上的进程 A 与另一台主机上的进 ...

  6. 《计算机网络 自顶向下方法》 第2章 应用层 Part2

    域名.主机名?   从范围上看: 域名的范围比主机名大 一个域名下通常有多个主机名 从组成上看: 主机名 = 服务器名(或计算机名) + 域名 举例说明: baidu.com 是百度的域名 www.b ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 3.安装Clus ...

  8. [计算机网络]简易http server程序

    好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...

  9. Linux平台 Oracle 11gR2 RAC安装Part2:GI安装

    三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面安装GI 3 ...

随机推荐

  1. Description Resource Path Location Type Failure to transfer org.apache.maven.plugins:maven-surefire-

    url:https://www.pianshen.com/article/8003307916/ Description Resource Path Location Type Failure to ...

  2. 入门OJ:photo

    题目描述 有N个人,来自K个家族.他们排成一行准备照相,但是由于天生的排外性,每个人都希望和本家族的人站在一起,中间不要加入别的家族的人.问最少从队列中去掉多少个就可以达到这个目的. 输入格式 第一行 ...

  3. 《进击吧!Blazor!》第一章 1.初识 Blazor

    作者介绍 陈超超 Ant Design Blazor 项目贡献者 拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,Ant Design Blazor 项目贡献者,现就职于正泰集团 ...

  4. JAVA中关于基本数据和引用数据参数传递过程

    基本数据和引用数据参数传递过程 案例1:判断程序的输出结果 class Demo{ public static void main(String[] atgs){ int x =4; show(x); ...

  5. SQL解析工具

    面对复杂的SQL可用这个SQL解析工具,分析出用到了哪些表哪些字段: http://107.170.101.241:8080/getTableColumn/

  6. 类型检查和鸭子类型 Duck typing in computer programming is an application of the duck test 鸭子测试 鸭子类型 指示编译器将类的类型检查安排在运行时而不是编译时 type checking can be specified to occur at run time rather than compile time.

    Go所提供的面向对象功能十分简洁,但却兼具了类型检查和鸭子类型两者的有点,这是何等优秀的设计啊! Duck typing in computer programming is an applicati ...

  7. 语言反射规则 - The Laws of Reflection

    [译]Go反射的三个原则(官方博客) | seven的分享 https://sevenyu.top/2019/12/21/laws-of-reflection.html wilhg/The-Laws- ...

  8. 【c++小知识】static用法浅析

    一.前言 C++的关键字static分两种用法,在面向过程程序设计(c语言中的普通变量和函数)中的使用和在面向对象程序设计(c++中的类)中的使用 二.面向过程程序设计中的static(静态变量.静态 ...

  9. qbxt 学习笔记 10.2

    写在前面 昨晚网络咕了,而且比较晚,没交作业.解题报告写成书面的了,代码另发 + 博客. 目录 写在前面 1. 爬山算法 概述 示例 2. 模拟退火 概述 3. Meet in the Middle ...

  10. loj10018数的划分

    题目描述 将整数 n 分成 k 份,且每份不能为空,问有多少种不同的分法.当 n=7,k=3 时,下面三种分法被认为是相同的:1 1 5;1 5 1 ;5 1 1 输入格式 一行两个数 n ,k . ...