面试时,你被问到过 TCP/IP 协议吗?

2023-05-16

前言:

  • 精通 TCP/IP,熟练使用 Socket 进行网路编程。

看到这句话,有没有感到很熟悉呀?相信很多人在投递简历的时候都看到过这条要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这些东西不屑一顾.

但是笔者认为想要做出更好的 APP,那么对这些基础知识必须要有一定的了解,这样你才能考虑得更加全面和完善,下面就让我们一起来了解一下,什么是 TCP/IP.

1.什么是 TCP/IP?

TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合.
传统上来说 TCP/IP 被认为是一个四层协议

1) 网络接口层:

主要是指物理层次的一些接口,比如电缆等.

2) 网络层:

提供独立于硬件的逻辑寻址,实现物理地址与逻辑地址的转换.

在 TCP / IP 协议族中,网络层协议包括 IP 协议(网际协议),ICMP 协议( Internet 互联网控制报文协议),以及 IGMP 协议( Internet 组管理协议).

3) 传输层:

为网络提供了流量控制,错误控制和确认服务.

在 TCP / IP 协议族中有两个互不相同的传输协议: TCP(传输控制协议)和 UDP(用户数据报协议).

4) 应用层:

为网络排错,文件传输,远程控制和 Internet 操作提供具体的应用程序

2.数据包

在 TCP / IP 协议中数据先由上往下将数据装包,然后由下往上拆包

在装包的时候,每一层都会增加一些信息用于传输,这部分信息就叫报头,当上层的数据到达本层的时候,会将数据加上本层的报头打包在一起,继续往下传递.

装包

在拆包的时候,每一层将本层需要的报头读取后,就将剩下的数据往上传.

这个过程有点像俄罗斯套娃,所以有时候人们也会用俄罗斯套娃来形容这个过程.

俄罗斯套娃

3.网络接口层

这一块主要主要涉及到一些物理传输,比如以太网,无线局域网.这里就不做详细的介绍了

4.网络层

前面有提到,网络层主要就是做物理地址与逻辑地址之间的转换.

目前市场上应用的最多的是 32 位二进制的 IPv4 ,因为 IPv4 的地址已经不够用了,所以 128 位二进制的 IPv6 应用越来越广泛了(但是下面的介绍都是基于 IPv4 进行的)

1) IP:

TCP/IP 协议网络上的每一个网络适配器都有一个唯一的 IP 地址.

IP 地址是一个 32 位的地址,这个地址通常分成 4 端,每 8 个二进制为一段,但是为了方便阅读,通常会将每段都转换为十进制来显示,比如大家非常熟悉的 192.168.0.1

IP 地址分为两个部分:

  • 网络 ID
  • 主机 ID

但是具体哪部分属于网络 ID,哪些属于主机 ID 并没有规定.

因为有些网络是需要很多主机的,这样的话代表主机 ID 的部分就要更多,但是有些网络需要的主机很少,这样主机 ID 的部分就应该少一些.

绝大部分 IP 地址属于以下几类

  • A 类地址:IP 地址的前 8 位代表网络 ID ,后 24 位代表主机 ID。
  • B 类地址:IP 地址的前 16 位代表网络 ID ,后 16 位代表主机 ID。
  • C 类地址:IP 地址的前 24 位代表网络 ID ,后 8 位代表主机 ID。

这里能够很明显的看出 A 类地址能够提供出的网络 ID 较少,但是每个网络可以拥有非常多的主机

但是我们怎么才能看出一个 IP 地址到底是哪类地址呢?

  • 如果 32 位的 IP 地址以 0 开头,那么它就是一个 A 类地址。
  • 如果 32 位的 IP 地址以 10 开头,那么它就是一个 B 类地址。
  • 如果 32 位的 IP 地址以 110 开头,那么它就是一个 C 类地址。

那么转化为十进制(四段)的话,我们就能以第一段中的十进制数来区分 IP 地址到底是哪类地址了。

