分层

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

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. 重复上述流程;

TCP/IP详解 读书笔记(一):概述的更多相关文章

  1. TCP/IP详解 读书笔记:TCP:传输控制协议

    TCP的服务 TCP为应用层提供一种面向连接的.可靠的字节流服务. 一个TCP连接中,仅有两方进行彼此通信,所以广播和多播不能用于TCP. TCP通过以下方式提供可靠性: 应用数据被切割为TCP认为最 ...

  2. TCP/IP详解学习笔记- 概述

    TCP/IP详解学习笔记(1)-- 概述1.TCP/IP的分层结构      网络协议通常分不同层次进行开发,每一层分别负责不同的同信功能.TCP/IP通常被认为是一个四层协议系统.      如图所 ...

  3. TCP/IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...

  4. TCP/IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

  5. TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)

    TCP/IP详解学习笔记   这位仁兄写得太好了   TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...

  6. 【转】TCP/IP详解学习笔记(二)

    TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据 ...

  7. 【转】TCP/IP详解学习笔记(一)

      TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(13)-T ...

  8. TCP/IP详解学习笔记(9)-TCP协议概述

    终于看到了TCP协议,这是TCP/IP详解里面最重要也是最精彩的部分,要花大力气来读.前面的TFTP和BOOTP都是一些简单的协议,就不写笔记了,写起来也没啥东西. TCP和UDP处在同一层---运输 ...

  9. TCP/IP详解学习笔记(3)-- IP:网际协议

    1.概述      IP是TCP/IP协议族中最为核心的协议.所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输.      IP提供不可靠,无连接的数据报传送服务. 不可靠:它不能保 ...

随机推荐

  1. 利用代码生成工具Database2Sharp生成ABP VNext框架项目代码

    我们在做某件事情的时候,一般需要详细了解它的特点,以及内在的逻辑关系,一旦我们详细了解了整个事物后,就可以通过一些辅助手段来提高我们的做事情的效率了.本篇随笔介绍ABP VNext框架各分层项目的规则 ...

  2. 机器学习&恶意代码静态检测

    目录 分析工具 方法概述 二进制灰度图 字节(熵)直方图 字符串信息 ELF结构信息 源码分析与OPcode FCG references: 分析工具 readelf elfparser ninja ...

  3. 【视频解码性能对比】opencv + cuvid + gpu vs. ffmpeg + cpu

    视频大小:1168856 字节画面尺寸:480*848帧数:275opencv + cuvid + tesla P4, 解码性能:1426.84 fps ffmpeg 4.0 API + [Intel ...

  4. fidder返回参数Raw乱码问题

  5. k8s 基于RBAC的认证、授权介绍和实践

    在K8S中,当我们试图通过API与集群资源交互时,必定经过集群资源管理对象入口kube-apiserver.显然不是随随便便来一个请求它都欢迎的,每个请求都需要经过合规检查,包括Authenticat ...

  6. 如何理解python中的cmp_to_key()函数

    cmp_to_key() 在functools包里的函数,将老式的比较函数(cmp function)转化为关键字函数(key function). 与接受key function的工具一同使用(如 ...

  7. 无缓冲文件IO和目录操作

    引言 在后台开发中,对于文件I/O我们通常不使用C语言封装的fopen.fread.fwrite标准I/O,而是直接使用Linux提供的系统调用函数.因为这些系统调用没有使用用户缓冲区,我们直接与内核 ...

  8. 「数据结构」Link-Cut Tree(LCT)

    #1.0 简述 #1.1 动态树问题 维护一个森林,支持删除某条边,加入某条边,并保证加边.删边之后仍然是森林.我们需要维护这个森林的一些信息. 一般的操作有两点连通性,两点路径权值和等等. #1.2 ...

  9. Linux无写权限打zip

    opt下tiger.txt没权限得时候可以这样直接用zip打包 zip /tmp/1.zip /opt/tiger.txt

  10. 分页方法需要参数(当前页数,总数据量,拿到query的值)

    class Pagination: def __init__(self, page_num, all_count ,params=None,per_num=10,max_show=11): " ...