分层

网络协议通常分不同层次进行开发,每一层负责不同的职责,一个协议簇指的是一组不同层次上的多个协议的组合。

TCP/IP通常被认为是一个四层协议系统:

  1. 链路层:主要是处理与电缆或其他传输媒介的物理接口细节;
  2. 网络层:处理分组在网络中的活动,例如分组的选路;在TCP/IP协议簇中包括IP协议(网际协议)、ICMP协议(Internet互联网控制报文协议)、IGMP协议(Internet组管理协议);
  3. 运输层主要为两台主机上的应用程序提供端对端的通信。TCP/IP协议簇中有两个协议:TCP(传输控制协议)与UDP(用户数据报协议)。
  4. 应用层:主要负责处理特定的应用程序细节,比如Telnet远程登录、FTP文件传输、SMTP简单邮件传输协议、SNMP简单网络管理协议。

一般而言,应用程序通常是一个用户进程,下三层一般在操作系统内核中执行。应用层关系应用程序的细节,对传输过程一无所知;而下三层处理所有的通信细节,对应用程序的细节一无所知。

TCP/IP的分层

以下为《TCP/IP详解》中会介绍到的网络协议。



IP协议是一种不可靠的网络层协议,在《计算机网络:自顶向下方法》中,称IP为“尽力而为”的协议,也就是说它没有保证一定会传输到正确的主机。

TCP协议是一种可靠的传输层协议,其使用IP作为网络层协议,因为IP并不是一个传输协议,所以TCP为了保持可靠性,做了很多用来保证准确性的处理。

UDP协议是一种不可靠的协议,其使用IP作为网络层协议。

ICMP协议是一个IP协议的附属协议,IP层用它来与其他主机或者路由器交换错误报文和其他重要信息。

IGMP是Internet组管理协议,用来将一个UDP数据报多播到多个主机。

ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口使用的特殊协议,用来转换IP层和网络接口层使用的地址(MAC地址)。

互联网的地址

最初的互联网地址(IP地址)是分为5类的,但是当时并没有想到互联网最后会是一个全球性的网络,导致这样分类会产生IP耗尽的问题。



网络号为一个32bit的数字,我们常见的网络号是xxx.xxx.xxx.xxx,是因为32位的地址通常写成四个十进制的数字,每一个整数代表了一个字节,称为“点分十进制表示法”。

域名地址

很明显,对于机器存储方便的32bit数字,哪怕是使用了点分十进制表示法,对于人类而言还是不好记忆,所以DNS便出现了,其相当于是一个全球性的分布式数据库,存储的便是域名与IP地址之间的映射。

封装

当应用程序通过TCP传送数据的时候,数据被送入协议栈内,然后逐个通过每一层直到被当做一串比特流送入网络。每一层都需要加一些首部信息,可能还会有尾部信息。

  • TCP传给IP的数据单元:TCP段;
  • IP传给网络接口层的数据单元:IP数据报;
  • 通过以太网传输的比特流:帧;

分用

当目的主机收到一个以太网数据帧时,数据开始从协议栈中由底向上一步步去掉各种协议加上的报文首部,并且检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称其为分用。

客户-服务器模型

网络应用程序一般在编写的时候都假设一端为客户,另外一端为服务器,目的是为了让服务器为客户提供一些特定服务。

该服务可以分为两种:重复型和并发型;

重复型

一个重复型服务器一般交互步骤如下:

  1. 等待客户请求;
  2. 处理客户请求;
  3. 发送响应给客户;
  4. 重复上述流程;

重复型服务器在2状态无法为其他客户机提供服务。

并发型

  1. 等待一个客户请求;
  2. 启动一个服务器来处理客户请求,可能生成新的进程、任务、线程。生成的新服务器对客户的全部请求进行处理。处理完毕终止服务器;
  3. 重复上述流程;

最新文章

  1. [原] Cgroup CPU, Blkio 测试
  2. Images.xcassets不能获取图片路径
  3. 一行神奇的javascript代码
  4. Response、Request、QueryString,repeater添加,修改,删除数据
  5. Ioc注入方式写dubbo client(非set beans)
  6. Selenium1(RC)与Selenium2(WebDriver)的概念介绍
  7. df 和 du 命令详解
  8. js 概念(构造函数)
  9. Delphi中的Rtti函数
  10. 移动web:tab选项卡
  11. php_windows搭建
  12. Infix to posfix 自己写stack,没有()
  13. sublime text 我的常用配置
  14. Spring Mvc + Easyui中根据查询结果导出文件
  15. 记录一些日常windows命令或操作技巧
  16. 获取Android设备WIFI的MAC地址 “MAC地址”
  17. Java 内存模型简单剖析
  18. 关于阿里云图片识别接口的demo
  19. Markdown打造高逼格博客
  20. 树莓3B+_安装vim

热门文章

  1. 关于less使用初学者常犯错误
  2. MCU软件最佳实践——使用printf打印数据
  3. 《剑指offer》面试题34. 二叉树中和为某一值的路径
  4. 【linux】Ubuntu20.04使用apt下载和卸载openJDK
  5. linux字符编码防止乱码
  6. 中文分词,自然语言处理器NLP。 六月份版本已上线。
  7. Java 中对象锁和类锁的区别? 关键字 Synchronized的用法?
  8. JoJoGAN 实践
  9. 阿里四面:你知道Spring AOP创建Proxy的过程吗?
  10. git reset HEAD 与 git reset --hard HEAD的区别