注意:

  • 十进制第一段大于 223 的属于 D 类和 E 类地址,这两类比较特殊也不常见,这里就不做详解介绍了。
  • 每一类都有一些排除地址,这些地址并不属于该类,他们是在一些特殊情况使用地址(后面会介绍)
  • 除了这样的方式来划分网络,我们还可以把每个网络划分为更小的网络块,称之为子网(后面会介绍)

全是 0 的主机 ID 代表网络本身,比如说 IP 地址为 130.100.0.0 指的是网络 ID 为130.100 的 B 类地址。

全是 1 的主机 ID 代表广播,是用于向该网络中的全部主机方法消息的。 IP 地址为 130.100.255.255 就是网络 ID 为 130.100 网络的广播地址(二进制 IP 地址中全是 1 ,转换为十进制就是 255 )

以十进制 127 开头的地址都是环回地址。目的地址是环回地址的消息,其实是由本地发送和接收的。主要是用于测试 TCP/IP 软件是否正常工作。我们用 ping 功能的时候,一般用的环回地址是 127.0.0.1

2)地址解析协议 ARP

简单的来说 ARP 的作用就是把 IP 地址映射为物理地址,而与之相反的 RARP(逆向 ARP)就是将物理地址映射为 IP 地址。

3)子网

前面提到了 IP 地址的分类,但是对于 A 类和 B 类地址来说,每个网络下的主机数量太多了,那么网络的传输会变得很低效,并且很不灵活。比如说 IP地址为 100.0.0.0 的 A 类地址,这个网络下的主机数量超过了 1600 万台。

所以子网掩码的出现就是为了解决这样的问题。

我们先回顾一下之前如何区分主机 IP 和网络 IP 的。

以 A 类地址 99.10.10.10 为例,前 8 位是网络 IP ,后 24 位是主机 IP 。(如下图)

子网掩码也是一个 32 为的二进制数,也可以用四个十进制数来分段,他的每一位对应着 IP 地址的相应位置,数值为 1 时代表的是非主机位,数值为 0 时代表是主机位。

由表格可以很清晰的看出,网络 IP 仍是由之前的分类来决定到底是多少位,主机 IP 则是由子网掩码值为 0 的位数来决定,剩下的则是子网 IP

5 传输层

传输层提供了两种到达目标网络的方式

  • 传输控制协议(TCP):提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议。
  • 用户数据报协议(UDP):只提供了基本的错误检测,是一个无连接的协议。

特点:

1)UDP:

  • 把数据打包
  • 数据大小有限制(64k)
  • 不建立连接
  • 速度快,但可靠性低

2)TCP:

  • 建立连接通道
  • 数据大小无限制
  • 速度慢,但是可靠性高

由于传输层涉及的东西比较多,比如端口,Socket等,都是我们做移动开发需要了解的,之后的文章中我们再具体做介绍,这里就不讲解了。

6 应用层

应用层做为 TCP/IP 协议的最高层级,对于我们移动开发来说,是接触最多的。

运行在TCP协议上的协议:

  • HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
  • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
  • FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
  • POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
  • SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
  • TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。
  • SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。

    运行在UDP协议上的协议:

  • BOOTP(Boot Protocol,启动协议),应用于无盘设备。
  • NTP(Network Time Protocol,网络时间协议),用于网络同步。
  • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。

    其他:

  • DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
  • ECHO(Echo Protocol,回绕协议),用于查错及测量应答时间(运行在TCP和UDP协议上)。
  • SNMP(Simple Network Management Protocol,简单网络管理协议),用于网络信息的收集和网络管理。
  • ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太网硬件的地址。

同样的,由于应用层我们需要涉及的东西太多,具体的介绍我们将在之后的文章中进行介绍,本文就不进行扩展了,感兴趣的朋友可以继续关注我的博客:

blog.csdn.net/yulyu

