计算机网络 part2
一、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字节)
- 版本:4位,4是IPv4,6是IPv6;
- 首部长度:8位。
- 总长度:16位。总长度=首部长度+数据长度,最大\(2^{16}-1=65535\)字节。
- 标识(Identification):16位,用于分片重组。属于同一个分片的ID相同。
- 标志(Flags):3位,用于分片重组。第一位未使用,必须为0;第二位DF不分片标志,表示能否分片,1不能分片,0能分片。若DF为1且IP分片的长度大于MTU,则放弃该分片并发送ICMP差错报文向源主机报告;第三位MF更多分片标志,表示该分片是不是最后一个分片(后面还有没有分片),1表示不是,0表示是最后一个分片。
- 片偏移:13位,表示分片在原始数据中的位置。单位为8字节,如片偏移10,则偏移量为80字节。最多表示偏移\(2^{13}*8=65536\)字节。
- 生存时间(TLL):8位,表示包可以经过多少个路由器的中转,每经过一个路由器,TLL减1。当TTL为0时,丢弃IP数据包并发送ICMP报文通知源主机。TLL可以防止数据包环路。
- 协议:8位,表示使用IP的高层协议类型(IP首部的下一个首部),1是ICMP,2是IGMP,6是TCP,17是UDP。
- 首部校验和:16位,校验IP的首部。
- 地址:32位。
- 目标地址: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、报文格式
- 类型:8位。表示报文类型。1~127是差错报文,128以上是查询报文。
- 代码:8位。标识对应的代码,和类型字段一起标识ICMP报文的详细类型。
- 校验和:16位。
3、常见报文
- 回显请求(类型8)、回显应答(类型0):一台主机向另一个主机发送ICMP回显请求报文,如果途中没有异常(丢失,传输失败)就返回ICMP回显应答报文,说明这台主机存在。Ping命令使用的就是ICMP回显请求和应答报文。
- 目标不可达(类型3):网络不可达(代码0),主机不可达(代码1),协议不可达(代码2)。
- 超时报文(类型11):传输超时(代码0),分段重组超时(代码1)。
计算机网络 part2的更多相关文章
- 计算机网络part2——物理层
物理层概述 1.物理层基本概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 主要任务:确定与传输媒体接口有关的一些特性 特性: 机械特性 电气特性 功能特性 规 ...
- 秋招C++面试相关总结索引
C++相关 C++ part1 C++ part2 C++ part3 C++ part4 C++ part5 C++ part6 C++ part6.5 C++ part7 C++ part8 C+ ...
- 《计算机网络 自顶向下方法》 第8章 计算机网络中的安全 Part2
SSL(使 TCP 连接安全) SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化 HTTPS 使用 SSL,而 HTTP 不使用 SSL 通过采用机密性.数据完整 ...
- 《计算机网络 自顶向下方法》 第6章 链路层和局域网 Part2
待补充完善 Web 页面的请求历程 应用层 报文.主机 运输层 报文段. 网络层 数据报.路由器.IP 地址 链路层 以太网帧.交换机.MAC 地址 步骤 1)到 4) ...
- 《计算机网络 自顶向下方法》 第3章 运输层 Part2
待补充完善 TCP 相关基本点 1.面向连接 两个不同主机上的进程在通过 TCP 进行通信之前,必须先通过三次握手来建立 TCP 连接 2.全双工服务 即,如果一台主机上的进程 A 与另一台主机上的进 ...
- 《计算机网络 自顶向下方法》 第2章 应用层 Part2
域名.主机名? 从范围上看: 域名的范围比主机名大 一个域名下通常有多个主机名 从组成上看: 主机名 = 服务器名(或计算机名) + 域名 举例说明: baidu.com 是百度的域名 www.b ...
- 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 ...
- [计算机网络]简易http server程序
好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...
- Linux平台 Oracle 11gR2 RAC安装Part2:GI安装
三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面安装GI 3 ...
随机推荐
- 03--Docker 容器和镜像常用命令
一.帮助命令 docker version docker info docker --help =====================镜像命令=========================== ...
- atlas读写分离
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug ...
- uni-app开发经验分享十: 封装request请求
http.js //封装requset,uploadFile和downloadFile请求,新增get和post请求方法 let http = { 'setBaseUrl': (url) => ...
- ELK (elasticsearch+kibana+logstash+elasticsearch-head) 华为云下载地址
https://mirrors.huaweicloud.com/elasticsearch https://mirrors.huaweicloud.com/kibana https://mirrors ...
- deepin定制deepin-terminal
一. 背景介绍 本人以前在win10上经常使用xshell来登陆服务器.xshell提供了很丰富的功能和快捷键.个人比较喜欢的包括三个功能 终端透明 双击时根据分隔符选中文字 突出显示 但是自从使用d ...
- 将Oracle数据,以及表结构如何传输至MySQL
最近研究数据库,将Oracle数据库中的表结构以及数据传输给MySQL数据库,自己通过学习采用两种方式,效率较高. 方式一:Navicat 自从下载了Navicat,真的发现这是一款操作数据库十分优秀 ...
- yuan先生博客地址
1 Web应用 https://www.cnblogs.com/yuanchenqi/articles/8869302.html2 http协议 https://www.cnblogs.com/yu ...
- C++基本之--静态成员函数和静态成员变量
#include <iostream> using namespace std; class Internet { public: Internet(char *name,char *ad ...
- Kubernetes --(k8s)yml 文件
认识yml文件 yaml文件语法 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注释,从这个字符一直到行尾 ...
- 利用PWM脉宽调制实现呼吸灯
1.设计目标 完成一个呼吸灯,从亮到灭的时间为2秒,从灭到亮的时间为2秒,以此不断往复. 2.设计步骤 2.1设计分析 利用PWM(脉冲宽度调制)实现led灯亮度的变化,只需要改变占空比就可以实现,具 ...