热门文章

  • Glide-源码详解
  • 渐进式加载-基础讲解
  • 活用productFlavors
  • onTouch事件传递
  • 那些年我们解决滑动冲突时遇过的坑
  • 进程间通信--AIDL
  • 序列化--Serializable与Parcelable
  • 如何解决内存溢出以及内存泄漏
  • Okhttputils终极封装
  • FaceBook推出的调试神器
  • Android代码优化工具
  • Glide-入门教程
  • Glide-图片预处理(圆角,高斯模糊等)
  • Glide-图片的压缩
  • Glide-内存缓存与磁盘缓存
  • Glide-自定义缓存
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试时,你被问到过 TCP/IP 协议吗? 的相关文章

  • linux远程灰屏,Ubuntu 15.10安装VNC灰屏问题解决

    1 在Ubuntu上首先需要安装vnc4server apt get install vnc4server 2 第一次执行vncserver的时候需要为客户端连接设置8位的密码 3 打开服务后 xff0c 根据客户端号连接 也可以指定客户端
  • Android IOS WebRTC 音视频开发总结(十五)-- 培训课程大纲

    Android IOS WebRTC 音视频开发总结 xff08 十五 xff09 培训课程大纲 最近在给公司做内部培训 xff0c 主要是关于即时通讯和移动视频通话 xff0c 包括android与android xff0c ios与io
  • Docker 1.12 : 使用 Swarm 的新姿势

    本文首发于我的博客 原文链接 xff1a Docker 1 12 新特性 Docker1 12 版本做出了很大的改动 xff0c 特别是增加了对 swarm 的原生支持 xff0c 下面对新版的使用做一个总结 xff0c 供大家查阅 doc
  • 用CSS写一个简单的幻灯片效果页面

    这里是修真院前端小课堂 xff0c 每篇分享文从 背景介绍 知识剖析 常见问题 解决方案 编码实战 扩展思考 更多讨论 参考文献 八个方面深度解析前端知识 技能 xff0c 本篇分享的是 xff1a 用CSS写一个简单的幻灯片效果页面 1
  • Go程序Windows运行时不显示cmd窗口

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 非常简单 xff0c 编译时候加参数 go build ldflags 61 34 H windowsgui 34 转载于 https my oschina net pok
  • Python3 创建虚拟环境

    目的 使用虚拟环境是为了隔离不同项目之间的Python库 创建虚拟环境 Python3 内置了venv模块 xff0c 首先创建项目目录 xff0c 进入目录后 xff0c 执行 python3 m venv venv 激活虚拟环境 在开始
  • Ubuntu18.04LTS 文件系统简记

    Ubuntu18 04LTS 文件系统 了解Linux文件系统是熟悉掌握使用Linux系统的第一步 首先安装名为tree的工具 sudo apt install tree 运行 tree help 查看tree命令的详细用法 运行 tree
  • windows下nvm安装node之后npm命令找不到问题解决办法

    主要关键解解决办法 xff1a 61 61 61 适 用于所有东西的安装 安装有关环境配置类的软件及其他 xff0c 一般情况下切记不要安装到c盘programfiles下 xff0c 否则会出现各种问题的报错 xff01 xff01 xf
  • [问题2014S14] 复旦高等代数II(13级)每周一题(第十四教学周)

    问题2014S14 设 V 为酉空间 证明 不存在 V 上的非零线性变换 varphi 使得对 V 中任一向量 v 均有 varphi v v 61 0 注 本题是复旦高代教材 P326 习题 9 1 5 的推广
  • 8B10B编解码及FPGA实现

    概述 在使用ALTERA的高速串行接口时 xff0c GXB模块里硬件实现了8B10B编码 xff0c 用户只是 傻瓜 式的使用 xff0c 笔者也一直没有弄清楚 网上搜索了一些学习资料 xff0c 结合参考文献希望能够对其进行消化 另外
  • 零碎记录- spring security oauth2 资源服务器中设置放行路径

    在资源服务器配置类中重写configure方法 xff0c 添加放行信息 使用了 64 EnableResouceServer xff0c 且继承了ResourceServerConfigurerAdapter的类作为资源服务器配置信息类
  • Golang 新手可能会踩的 50 个坑

    译文 xff1a Golang 新手可能会踩的 50 个坑 原文 xff1a 50 Shades of Go Traps Gotchas and Common Mistakes 翻译已获作者授权 xff0c 转载请注明来源 不久前发现在知乎
  • 手把手教你使用TF服务将TensorFlow模型部署到生产环境 ...

    介 绍 将机器学习 xff08 ML xff09 模型应用于生产环境已成为一个火热的的话题 许多框架提供了旨在解决此问题的不同解决方案 为解决这一问题 xff0c 谷歌发布了TensorFlow xff08 TF xff09 服务 xff0
  • Centos/Linux下如何查看网关地址/Gateway地址

    Centos Linux下如何查看网关地址 Gateway地址 xff1f Linux下查看网关的命令还是很多的 xff0c 不过如果IP是DHCP获取 xff0c 那么有些命令是不适用的 xff0c 当然也有通用的查询网关命令 1 ifc
  • 教你Java生成文件时怎么设置编码格式

    OutputStreamWriter允许用户指定编码方式 xff0c 代码为 xff1a FileInputStream fis 61 new FileInputStream 34 文件路径 34 xff1b OutputStreamWri
  • One input and More output use 'tee'

    2008 05 22 In preparation for my Luma media player I wanted to create a simple audio player with visualization Based upo
  • 简单的任务调度(自整理)

    为什么80 的码农都做不了架构师 xff1f gt gt gt 任务调度 使用 Quartz 框架实现 1 8 6 的版本 开源框架 什么是任务调度 xff1a 即是某个时间点做某件时间 xff01 核心有是什么 xff1a 以时间为关注点
  • Laravel5.5集成七牛云上传、管理(删除、查询)

    一 为什么使用七牛云存储 1 使用七牛带宽和CDN xff0c 速度快 xff0c 不占用开发者服务器 2 支持图片任意格式 任意分辨率自动生成 xff0c 可以用来做图片服务器 3 小流量免费 xff1a 存储空间 10GB xff0c
  • centos为用户添加sudo功能

    su chmod a 43 w etc sudoers vim etc sudoers 找到root ALL 61 ALL ALL这行 复制出新的一行 xff0c 并且将root改为daniel xff08 当前用户名 xff09 chmo
  • Reverse Linked List

    本题是反转一个单链表 xff0c 题目提示使用迭代和递归两种方式 xff0c 属于比较基础的题目 一 迭代方式 xff1a 总体思路是从左到右遍历链表结点 xff0c 依次反转连接关系 每次处理相邻的两个结点 xff0c 从 lt None

随机推荐

  • angularJS1笔记-(17)-ng-bind-html指令

    angular不推荐大家在绑定数据的时候绑定html 但是如果你非要这么干也并不是不可以的 举个例子 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt me
  • 旧电脑diy文件服务器,2021旧电脑自制NAS存储变废为宝.docx

    amp tid 61 13992 amp page 61 1 amp extra 61 pid15059 amp tid 61 13992 amp page 61 1 amp extra 61 pid15059 旧电脑自制NAS存储变废为宝
  • Druid 连接池 JDBCUtils 工具类的使用

    Druid工具介绍 它不仅仅是一个数据库连接池 xff0c 它还包含一个ProxyDriver xff0c 一系列内置的JDBC组件库 xff0c 一个SQL Parser 支持所有JDBC兼容的数据库 xff0c 包括Oracle MyS
  • matlab练习程序(简单图像融合)

    通过本篇和上一篇的结合 xff0c 应该就能做出拉普拉斯图像融合了 这里用的方法很简单 xff0c 就是用模板和两个图像相乘 xff0c 然后对处理后的两个图像再相加就可以了 拉普拉斯融合就是对金字塔的每一层图像做这样的操作 xff0c 然
  • Ext.grid.Panel表格分页

    Ext grid Panel表格分页示例 代码 xff1a cshtml 64 Layout 61 null lt DOCTYPE html gt lt html gt lt head gt lt title gt Ext grid Pan
  • Build a Multiple Choices Cascader by ant-design-vue

    Preface I need to make a cascader which can support multiple choices However I didn 39 t find any ui which supports that
  • SpringBoot使用LibreOffice转换PDF

    用LibreOffice将Office文档转换PDF 本例使用 LibreOffice 6 0 4 jodconverter 4 2 0 spring boot 1 5 9 RELEASE 在CentOS7 43 openJDK8 和 Wi
  • 史上最全面的Neo4j使用指南

    Neo4j图形数据库教程 Neo4j图形数据库教程 第一章 xff1a 介绍 Neo4j是什么Neo4j的特点Neo4j的优点 第二章 xff1a 安装 1 环境2 下载3 开启远程访问4 测试 第三章 xff1a CQL 1 CQL简介2
  • 5-ipv6基础知识之-域名解析dns

    DNS域名解析过程比较简单 xff0c 先看下IPV4下面的DNS xff0c 然后再看IPV6下面的DNS 1 IPv4 DNS 1 1 IPv4 DNS请求过程 在电脑上面ping www taobao com xff08 如果已经访问
  • sql中set命令解析

    1 SET ANSI DEFAULTS ON OFF 将一组与 SQL Server 的运行环境有关的选项设置为 SQL 92 标准 2 SET ANSI NULL DFLT OFF ON OFF 当数据库选项 ANSI null defa
  • 软件项目开发,交付文档(全)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 作为一个软件项目负责人 xff0c 这些文档的编写是必须懂的 这里列出软件项目开发 xff0c 交付时文档的文档供大家参考 模板的话需要一个个文档去研究 xff0c 以后做
  • 修改Docker容器字符编码为-zh_CN.UTF-8中文字符集

    版本记录 2019 4 26日 第一版 问题描述 公司的java项目中使用了openoffice和pdf2html对文件进行格式转换 xff0c word xff0c ppt xff0c pdf文件都转换没有问题 xff0c 唯独excel
  • @GetMapping和@PostMapping接收参数的格式

    一 1 使用 64 Controller 注解 xff0c 在对应的方法上 xff0c 视图解析器可以解析return 的jsp html页面 xff0c 并且跳转到相应页面 若返回json等内容到页面 xff0c 则需要加 64 Resp
  • Python 3 教程二:文件,目录和路径

    1 遍历文件夹和文件 import os import os path os os path里包含大多数文件访问的函数 所以要先引入它们 请按照你的实际情况修改这个路径 rootdir 61 34 d download 34 for par
  • [BZOJ1925]地精部落

    地精部落 题目描述 传说很久以前 xff0c 大地上居住着一种神秘的生物 xff1a 地精 地精喜欢住在连绵不绝的山脉中 具体地说 xff0c 一座长度为N的山脉H可分为从左到右的N段 xff0c 每段有一个独一无二的高度Hi xff0c
  • 【C#学习笔记】类构造函数使用

    using System namespace ConsoleApplication class stu private string name private int age public stu name 61 34 34 age 61
  • VS2010(VS2008)下安装配置OpenCV

    研究生课题做嵌入式图像处理方向 xff0c 所以主要涉及的知识就是嵌入式Linux 43 OpenCV 43 QT xff0c 主要OpenCV和QT都是跨平台的 xff0c 而且充分利用好的话再后期的算法设计和功能扩展上就方便很多 只是之
  • iOS开发基础篇--CAShapeLayer的strokeStart和strokeEnd属性

    一 案例演示 最近有一个小需求 xff0c 就是要做一个圆形进度条 xff0c 大概样子如下 xff1a 1 gif 在不知道有CAShapeLayer的strokeStart和strokeEnd属性的时候 xff0c 我采取的方法就是实时
  • 排序算法——选择排序法(Select Sorting)

    选择排序 xff08 Select Sorting xff09 基本介绍 选择排序也属于内部排序法 xff0c 是从预排序的数据中 xff0c 按指定的规则选出某一元素 xff0c 再依规定交换位置后达到排序的目的 选择排序思想 选择排序
  • 面试时,你被问到过 TCP/IP 协议吗?

    前言 精通 TCP IP xff0c 熟练使用 Socket 进行网路编程 看到这句话 xff0c 有没有感到很熟悉呀 xff1f 相信很多人在投递简历的时候都看到过这条要求 xff0c 很多人会觉得我们在实际开发中一般用不到这些知识 xf